summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc/getopt.c17
-rw-r--r--src/misc/getopt_long.c7
2 files changed, 20 insertions, 4 deletions
diff --git a/src/misc/getopt.c b/src/misc/getopt.c
index f94c4f70..a698c8d4 100644
--- a/src/misc/getopt.c
+++ b/src/misc/getopt.c
@@ -24,8 +24,20 @@ int getopt(int argc, char * const argv[], const char *optstring)
optind = 1;
}
- if (optind >= argc || !argv[optind] || argv[optind][0] != '-' || !argv[optind][1])
+ if (optind >= argc || !argv[optind])
return -1;
+
+ if (argv[optind][0] != '-') {
+ if (optstring[0] == '-') {
+ optarg = argv[optind++];
+ return 1;
+ }
+ return -1;
+ }
+
+ if (!argv[optind][1])
+ return -1;
+
if (argv[optind][1] == '-' && !argv[optind][2])
return optind++, -1;
@@ -43,6 +55,9 @@ int getopt(int argc, char * const argv[], const char *optstring)
optpos = 0;
}
+ if (optstring[0] == '-')
+ optstring++;
+
for (i=0; (l = mbtowc(&d, optstring+i, MB_LEN_MAX)) && d!=c; i+=l>0?l:1);
if (d != c) {
diff --git a/src/misc/getopt_long.c b/src/misc/getopt_long.c
index 4ef5a5c7..3d318ce5 100644
--- a/src/misc/getopt_long.c
+++ b/src/misc/getopt_long.c
@@ -12,9 +12,10 @@ static int __getopt_long(int argc, char *const *argv, const char *optstring, con
__optpos = 0;
optind = 1;
}
- if (optind >= argc || !argv[optind] || argv[optind][0] != '-') return -1;
- if ((longonly && argv[optind][1]) ||
- (argv[optind][1] == '-' && argv[optind][2]))
+ if (optind >= argc || !argv[optind]) return -1;
+ if (argv[optind][0] == '-' &&
+ ((longonly && argv[optind][1]) ||
+ (argv[optind][1] == '-' && argv[optind][2])))
{
int i;
for (i=0; longopts[i].name; i++) {