summaryrefslogtreecommitdiff
path: root/modutils/modprobe.c
diff options
context:
space:
mode:
authorDenis Vlasenko2009-03-03 18:47:56 +0000
committerDenis Vlasenko2009-03-03 18:47:56 +0000
commit9604e1b8fc1e6c64fb977791d5f2819389a37377 (patch)
tree072ba5f8e13dbbc380147c79468ed77fa8e1ae3b /modutils/modprobe.c
parent787a492f23bbd567fb9bf2486ce9994bd19ebec2 (diff)
downloadbusybox-9604e1b8fc1e6c64fb977791d5f2819389a37377.zip
busybox-9604e1b8fc1e6c64fb977791d5f2819389a37377.tar.gz
modprobe: emit "can't open 'modules.dep': (errno)" instead of "module not found"
*: s/can't open %s/can't open '%s'/, it's better to use same string. function old new delta do_modprobe 588 601 +13 config_file_action 339 345 +6 modprobe_main 565 570 +5 unable_to_open 14 16 +2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/0 up/down: 26/0) Total: 26 bytes text data bss dec hex filename 816800 476 7892 825168 c9750 busybox_old 816812 476 7892 825180 c975c busybox_unstripped
Diffstat (limited to 'modutils/modprobe.c')
-rw-r--r--modutils/modprobe.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/modutils/modprobe.c b/modutils/modprobe.c
index ad39be0..9454833 100644
--- a/modutils/modprobe.c
+++ b/modutils/modprobe.c
@@ -100,8 +100,7 @@ static int FAST_FUNC config_file_action(const char *filename,
}
config_close(p);
error:
- if (ENABLE_FEATURE_CLEAN_UP)
- RELEASE_CONFIG_BUFFER(modname);
+ RELEASE_CONFIG_BUFFER(modname);
return rc;
}
@@ -141,8 +140,13 @@ static int do_modprobe(struct modprobe_conf *conf, const char *module)
int rc = -1;
p = config_open2(CONFIG_DEFAULT_DEPMOD_FILE, fopen_for_read);
+ /* Modprobe does not work at all without modprobe.dep,
+ * even if the full module name is given. Returning error here
+ * was making us later confuse user with this message:
+ * "module /full/path/to/existing/file/module.ko not found".
+ * It's better to die immediately, with good message: */
if (p == NULL)
- goto error;
+ bb_perror_msg_and_die("can't open '%s'", CONFIG_DEFAULT_DEPMOD_FILE);
while (config_read(p, tokens, 2, 1, "# \t", PARSE_NORMAL)) {
colon = last_char_is(tokens[0], ':');
@@ -179,23 +183,21 @@ static int do_modprobe(struct modprobe_conf *conf, const char *module)
rc = bb_init_module(fn, options);
if (rc == 0)
llist_add_to(&loaded, xstrdup(modname));
- if (ENABLE_FEATURE_CLEAN_UP)
- free(options);
+ free(options);
}
- if (ENABLE_FEATURE_CLEAN_UP)
- free(fn);
+ free(fn);
}
-error_not_found:
+ error_not_found:
config_close(p);
-error:
- if (ENABLE_FEATURE_CLEAN_UP)
- RELEASE_CONFIG_BUFFER(modname);
+
if (rc > 0 && !(option_mask32 & INSMOD_OPT_SILENT))
bb_error_msg("failed to %sload module %s: %s",
(option_mask32 & MODPROBE_OPT_REMOVE) ? "un" : "",
module, moderror(rc));
+
+ RELEASE_CONFIG_BUFFER(modname);
return rc;
}
@@ -278,8 +280,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
char *realname = llist_pop(&conf->aliases);
if (check_blacklist(conf, realname))
do_modprobe(conf, realname);
- if (ENABLE_FEATURE_CLEAN_UP)
- free(realname);
+ free(realname);
}
}
argv++;