diff options
Diffstat (limited to 'arch/linux/common/storage.h')
-rw-r--r-- | arch/linux/common/storage.h | 161 |
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); + } } |