chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
run: add a new "-t" mode for invoking a binary on an allocated TTY
[elogind.git]
/
src
/
shared
/
verbs.c
diff --git
a/src/shared/verbs.c
b/src/shared/verbs.c
index ead2ff60f4cd448b1f3f5748349814cb49eb3aad..c7beccc2dc291c762307a3f7ccb87200c0fdf9eb 100644
(file)
--- 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;
}
return -EINVAL;
}
-
- if (!name)
- found = !!(verbs[i].flags & VERB_DEFAULT);
- else
+ if (name)
found = streq(name, verbs[i].verb);
found = streq(name, verbs[i].verb);
+ else
+ found = !!(verbs[i].flags & VERB_DEFAULT);
if (found) {
verb = &verbs[i];
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.");
if (verb->min_args != VERB_ANY &&
(unsigned) left < verb->min_args) {
log_error("Too few arguments.");
@@
-69,9
+73,18
@@
int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) {
if (verb->max_args != VERB_ANY &&
(unsigned) left > verb->max_args) {
if (verb->max_args != VERB_ANY &&
(unsigned) left > verb->max_args) {
- log_error("Too many argument
.s
");
+ log_error("Too many argument
s.
");
return -EINVAL;
}
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);
+ }
}
}