static void
netifd_dir_pop(int prev_fd)
{
+ if (prev_fd < 0)
+ return;
+
if (fchdir(prev_fd)) {}
close(prev_fd);
}
tok = json_tokener_new();
obj = json_tokener_parse_ex(tok, start, len);
- if (!is_error(obj)) {
+ if (obj) {
netifd_init_script_handler(name, obj, cb);
json_object_put(obj);
json_tokener_free(tok);
int i, prev_fd;
prev_fd = netifd_dir_push(dir_fd);
- glob("./*.sh", 0, NULL, &g);
+ if (glob("./*.sh", 0, NULL, &g)) {
+ netifd_dir_pop(prev_fd);
+ return;
+ }
+
for (i = 0; i < g.gl_pathc; i++)
netifd_parse_script_handler(g.gl_pathv[i], cb);
netifd_dir_pop(prev_fd);
+
+ globfree(&g);
}
char *