summaryrefslogtreecommitdiffstats
path: root/hid.c
diff options
context:
space:
mode:
authorThierry Vignaud <tv@mageia.org>2012-09-12 10:37:40 +0000
committerThierry Vignaud <tv@mageia.org>2012-09-12 10:37:40 +0000
commit54ef68f584de6f12defa217ecc61fcf395ecd7e2 (patch)
tree19a8bd7b24cdf96ff3b5d5e58369aa9e8f4c6a23 /hid.c
parent42b81d579dc2f0323c6728e4d12002b1b8ed349b (diff)
downloadldetect-54ef68f584de6f12defa217ecc61fcf395ecd7e2.tar
ldetect-54ef68f584de6f12defa217ecc61fcf395ecd7e2.tar.gz
ldetect-54ef68f584de6f12defa217ecc61fcf395ecd7e2.tar.bz2
ldetect-54ef68f584de6f12defa217ecc61fcf395ecd7e2.tar.xz
ldetect-54ef68f584de6f12defa217ecc61fcf395ecd7e2.zip
make ldetect 3x faster (and even faster on machines quite quite a lot
of devices such as servers) (modalias_init) split it out of modalias_resolve_module() (modalias_cleanup) move libkmod related cleanups here (hid_probe,find_modules_through_aliases) only initialize libkmod once (which reduces user time from 0.26 to 0.08s & elapsed time from 0.28 to 0.9s)
Diffstat (limited to 'hid.c')
-rw-r--r--hid.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/hid.c b/hid.c
index 5671a66..b9b5c9d 100644
--- a/hid.c
+++ b/hid.c
@@ -4,6 +4,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <libkmod.h>
#include "libsysfs.h"
#include "libldetect.h"
@@ -79,7 +80,7 @@ static void add_entry(struct hid_entries *entry_list, char *name, char *module)
}
}
-static void parse_device(struct hid_entries *entries, const char *dev)
+static void parse_device(struct kmod_ctx *ctx, struct hid_entries *entries, const char *dev)
{
char keyfile[SYSFS_PATH_MAX];
char *modalias;
@@ -111,12 +112,11 @@ static void parse_device(struct hid_entries *entries, const char *dev)
else
device_name = strdup("HID Device");
- modname = modalias_resolve_module(modalias);
+ modname = modalias_resolve_module(ctx, modalias);
free(modalias);
DEBUG("%s: module name is [%s]\n", HID_BUS_NAME, modname);
if (modname != NULL)
add_entry(entries, device_name, modname);
- modalias_cleanup();
}
@@ -125,6 +125,7 @@ struct hid_entries hid_probe(void)
DIR *dir;
struct dirent *dent;
struct hid_entries entry_list = {NULL, 0};
+ struct kmod_ctx *ctx = modalias_init();
dir = opendir(sysfs_hid_path);
if (dir == NULL)
@@ -134,10 +135,11 @@ struct hid_entries hid_probe(void)
if (dent->d_name[0] == '.')
continue;
DEBUG("%s: device found %s\n", HID_BUS_NAME, dent->d_name);
- parse_device(&entry_list, dent->d_name);
+ parse_device(ctx, &entry_list, dent->d_name);
}
end_probe:
+ modalias_cleanup(ctx);
if (dir)
closedir(dir);