-static void proto_shell_add_script(const char *name)
-{
- struct json_tokener *tok = NULL;
- json_object *obj;
- static char buf[512];
- char *start, *cmd;
- FILE *f;
- int len;
-
-#define DUMP_SUFFIX " '' dump"
-
- cmd = alloca(strlen(name) + 1 + sizeof(DUMP_SUFFIX));
- sprintf(cmd, "%s" DUMP_SUFFIX, name);
-
- f = popen(cmd, "r");
- if (!f)
- return;
-
- do {
- start = fgets(buf, sizeof(buf), f);
- if (!start)
- continue;
-
- len = strlen(start);
-
- if (!tok)
- tok = json_tokener_new();
-
- obj = json_tokener_parse_ex(tok, start, len);
- if (!is_error(obj)) {
- proto_shell_add_handler(name, obj);
- json_object_put(obj);
- json_tokener_free(tok);
- tok = NULL;
- } else if (start[len - 1] == '\n') {
- json_tokener_free(tok);
- tok = NULL;
- }
- } while (!feof(f) && !ferror(f));
-
- if (tok)
- json_tokener_free(tok);
-
- pclose(f);
-}
-