X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fverbs.c;h=bc1ae4353524c1c69eaf24330aca38c6db0191af;hp=ead2ff60f4cd448b1f3f5748349814cb49eb3aad;hb=43343ee7c298dad8db0698b4c181a42ecb7bb216;hpb=cd61c3bfd718fb398cc53ced906266a9297782c9 diff --git a/src/shared/verbs.c b/src/shared/verbs.c index ead2ff60f..bc1ae4353 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); + } }