modprobe-small: make insmod command line compatible

function                                             old     new   delta
modprobe_main                                        326     435    +109
moderror                                               -      52     +52
process_module                                       577     530     -47
This commit is contained in:
Denis Vlasenko 2008-09-06 14:14:01 +00:00
parent 4acb1b0793
commit 1c781cc8ff
2 changed files with 27 additions and 6 deletions

View File

@ -599,7 +599,7 @@ static void process_module(char *name, const char *cmdline_options)
} }
free(deps); free(deps);
/* insmod -> load it */ /* modprobe -> load it */
if (!is_rmmod && !strstr(options, "blacklist")) { if (!is_rmmod && !strstr(options, "blacklist")) {
errno = 0; errno = 0;
if (load_module(info->pathname, options) != 0) { if (load_module(info->pathname, options) != 0) {
@ -688,8 +688,10 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
/* Prevent ugly corner cases with no modules at all */ /* Prevent ugly corner cases with no modules at all */
modinfo = xzalloc(sizeof(modinfo[0])); modinfo = xzalloc(sizeof(modinfo[0]));
/* Goto modules directory */ if ('i' != applet0) { /* not insmod */
xchdir(CONFIG_DEFAULT_MODULES_DIR); /* Goto modules directory */
xchdir(CONFIG_DEFAULT_MODULES_DIR);
}
uname(&uts); /* never fails */ uname(&uts); /* never fails */
/* depmod? */ /* depmod? */
@ -736,8 +738,10 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
option_mask32 |= OPT_r; option_mask32 |= OPT_r;
} }
/* Goto $VERSION directory */ if ('i' != applet0) { /* not insmod */
xchdir(uts.release); /* Goto $VERSION directory */
xchdir(uts.release);
}
#if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE #if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
/* If not rmmod, parse possible module options given on command line. /* If not rmmod, parse possible module options given on command line.
@ -758,11 +762,26 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
argv[1] = NULL; argv[1] = NULL;
#endif #endif
if ('i' == applet0) { /* insmod */
size_t len;
void *map;
len = MAXINT(ssize_t);
map = xmalloc_xopen_read_close(*argv, &len);
if (init_module(map, len,
USE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "")
SKIP_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("")
) != 0)
bb_error_msg_and_die("cannot insert '%s': %s",
*argv, moderror(errno));
return 0;
}
/* Try to load modprobe.dep.bb */ /* Try to load modprobe.dep.bb */
load_dep_bb(); load_dep_bb();
/* Load/remove modules. /* Load/remove modules.
* Only rmmod loops here, insmod/modprobe has only argv[0] */ * Only rmmod loops here, modprobe has only argv[0] */
do { do {
process_module(*argv++, options); process_module(*argv++, options);
} while (*argv); } while (*argv);

View File

@ -20,7 +20,9 @@
#include <linux/if_ether.h> #include <linux/if_ether.h>
#endif #endif
#if !ENABLE_WERROR
#warning de-bloat #warning de-bloat
#endif
/* Before re-enabling this, please (1) conditionalize exotic protocols /* Before re-enabling this, please (1) conditionalize exotic protocols
* on CONFIG_something, and (2) decouple strings and numbers * on CONFIG_something, and (2) decouple strings and numbers
* (use llproto_ids[] = n,n,n..; and llproto_names[] = "loop\0" "pup\0" ...;) * (use llproto_ids[] = n,n,n..; and llproto_names[] = "loop\0" "pup\0" ...;)