From 9d2ba8eff2e67f8e9abd0885bc2af3ac91d3369f Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Wed, 27 Feb 2008 16:56:26 +0000 Subject: extract find_modalias function --- pciusb.c | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) (limited to 'pciusb.c') diff --git a/pciusb.c b/pciusb.c index 592096a..b840139 100644 --- a/pciusb.c +++ b/pciusb.c @@ -19,6 +19,31 @@ static const char *config = NULL; static char *aliasfilename, *symfilename; +static char *find_modalias(struct pciusb_entry *e) { + char *modalias = NULL; + char *modalias_path; + FILE *file; + asprintf(&modalias_path, "/sys/bus/pci/devices/%04x:%02x:%02x.%x/modalias", e->pci_domain, e->pci_bus, e->pci_device, e->pci_function); + file = fopen(modalias_path, "r"); + if (file) { + size_t n, size; + if (-1 == getline(&modalias, &n, file)) { + fprintf(stderr, "Unable to read modalias from %s\n", modalias_path); + fclose(file); + return NULL; + } + fclose(file); + size = strlen(modalias); + if (size) + modalias[size-1] = 0; + } else { + fprintf(stderr, "Unable to read modalias from %s\n", modalias_path); + return NULL; + } + free(modalias_path); + return modalias; +} + static void find_modules_through_aliases(struct pciusb_entries *entries) { unsigned int i; char *dirname; @@ -45,27 +70,9 @@ static void find_modules_through_aliases(struct pciusb_entries *entries) { if (e->module && strcmp(e->module, "unknown")) continue; - char *modalias = NULL; - char *modalias_path; - FILE *file; - asprintf(&modalias_path, "/sys/bus/pci/devices/%04x:%02x:%02x.%x/modalias", e->pci_domain, e->pci_bus, e->pci_device, e->pci_function); - file = fopen(modalias_path, "r"); - if (file) { - size_t n, size; - if (-1 == getline(&modalias, &n, file)) { - fprintf(stderr, "Unable to read modalias from %s\n", modalias_path); - fclose(file); - continue; - } - fclose(file); - size = strlen(modalias); - if (size) - modalias[size-1] = 0; - } else { - fprintf(stderr, "Unable to read modalias from %s\n", modalias_path); - continue; - } - free(modalias_path); + char *modalias = find_modalias(e); + if (!modalias) + continue; /* Returns the resolved alias, options */ read_toplevel_config(config, modalias, 0, -- cgit v1.2.1