{
int fd = open(module, O_RDONLY);
unsigned int offset, size;
- char *map, *strings, *dep = NULL;
- struct module *m;
+ char *map = MAP_FAILED, *strings, *dep = NULL;
+ struct module *m = NULL;
struct stat s;
- if (!fd) {
+ if (fd < 0) {
ULOG_ERR("failed to open %s\n", module);
- return NULL;
+ goto out;
}
if (fstat(fd, &s) == -1) {
ULOG_ERR("failed to stat %s\n", module);
- return NULL;
+ goto out;
}
map = mmap(NULL, s.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (map == MAP_FAILED) {
ULOG_ERR("failed to mmap %s\n", module);
- return NULL;
+ goto out;
}
if (elf_find_section(map, ".modinfo", &offset, &size)) {
ULOG_ERR("failed to load the .modinfo section from %s\n", module);
- return NULL;
+ goto out;
}
strings = map + offset;
}
m = alloc_module(name, dep, s.st_size);
- if (!m)
- return NULL;
- m->state = SCANNED;
+ if (m)
+ m->state = SCANNED;
+
+out:
+ if (map != MAP_FAILED)
+ munmap(map, s.st_size);
+
+ if (fd >= 0)
+ close(fd);
return m;
}
int fd = open(module, O_RDONLY);
unsigned int offset, size;
struct stat s;
- char *map, *strings;
+ char *map = MAP_FAILED, *strings;
+ int rv = -1;
- if (!fd) {
+ if (fd < 0) {
ULOG_ERR("failed to open %s\n", module);
- return -1;
+ goto out;
}
if (fstat(fd, &s) == -1) {
ULOG_ERR("failed to stat %s\n", module);
- return -1;
+ goto out;
}
map = mmap(NULL, s.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (map == MAP_FAILED) {
ULOG_ERR("failed to mmap %s\n", module);
- return -1;
+ goto out;
}
if (elf_find_section(map, ".modinfo", &offset, &size)) {
ULOG_ERR("failed to load the .modinfo section from %s\n", module);
- return -1;
+ goto out;
}
strings = map + offset;
free(dup);
}
- return 0;
+ rv = 0;
+
+out:
+ if (map != MAP_FAILED)
+ munmap(map, s.st_size);
+
+ if (fd >= 0)
+ close(fd);
+
+ return rv;
}
static int deps_available(struct module *m, int verbose)
char *dep;
int err = 0;
- if (!strcmp(m->depends, "-") || !strcmp(m->depends, ""))
+ if (!m->depends || !strcmp(m->depends, "-") || !strcmp(m->depends, ""))
return 0;
dep = m->depends;
}
fd = open(path, O_RDONLY);
- if (!fd) {
+ if (fd < 0) {
ULOG_ERR("cannot open %s\n", path);
return ret;
}
cur += sprintf(cur, "%s", argv[i]);
}
+ 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];
} else if (!get_module_path(name)) {
static int main_lsmod(int argc, char **argv)
{
struct module *m;
+ char *dep;
if (scan_loaded_modules())
return -1;
avl_for_each_element(&modules, m, avl)
- if (m->state == LOADED)
- printf("%-20s%8d%3d %s\n",
- m->name, m->size, m->usage,
- (*m->depends == '-') ? ("") : (m->depends));
+ if (m->state == LOADED) {
+ printf("%-20s%8d%3d ",
+ m->name, m->size, m->usage);
+ if (m->depends && strcmp(m->depends, "-") && strcmp(m->depends, "")) {
+ dep = m->depends;
+ while (*dep) {
+ printf("%s", dep);
+ dep = dep + strlen(dep) + 1;
+ if (*dep)
+ printf(",");
+ }
+ }
+ printf("\n");
+ }
free_modules();
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;
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(0, "kmodloader: loading kernel modules from %s\n", path);
+ syslog(LOG_INFO, "kmodloader: loading kernel modules from %s\n", path);
if (glob(path, gl_flags, NULL, &gl) < 0)
goto out;