summaryrefslogtreecommitdiffstats
path: root/pciusb.c
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@mandriva.com>2009-04-03 17:46:26 +0000
committerChristophe Fergeau <cfergeau@mandriva.com>2009-04-03 17:46:26 +0000
commit43c2513120e27392640e50ecca1519980fcda1b0 (patch)
tree74de92762b6d6125c7ef1f493415b8fe63f1c662 /pciusb.c
parentbddd15f634b326032c7f591f332e6f7a913b7195 (diff)
downloadldetect-43c2513120e27392640e50ecca1519980fcda1b0.tar
ldetect-43c2513120e27392640e50ecca1519980fcda1b0.tar.gz
ldetect-43c2513120e27392640e50ecca1519980fcda1b0.tar.bz2
ldetect-43c2513120e27392640e50ecca1519980fcda1b0.tar.xz
ldetect-43c2513120e27392640e50ecca1519980fcda1b0.zip
Move modalias parsing code to generic code
Diffstat (limited to 'pciusb.c')
-rw-r--r--pciusb.c73
1 files changed, 3 insertions, 70 deletions
diff --git a/pciusb.c b/pciusb.c
index f385e38..c159f05 100644
--- a/pciusb.c
+++ b/pciusb.c
@@ -12,72 +12,6 @@
#include <dirent.h>
#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) {