X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubox.git;a=blobdiff_plain;f=kmodloader.c;h=c780379ed47f4349a2bc0c96d3bd9481943ea79f;hp=e32e6affb64899a366cb81f6483865a061160891;hb=9371411715c8dd882f1d65a712f1f38b6d38d01f;hpb=aead2c0cbffdda9b46d74a998a4c6aeef423b21a diff --git a/kmodloader.c b/kmodloader.c index e32e6af..c780379 100644 --- a/kmodloader.c +++ b/kmodloader.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -303,12 +302,14 @@ static struct module* get_module_info(const char *module, const char *name) } strings = map + offset; - while (strings && (strings < map + offset + size)) { + while (true) { char *sep; int len; while (!strings[0]) strings++; + if (strings >= map + offset + size) + break; sep = strstr(strings, "="); if (!sep) break; @@ -411,12 +412,14 @@ static int print_modinfo(char *module) strings = map + offset; printf("module:\t\t%s\n", module); - while (strings && (strings < map + offset + size)) { + while (true) { char *dup = NULL; char *sep; while (!strings[0]) strings++; + if (strings >= map + offset + size) + break; sep = strstr(strings, "="); if (!sep) break; @@ -609,7 +612,10 @@ static int main_insmod(int argc, char **argv) cur += sprintf(cur, "%s", argv[i]); } - init_module_folders(); + if (init_module_folders()) { + fprintf(stderr, "Failed to find the folder holding the modules\n"); + return -1; + } if (get_module_path(argv[1])) { name = argv[1]; @@ -717,8 +723,15 @@ static int main_modprobe(int argc, char **argv) { struct module *m; char *name; + char *mod = NULL; + int i; - if (argc != 2) + for (i = 1; i < argc; i++) + if (argv[i][0] != '-') { + mod = argv[i]; + break; + } + if (!mod) return print_usage("modprobe"); if (scan_loaded_modules()) @@ -727,7 +740,7 @@ static int main_modprobe(int argc, char **argv) if (scan_module_folders()) return -1; - name = get_module_name(argv[1]); + name = get_module_name(mod); m = find_module(name); if (m && m->state == LOADED) { ULOG_ERR("%s is already loaded\n", name); @@ -759,7 +772,7 @@ static int main_modprobe(int argc, char **argv) static int main_loader(int argc, char **argv) { int gl_flags = GLOB_NOESCAPE | GLOB_MARK; - char *dir = "/etc/modules.d/*"; + char *dir = "/etc/modules.d/"; struct module *m; glob_t gl; char *path; @@ -772,13 +785,17 @@ static int main_loader(int argc, char **argv) strcpy(path, dir); strcat(path, "*"); - if (scan_loaded_modules()) + if (scan_loaded_modules()) { + free (path); return -1; + } - if (scan_module_folders()) + if (scan_module_folders()) { + free (path); return -1; + } - syslog(LOG_INFO, "kmodloader: loading kernel modules from %s\n", path); + ULOG_INFO("loading kernel modules from %s\n", path); if (glob(path, gl_flags, NULL, &gl) < 0) goto out; @@ -829,6 +846,8 @@ static int main_loader(int argc, char **argv) avl_for_each_element(&modules, m, avl) if ((m->state == PROBE) || (m->error)) ULOG_ERR("- %s - %d\n", m->name, deps_available(m, 1)); + } else { + ULOG_INFO("done loading kernel modules from %s\n", path); } out: @@ -874,5 +893,6 @@ int main(int argc, char **argv) if (!strcmp(exec, "modprobe")) return main_modprobe(argc, argv); + ulog_open(ULOG_KMSG, LOG_USER, "kmodloader"); return main_loader(argc, argv); }