diff options
Diffstat (limited to 'src/shared/verbs.c')
-rw-r--r-- | src/shared/verbs.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/shared/verbs.c b/src/shared/verbs.c index ead2ff60f4..bc1ae43535 100644 --- a/src/shared/verbs.c +++ b/src/shared/verbs.c @@ -49,11 +49,10 @@ int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) { return -EINVAL; } - - if (!name) - found = !!(verbs[i].flags & VERB_DEFAULT); - else + if (name) found = streq(name, verbs[i].verb); + else + found = !!(verbs[i].flags & VERB_DEFAULT); if (found) { verb = &verbs[i]; @@ -61,6 +60,11 @@ int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) { } } + assert(verb); + + if (!name) + left = 1; + if (verb->min_args != VERB_ANY && (unsigned) left < verb->min_args) { log_error("Too few arguments."); @@ -73,5 +77,14 @@ int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) { return -EINVAL; } - return verb->dispatch(left, argv + optind, userdata); + if (name) + return verb->dispatch(left, argv + optind, userdata); + else { + char* fake[2] = { + (char*) verb->verb, + NULL + }; + + return verb->dispatch(1, fake, userdata); + } } |