auto import from //branches/cupcake/...@125939
diff --git a/init/parser.c b/init/parser.c
index a51691b..6a22d24 100644
--- a/init/parser.c
+++ b/init/parser.c
@@ -158,6 +158,9 @@
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 @@
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 @@
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 @@
{
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 @@
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;