}
}
- if ((optchar = (int)*place++) == (int)':' ||
- (optchar == (int)'-' && *place != '\0') ||
- (oli = strchr(options, optchar)) == NULL) {
+ 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 the user specified "-" and '-' isn't listed in
- * options, return -1 (non-option) as per POSIX.
- * Otherwise, it is an unknown option character (or ':').
+ * Unknown option character.
*/
- if (optchar == (int)'-' && *place == '\0')
- return (-1);
if (!*place)
++optind;
#ifdef GNU_COMPATIBLE