diff options
Diffstat (limited to 'init/parser.c')
| -rw-r--r-- | init/parser.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/init/parser.c b/init/parser.c index a51691be..6a22d242 100644 --- a/init/parser.c +++ b/init/parser.c @@ -158,6 +158,9 @@ int lookup_keyword(const char *s) if (!strcmp(s, "nsmod")) return K_insmod; if (!strcmp(s, "mport")) return K_import; break; + case 'k': + if (!strcmp(s, "eycodes")) return K_keycodes; + break; case 'l': if (!strcmp(s, "oglevel")) return K_loglevel; break; @@ -183,7 +186,7 @@ int lookup_keyword(const char *s) if (!strcmp(s, "tart")) return K_start; if (!strcmp(s, "top")) return K_stop; if (!strcmp(s, "ymlink")) return K_symlink; - if (!strcmp(s, "ysclktz")) return K_sysclktz; + if (!strcmp(s, "ysclktz")) return K_sysclktz; break; case 't': if (!strcmp(s, "rigger")) return K_trigger; @@ -440,6 +443,29 @@ struct service *service_find_by_pid(pid_t pid) return 0; } +struct service *service_find_by_keychord(int keychord_id) +{ + struct listnode *node; + struct service *svc; + list_for_each(node, &service_list) { + svc = node_to_item(node, struct service, slist); + if (svc->keychord_id == keychord_id) { + return svc; + } + } + return 0; +} + +void service_for_each(void (*func)(struct service *svc)) +{ + struct listnode *node; + struct service *svc; + list_for_each(node, &service_list) { + svc = node_to_item(node, struct service, slist); + func(svc); + } +} + void service_for_each_class(const char *classname, void (*func)(struct service *svc)) { @@ -586,7 +612,7 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args { struct service *svc = state->context; struct command *cmd; - int kw, kw_nargs; + int i, kw, kw_nargs; if (nargs == 0) { return; @@ -624,6 +650,21 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args svc->nr_supp_gids = n - 2; } break; + case K_keycodes: + if (nargs < 2) { + parse_error(state, "keycodes option requires atleast one keycode\n"); + } else { + svc->keycodes = malloc((nargs - 1) * sizeof(svc->keycodes[0])); + if (!svc->keycodes) { + parse_error(state, "could not allocate keycodes\n"); + } else { + svc->nkeycodes = nargs - 1; + for (i = 1; i < nargs; i++) { + svc->keycodes[i - 1] = atoi(args[i]); + } + } + } + break; case K_oneshot: svc->flags |= SVC_ONESHOT; break; |
