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:
parent
4acb1b0793
commit
1c781cc8ff
@ -599,7 +599,7 @@ static void process_module(char *name, const char *cmdline_options)
|
||||
}
|
||||
free(deps);
|
||||
|
||||
/* insmod -> load it */
|
||||
/* modprobe -> load it */
|
||||
if (!is_rmmod && !strstr(options, "blacklist")) {
|
||||
errno = 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 */
|
||||
modinfo = xzalloc(sizeof(modinfo[0]));
|
||||
|
||||
if ('i' != applet0) { /* not insmod */
|
||||
/* Goto modules directory */
|
||||
xchdir(CONFIG_DEFAULT_MODULES_DIR);
|
||||
}
|
||||
uname(&uts); /* never fails */
|
||||
|
||||
/* depmod? */
|
||||
@ -736,8 +738,10 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
||||
option_mask32 |= OPT_r;
|
||||
}
|
||||
|
||||
if ('i' != applet0) { /* not insmod */
|
||||
/* Goto $VERSION directory */
|
||||
xchdir(uts.release);
|
||||
}
|
||||
|
||||
#if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
|
||||
/* 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;
|
||||
#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 */
|
||||
load_dep_bb();
|
||||
|
||||
/* Load/remove modules.
|
||||
* Only rmmod loops here, insmod/modprobe has only argv[0] */
|
||||
* Only rmmod loops here, modprobe has only argv[0] */
|
||||
do {
|
||||
process_module(*argv++, options);
|
||||
} while (*argv);
|
||||
|
@ -20,7 +20,9 @@
|
||||
#include <linux/if_ether.h>
|
||||
#endif
|
||||
|
||||
#if !ENABLE_WERROR
|
||||
#warning de-bloat
|
||||
#endif
|
||||
/* Before re-enabling this, please (1) conditionalize exotic protocols
|
||||
* on CONFIG_something, and (2) decouple strings and numbers
|
||||
* (use llproto_ids[] = n,n,n..; and llproto_names[] = "loop\0" "pup\0" ...;)
|
||||
|
Loading…
Reference in New Issue
Block a user