summaryrefslogtreecommitdiff
path: root/arch/linux/common/storage.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/linux/common/storage.h')
-rw-r--r--arch/linux/common/storage.h161
1 files changed, 92 insertions, 69 deletions
diff --git a/arch/linux/common/storage.h b/arch/linux/common/storage.h
index 71c206cd..5208f028 100644
--- a/arch/linux/common/storage.h
+++ b/arch/linux/common/storage.h
@@ -1,6 +1,6 @@
/*
* HardInfo - Displays System Information
- * Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@linuxmag.com.br>
+ * Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@hardinfo.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -36,6 +36,7 @@ __scan_scsi_devices(void)
gint scsi_id;
gint scsi_lun;
gchar *vendor = NULL, *revision = NULL, *model = NULL;
+ gchar *scsi_storage_list;
/* remove old devices from global device table */
g_hash_table_foreach_remove(moreinfo, remove_scsi_devices, NULL);
@@ -43,7 +44,7 @@ __scan_scsi_devices(void)
if (!g_file_test("/proc/scsi/scsi", G_FILE_TEST_EXISTS))
return;
- storage_list = g_strconcat(storage_list, "\n[SCSI Disks]\n", NULL);
+ scsi_storage_list = g_strdup("\n[SCSI Disks]\n");
proc_scsi = fopen("/proc/scsi/scsi", "r");
while (fgets(buffer, 256, proc_scsi)) {
@@ -55,29 +56,13 @@ __scan_scsi_devices(void)
n++;
} else if (!strncmp(buf, "Vendor: ", 8)) {
- char *p;
- char *rev = strstr(buf, "Rev: ");
-
- model = strstr(buf, "Model: ");
-
- if (model == NULL) {
- model = buf + strlen(buf);
- }
- p = model;
- while (*(--p) == ' ');
- *(++p) = 0;
- vendor = g_strdup(buf + 8);
-
- if (rev != NULL) {
- revision = g_strdup(rev + 5);
- } else {
- rev = model + strlen(model);
- }
- p = rev;
- while (*(--p) == ' ');
- *(++p) = 0;
- model = g_strdup_printf("%s %s", vendor, model + 7);
-
+ buf[17] = '\0';
+ buf[41] = '\0';
+ buf[53] = '\0';
+
+ vendor = g_strdup(g_strstrip(buf + 8));
+ model = g_strdup_printf("%s %s", vendor, g_strstrip(buf + 24));
+ revision = g_strdup(g_strstrip(buf + 46));
} else if (!strncmp(buf, "Type: ", 8)) {
char *p;
gchar *type = NULL, *icon = NULL;
@@ -98,43 +83,59 @@ __scan_scsi_devices(void)
{ "Direct-Access", "Disk", "hdd"},
{ "Sequential-Access", "Tape", "tape"},
{ "Printer", "Printer", "lpr"},
- { "WORM", "CD-ROM", "cd"},
- { "CD-ROM", "CD-ROM", "cd"},
+ { "WORM", "CD-ROM", "cdrom"},
+ { "CD-ROM", "CD-ROM", "cdrom"},
{ "Scanner", "Scanner", "scanner"},
+ { "Flash Disk", "USB Flash Disk", "usbfldisk" },
{ NULL, "Generic", "scsi"}
};
int i;
-
- for (i = 0; type2icon[i].type != NULL; i++)
- if (g_str_equal(buf + 8, type2icon[i].type))
- break;
-
- type = type2icon[i].label;
- icon = type2icon[i].icon;
+
+ if (strstr(model, "Flash Disk")) {
+ type = "Flash Disk";
+ icon = "usbfldisk";
+ } else {
+ for (i = 0; type2icon[i].type != NULL; i++)
+ if (g_str_equal(buf + 8, type2icon[i].type))
+ break;
+
+ type = type2icon[i].label;
+ icon = type2icon[i].icon;
+ }
}
gchar *devid = g_strdup_printf("SCSI%d", n);
- storage_list = h_strdup_cprintf("$%s$%s=\n", storage_list, devid, model);
+ scsi_storage_list = h_strdup_cprintf("$%s$%s=\n", scsi_storage_list, devid, model);
storage_icons = h_strdup_cprintf("Icon$%s$%s=%s.png\n", storage_icons, devid, model, icon);
-
+
gchar *strhash = g_strdup_printf("[Device Information]\n"
- "Model=%s\n"
- "Vendor=%s (%s)\n"
- "Type=%s\n"
- "Revision=%s\n"
- "[SCSI Controller]\n"
- "Controller=scsi%d\n"
- "Channel=%d\n"
- "ID=%d\n" "LUN=%d\n",
- model,
- vendor_get_name(model),
- vendor_get_url(model),
- type,
- revision,
- scsi_controller,
- scsi_channel,
- scsi_id,
- scsi_lun);
+ "Model=%s\n", model);
+
+ const gchar *url = vendor_get_url(model);
+ if (url) {
+ strhash = h_strdup_cprintf("Vendor=%s (%s)\n",
+ strhash,
+ vendor_get_name(model),
+ url);
+ } else {
+ strhash = h_strdup_cprintf("Vendor=%s\n",
+ strhash,
+ vendor_get_name(model));
+ }
+
+ strhash = h_strdup_cprintf("Type=%s\n"
+ "Revision=%s\n"
+ "[SCSI Controller]\n"
+ "Controller=scsi%d\n"
+ "Channel=%d\n"
+ "ID=%d\n" "LUN=%d\n",
+ strhash,
+ type,
+ revision,
+ scsi_controller,
+ scsi_channel,
+ scsi_id,
+ scsi_lun);
g_hash_table_insert(moreinfo, devid, strhash);
g_free(model);
@@ -143,6 +144,11 @@ __scan_scsi_devices(void)
}
}
fclose(proc_scsi);
+
+ if (n) {
+ storage_list = h_strconcat(storage_list, scsi_storage_list, NULL);
+ g_free(scsi_storage_list);
+ }
}
static gboolean
@@ -158,12 +164,12 @@ __scan_ide_devices(void)
gchar *device, iface, *model, *media, *pgeometry = NULL, *lgeometry =
NULL;
gint n = 0, i = 0, cache, nn = 0;
- gchar *capab = NULL, *speed = NULL, *driver = NULL;
+ gchar *capab = NULL, *speed = NULL, *driver = NULL, *ide_storage_list;
/* remove old devices from global device table */
g_hash_table_foreach_remove(moreinfo, remove_ide_devices, NULL);
-
- storage_list = g_strconcat(storage_list, "\n[IDE Disks]\n", NULL);
+
+ ide_storage_list = g_strdup("\n[IDE Disks]\n");
iface = 'a';
for (i = 0; i <= 16; i++) {
@@ -285,24 +291,36 @@ __scan_ide_devices(void)
gchar *devid = g_strdup_printf("IDE%d", n);
- storage_list = h_strdup_cprintf("$%s$%s=\n", storage_list,
+ ide_storage_list = h_strdup_cprintf("$%s$%s=\n", ide_storage_list,
devid, model);
storage_icons = h_strdup_cprintf("Icon$%s$%s=%s.png\n", storage_icons, devid,
model, g_str_equal(media, "cdrom") ? \
"cdrom" : "hdd");
-
+
gchar *strhash = g_strdup_printf("[Device Information]\n"
- "Model=%s\n"
- "Vendor=%s (%s)\n"
- "Device Name=hd%c\n"
- "Media=%s\n"
- "Cache=%dkb\n",
- model,
- vendor_get_name(model),
- vendor_get_url(model),
- iface,
- media,
- cache);
+ "Model=%s\n",
+ model);
+
+ const gchar *url = vendor_get_url(model);
+
+ if (url) {
+ strhash = h_strdup_cprintf("Vendor=%s (%s)\n",
+ strhash,
+ vendor_get_name(model),
+ url);
+ } else {
+ strhash = h_strdup_cprintf("Vendor=%s\n",
+ strhash,
+ vendor_get_name(model));
+ }
+
+ strhash = h_strdup_cprintf("Device Name=hd%c\n"
+ "Media=%s\n"
+ "Cache=%dkb\n",
+ strhash,
+ iface,
+ media,
+ cache);
if (driver) {
strhash = h_strdup_cprintf("%s\n", strhash, driver);
@@ -345,4 +363,9 @@ __scan_ide_devices(void)
iface++;
}
+
+ if (n) {
+ storage_list = h_strconcat(storage_list, ide_storage_list, NULL);
+ g_free(ide_storage_list);
+ }
}