summaryrefslogtreecommitdiff
path: root/modutils
diff options
context:
space:
mode:
authorEric Andersen2001-01-24 19:07:09 +0000
committerEric Andersen2001-01-24 19:07:09 +0000
commita18aaf1b6aa4464d09486a3b0ab34a791e63bc41 (patch)
tree4d00f1ac9db68ad4432288e489631b4677181290 /modutils
parentc5cd470fdb0f1a569a24fa65029c32db20b02f3c (diff)
downloadbusybox-a18aaf1b6aa4464d09486a3b0ab34a791e63bc41.zip
busybox-a18aaf1b6aa4464d09486a3b0ab34a791e63bc41.tar.gz
Make insmod understand (and ignore) -L, and convert it to use getopt.
Diffstat (limited to 'modutils')
-rw-r--r--modutils/insmod.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/modutils/insmod.c b/modutils/insmod.c
index be27a1f..a134fea 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -78,7 +78,7 @@
#ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1;
-#ident "$Id: insmod.c,v 1.36 2001/01/23 22:30:04 markw Exp $"
+#ident "$Id: insmod.c,v 1.37 2001/01/24 19:07:09 andersen Exp $"
/* This file contains the structures used by the 2.0 and 2.1 kernels.
We do not use the kernel headers directly because we do not wish
@@ -284,7 +284,7 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1;
-#ident "$Id: insmod.c,v 1.36 2001/01/23 22:30:04 markw Exp $"
+#ident "$Id: insmod.c,v 1.37 2001/01/24 19:07:09 andersen Exp $"
/* The relocatable object is manipulated using elfin types. */
@@ -2872,6 +2872,7 @@ static void hide_special_symbols(struct obj_file *f)
extern int insmod_main( int argc, char **argv)
{
+ int opt;
int k_crcs;
int k_new_syscalls;
int len;
@@ -2891,15 +2892,9 @@ extern int insmod_main( int argc, char **argv)
int m_crcs;
#endif
-
- if (argc <= 1) {
- usage(insmod_usage);
- }
-
/* Parse any options */
- while (--argc > 0 && **(++argv) == '-') {
- while (*(++(*argv))) {
- switch (**argv) {
+ while ((opt = getopt(argc, argv, "fkvxL")) > 0) {
+ switch (opt) {
case 'f': /* force loading */
flag_force_load = 1;
break;
@@ -2912,20 +2907,26 @@ extern int insmod_main( int argc, char **argv)
case 'x': /* do not export externs */
flag_export = 0;
break;
+ case 'L': /* Stub warning */
+ /* This is needed for compatibility with modprobe.
+ * In theory, this does locking, but we don't do
+ * that. So be careful and plan your life around not
+ * loading the same module 50 times concurrently. */
+ break;
default:
usage(insmod_usage);
- }
}
}
-
- if (argc <= 0) {
+
+ if (argv[optind] == NULL) {
usage(insmod_usage);
}
+
/* Grab the module name */
- if ((tmp = strrchr(*argv, '/')) != NULL) {
+ if ((tmp = strrchr(argv[optind], '/')) != NULL) {
tmp++;
} else {
- tmp = *argv;
+ tmp = argv[optind];
}
len = strlen(tmp);
@@ -2936,7 +2937,7 @@ extern int insmod_main( int argc, char **argv)
strcat(m_fullName, ".o");
/* Get a filedesc for the module */
- if ((fp = fopen(*argv, "r")) == NULL) {
+ if ((fp = fopen(argv[optind], "r")) == NULL) {
/* Hmpf. Could not open it. Search through _PATH_MODULES to find a module named m_name */
if (recursive_action(_PATH_MODULES, TRUE, FALSE, FALSE,
findNamedModule, 0, m_fullName) == FALSE)
@@ -2950,7 +2951,7 @@ extern int insmod_main( int argc, char **argv)
} else
error_msg_and_die("No module named '%s' found in '%s'\n", m_fullName, _PATH_MODULES);
} else
- memcpy(m_filename, *argv, strlen(*argv));
+ memcpy(m_filename, argv[optind], strlen(argv[optind]));
if ((f = obj_load(fp)) == NULL)