From 43c2513120e27392640e50ecca1519980fcda1b0 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Fri, 3 Apr 2009 17:46:26 +0000 Subject: Move modalias parsing code to generic code --- pciusb.c | 73 +++------------------------------------------------------------- 1 file changed, 3 insertions(+), 70 deletions(-) (limited to 'pciusb.c') diff --git a/pciusb.c b/pciusb.c index f385e38..c159f05 100644 --- a/pciusb.c +++ b/pciusb.c @@ -12,72 +12,6 @@ #include #include "common.h" -static char *aliasdefault = NULL; - -static void set_default_alias_file(void) { - struct utsname rel_buf; - if (!aliasdefault) { - char *dirname; - char *fallback_aliases = table_name_to_file("fallback-modules.alias"); - char *aliasfilename; - struct stat st_alias, st_fallback; - - uname(&rel_buf); - asprintf(&dirname, "%s/%s", MODULE_DIR, rel_buf.release); - asprintf(&aliasfilename, "%s/modules.alias", dirname); - free(dirname); - - /* fallback on ldetect-lst's modules.alias and prefer it if more recent */ - if (stat(aliasfilename, &st_alias) || - (!stat(fallback_aliases, &st_fallback) && st_fallback.st_mtime > st_alias.st_mtime)) { - free(aliasfilename); - aliasdefault = fallback_aliases; - } else { - aliasdefault = aliasfilename; - } - } -} - -static void resolve_and_set_modules_from_modalias(struct pciusb_entry *e, char *modalias) { - struct module_command *commands = NULL; - struct module_options *modoptions = NULL; - struct module_alias *aliases = NULL; - struct module_blacklist *blacklist = NULL; - const char *config = NULL; - - /* Returns the resolved alias, options */ - read_toplevel_config(config, modalias, 0, - 0, &modoptions, &commands, &aliases, &blacklist); - - if (!aliases) { - /* We only use canned aliases as last resort. */ - char *dkms_file = table_name_to_file("dkms-modules.alias"); - char *alias_filelist[] = { - "/lib/module-init-tools/ldetect-lst-modules.alias", - aliasdefault, - dkms_file, - NULL, - }; - char **alias_file = alias_filelist; - while (!aliases && *alias_file) { - read_config(*alias_file, modalias, 0, - 0, &modoptions, &commands, - &aliases, &blacklist); - aliases = apply_blacklist(aliases, blacklist); - alias_file++; - } - free(dkms_file); - } - if (aliases) { - // take the last one because we find eg: generic/ata_generic/sata_sil - while (aliases->next) - aliases = aliases->next; - - ifree(e->module); - e->module = strdup(aliases->module); - } -} - static void set_modules_from_modalias_file(struct pciusb_entry *e, char *modalias_path) { FILE *file; file = fopen(modalias_path, "r"); @@ -94,7 +28,8 @@ static void set_modules_from_modalias_file(struct pciusb_entry *e, char *modalia if (size) modalias[size-1] = 0; - resolve_and_set_modules_from_modalias(e, modalias); + ifree(e->module); + e->module = modalias_resolve_module(modalias); free(modalias); } else { fprintf(stderr, "Unable to read modalias from %s\n", modalias_path); @@ -152,8 +87,6 @@ static void find_modules_through_aliases_one(const char *bus, struct pciusb_entr } static void find_modules_through_aliases(const char *bus, struct pciusb_entries *entries) { - set_default_alias_file(); - unsigned int i; for (i = 0; i < entries->nb; i++) { struct pciusb_entry *e = &entries->entries[i]; @@ -164,7 +97,7 @@ static void find_modules_through_aliases(const char *bus, struct pciusb_entries find_modules_through_aliases_one(bus, e); } - ifree(aliasdefault); + modalias_cleanup(); } extern int pciusb_find_modules(struct pciusb_entries *entries, const char *fpciusbtable, const descr_lookup descr_lookup, int is_pci) { -- cgit v1.2.1