aboutsummaryrefslogtreecommitdiff
path: root/modules/computer
diff options
context:
space:
mode:
Diffstat (limited to 'modules/computer')
-rw-r--r--modules/computer/modules.c87
1 files changed, 47 insertions, 40 deletions
diff --git a/modules/computer/modules.c b/modules/computer/modules.c
index 5ee9abb3..0da3f56e 100644
--- a/modules/computer/modules.c
+++ b/modules/computer/modules.c
@@ -31,62 +31,69 @@
}
GHashTable *_module_hash_table = NULL;
-gchar *kernel_modules_dir = NULL;
+static gchar *kernel_modules_dir = NULL;
-static struct {
- gchar *dir;
- gchar *icon;
+/* Keep this sorted by reverse strlen(dir)! */
+static const struct {
+ const gchar *dir;
+ const gchar *icon;
} modules_icons[] = {
- { "kernel/net/bluetooth/", "bluetooth"},
- { "kernel/net/wireless/", "wireless"},
- { "kernel/net/ethernet/", "network-interface"},
- { "kernel/drivers/bluetooth/", "bluetooth"},
- { "kernel/drivers/input/joystick/", "joystick"},
- { "kernel/drivers/input/keyboard/", "keyboard"},
- { "kernel/drivers/input/mouse/", "mouse"},
- { "kernel/drivers/cdrom/", "cdrom"},
- { "kernel/drivers/hwmon/", "therm"},
- { "kernel/drivers/hid/", "inputdevices"},
- { "kernel/drivers/gpu/", "monitor"},
- { "kernel/drivers/i2c/", "memory"},
- { "kernel/drivers/nvme/", "hdd"},
- { "kernel/drivers/ata/", "hdd"},
- { "kernel/drivers/scsi/", "hdd"},
- { "kernel/drivers/usb/", "usb"},
- { "kernel/drivers/net/wireless/", "wireless"},
- { "kernel/drivers/net/ethernet/", "network-interface"},
- { "kernel/drivers/crypto/", "cryptohash"},
- { "kernel/drivers/pci/", "devices"},
- { "kernel/drivers/iommu/", "memory"},
- { "kernel/drivers/edac/", "memory"},
- { "kernel/arch/x86/crypto/", "cryptohash"},
- { "kernel/net/", "network-connections"},
- { "kernel/crypto/", "cryptohash"},
- { "kernel/sound/", "audio"},
- { NULL, NULL}
+ { "drivers/input/joystick/", "joystick" },
+ { "drivers/input/keyboard/", "keyboard" },
+ { "drivers/net/wireless/", "wireless" },
+ { "drivers/net/ethernet/", "network-interface" },
+ { "drivers/input/mouse/", "mouse" },
+ { "drivers/bluetooth/", "bluetooth" },
+ { "arch/x86/crypto/", "cryptohash" },
+ { "drivers/crypto/", "cryptohash" },
+ { "net/bluetooth/", "bluetooth" },
+ { "drivers/input/", "inputdevices" },
+ { "drivers/cdrom/", "cdrom" },
+ { "drivers/hwmon/", "therm" },
+ { "drivers/iommu/", "memory" },
+ { "net/wireless/", "wireless" },
+ { "drivers/nvme/", "hdd" },
+ { "net/ethernet/", "network-interface" },
+ { "drivers/scsi/", "hdd" },
+ { "drivers/edac/", "memory" },
+ { "drivers/hid/", "inputdevices" },
+ { "drivers/gpu/", "monitor" },
+ { "drivers/i2c/", "memory" },
+ { "drivers/ata/", "hdd" },
+ { "drivers/usb/", "usb" },
+ { "drivers/pci/", "devices" },
+ { "drivers/net/", "network" },
+ { "drivers/mmc/", "media-removable" },
+ { "drivers/fs/", "media-floppy" },
+ { "crypto/", "cryptohash" },
+ { "sound/", "audio" },
+ { "net/", "network-connections" },
+ { }
};
-static const char* get_module_icon(const char *path)
+static const gchar* get_module_icon(const char *path)
{
- int i = 0;
+ if (path == NULL) /* modinfo couldn't find module path */
+ return NULL;
- if (kernel_modules_dir == NULL){
+ if (kernel_modules_dir == NULL) {
struct utsname utsbuf;
uname(&utsbuf);
- kernel_modules_dir = g_strdup_printf("/lib/modules/%s/", utsbuf.release);
+ kernel_modules_dir = g_strdup_printf("/lib/modules/%s/kernel/", utsbuf.release);
}
if (!g_str_has_prefix(path, kernel_modules_dir))
return NULL;
- const gchar *path_no_prefix = path+strlen(kernel_modules_dir);
+ const gchar *path_no_prefix = path + strlen(kernel_modules_dir);
+ const size_t path_no_prefix_len = strlen(path_no_prefix);
+ int i;
- while (modules_icons[i].dir != NULL) {
- if (g_str_has_prefix(path_no_prefix, modules_icons[i].dir)) {
+ for (i = 0; modules_icons[i].dir; i++) {
+ if (g_str_has_prefix(path_no_prefix, modules_icons[i].dir))
return modules_icons[i].icon;
- }
- i++;
}
+
return NULL;
}