init: Handle commands in event queue loop

Change-Id: I679059dae43143f3c8f16b68de5694539b699e50
diff --git a/init/parser.c b/init/parser.c
index 9424e7e..b045216 100644
--- a/init/parser.c
+++ b/init/parser.c
@@ -562,6 +562,24 @@
     }
 }
 
+void queue_builtin_action(int (*func)(int nargs, char **args), char *name)
+{
+    struct action *act;
+    struct command *cmd;
+
+    act = calloc(1, sizeof(*act));
+    act->name = name;
+    list_init(&act->commands);
+
+    cmd = calloc(1, sizeof(*cmd));
+    cmd->func = func;
+    cmd->args[0] = name;
+    list_add_tail(&act->commands, &cmd->clist);
+
+    list_add_tail(&action_list, &act->alist);
+    action_add_queue_tail(act);
+}
+
 void action_add_queue_tail(struct action *act)
 {
     list_add_tail(&action_queue, &act->qlist);
@@ -579,6 +597,11 @@
     }
 }
 
+int action_queue_empty()
+{
+    return list_empty(&action_queue);
+}
+
 static void *parse_service(struct parse_state *state, int nargs, char **args)
 {
     struct service *svc;