So far the only alternative is one which provides the original depmod behavior.
Signed-off-by: Keegan McAllister <keegan@xxxxxxxxxxx>
---
depmod.c | 42 ++++++++++++++++++++++++++++++++++++------
1 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/depmod.c b/depmod.c
index 8b03ac1..c6287f4 100644
--- a/depmod.c
+++ b/depmod.c
@@ -1336,6 +1336,8 @@ static void parse_toplevel_config(const char *filename,
return;
}
+ /* If filename == NULL, use the default config files. */
+
/* deprecated config file */
if (parse_config_file("/etc/depmod.conf", basedir, module_dir,
kernelversion, search, overrides) > 0)
@@ -1347,8 +1349,15 @@ static void parse_toplevel_config(const char *filename,
search, overrides);
}
-static void do_module_dir(const char *basedir, const char *config,
- const char *version, const char *module_dir,
+struct config_alternative
+{
+ struct config_alternative *next;
+ char *module_dir;
+ char *config_file;
+};
+
+static void do_alternative(struct config_alternative *alt,
+ const char *basedir, const char *version,
int argc, char *argv[])
{
struct module *list = NULL;
@@ -1359,7 +1368,7 @@ static void do_module_dir(const char *basedir, const char *config,
clear_symbolhash();
- nofail_asprintf(&dirname, "%s%s%s", basedir, module_dir, version);
+ nofail_asprintf(&dirname, "%s%s%s", basedir, alt->module_dir, version);
if (maybe_all) {
if (!doing_stdout && !depfile_out_of_date(dirname))
@@ -1367,7 +1376,8 @@ static void do_module_dir(const char *basedir, const char *config,
all_modules = 1;
}
- parse_toplevel_config(config, basedir, module_dir, version, &search, &overrides);
+ parse_toplevel_config(alt->config_file, basedir, alt->module_dir,
+ version, &search, &overrides);
/* For backward compatibility add "updates" to the head of the search
* list here. But only if there was no "search" option specified.
@@ -1377,7 +1387,7 @@ static void do_module_dir(const char *basedir, const char *config,
size_t len;
nofail_asprintf(&dirname, "%s%s%s/updates", basedir,
- module_dir, version);
+ alt->module_dir, version);
len = strlen(dirname);
search = add_search(dirname, len, search);
}
@@ -1452,6 +1462,7 @@ int main(int argc, char *argv[])
char *system_map = NULL, *module_symvers = NULL;
char *basedir = "", *version;
const char *config = NULL;
+ struct config_alternative *alts, *alt;
if (native_endianness() == 0)
abort();
@@ -1541,7 +1552,26 @@ int main(int argc, char *argv[])
if (optind == argc)
all_modules = 1;
- do_module_dir(basedir, config, version, MODULE_DIR, argc, argv);
+ /* Make an alternative for the original depmod behavior.
+ This is the alternative which -C affects.
+ config_file = NULL specifies the default config files. */
+ alts = NOFAIL(malloc(sizeof(*alts)));
+ alts->next = NULL;
+ alts->module_dir = NOFAIL(strdup(MODULE_DIR));
+ alts->config_file = config ? NOFAIL(strdup(config)) : NULL;
+
+ /* Process each alternative */
+ for (alt = alts; alt; alt = alt->next)
+ do_alternative(alt, basedir, version, argc, argv);
+
+ /* Free the alternatives */
+ for (alt = alts; alt;) {
+ struct config_alternative *tmp = alt;
+ free(alt->module_dir);
+ free(alt->config_file);
+ alt = alt->next;
+ free(tmp);
+ }
free(version);
--
1.7.2.3
--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Home]
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Video Projectors]
[PDAs]
[Free Online Dating]
[Hacking TiVo]
[Linux Kernel]
[Linux SCSI]
[XFree86]
[Devices]
[Big List of Linux Books]
[16.7MP]