- optchar = (int)*place++;
- /*
- * If the user specified "-" and '-' isn't listed in
- * options, return -1 (non-option) as per POSIX.
- */
- if (optchar == (int)'-' && *place == '\0')
- return (-1);
- if (optchar == (int)':') {
- if (!*place)
- ++optind;
-#ifdef GNU_COMPATIBLE
- if (PRINT_ERROR)
- warnx(posixly_correct ? illoptchar : gnuoptchar,
- optchar);
-#else
- if (PRINT_ERROR)
- warnx(illoptchar, optchar);
-#endif
- optopt = optchar;
- return (BADCH);
- }
- oli = strchr(options, optchar);
- if (oli == NULL) {
+ if ((optchar = (int)*place++) == (int)':' ||
+ (optchar == (int)'-' && *place != '\0') ||
+ (oli = strchr(options, optchar)) == NULL) {