summaryrefslogtreecommitdiff
path: root/src/common/cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/cmd.c')
-rw-r--r--src/common/cmd.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/common/cmd.c b/src/common/cmd.c
index 03a2836..9e1fce4 100644
--- a/src/common/cmd.c
+++ b/src/common/cmd.c
@@ -1046,40 +1046,42 @@ int Cmd_ParseOptions(const cmd_option_t *opt)
}
return -1; // special terminator
}
+
+ // check for long option argument
if ((p = strchr(s, '=')) != NULL) {
*p = 0;
}
+
+ // parse long option
for (o = opt; o->sh; o++) {
if (!strcmp(o->lo, s)) {
break;
}
}
+ if (!o->sh) {
+ goto unknown;
+ }
+
+ // parse long option argument
if (p) {
- if (o->sh[1] == ':') {
- cmd_optarg = p + 1;
- } else {
- Com_Printf("%s does not take an argument.\n", o->lo);
+ if (o->sh[1] != ':') {
+ Com_Printf("%s does not take an argument.\n", cmd_argv[cmd_optind]);
Cmd_PrintHint();
+ return '!';
}
- *p = 0;
+ cmd_optarg = p + 1;
}
} else {
- p = NULL;
- if (s[1]) {
- goto unknown;
- }
+ // parse short option
for (o = opt; o->sh; o++) {
if (o->sh[0] == *s) {
break;
}
}
- }
-
- if (!o->sh) {
-unknown:
- Com_Printf("Unknown option: %s.\n", cmd_argv[cmd_optind]);
- Cmd_PrintHint();
- return '?';
+ if (!o->sh || s[1]) {
+ goto unknown;
+ }
+ p = NULL;
}
// parse option argument
@@ -1093,8 +1095,12 @@ unknown:
}
cmd_optind++;
-
return o->sh[0];
+
+unknown:
+ Com_Printf("Unknown option: %s.\n", cmd_argv[cmd_optind]);
+ Cmd_PrintHint();
+ return '?';
}
void Cmd_PrintUsage(const cmd_option_t *opt, const char *suffix)