On Friday 05 September 2008 11:04, Vladimir Dronnikov wrote:
> The last nail into small modutils :^))

I'm surprised that you don't like your own program :)

Small modutils are *small* and this may be important
for some people.

Try this patch, it makes insmod work in modutils-small.
--
vda
diff -d -urpN busybox.3/modutils/modprobe-small.c busybox.4/modutils/modprobe-small.c
--- busybox.3/modutils/modprobe-small.c	2008-09-06 16:00:14.000000000 +0200
+++ busybox.4/modutils/modprobe-small.c	2008-09-06 15:54:07.000000000 +0200
@@ -599,7 +599,7 @@ static void process_module(char *name, c
 	}
 	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,
 	/* Prevent ugly corner cases with no modules at all */
 	modinfo = xzalloc(sizeof(modinfo[0]));
 
-	/* Goto modules directory */
-	xchdir(CONFIG_DEFAULT_MODULES_DIR);
+	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,
 		option_mask32 |= OPT_r;
 	}
 
-	/* Goto $VERSION directory */
-	xchdir(uts.release);
+	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,
 		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);
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to