diff options
| author | Agney Lopes Roth Ferraz <agney@debian.org> | 2006-06-21 22:18:24 -0300 | 
|---|---|---|
| committer | Simon Quigley <tsimonq2@ubuntu.com> | 2017-06-19 14:38:36 -0500 | 
| commit | 078e9c700feccfcf1318b7bde49d6e464bc2ac8c (patch) | |
| tree | 4d24c99643f10e4b8b75bebaaec5d48294b3b112 /arch/linux/common/.svn/text-base/storage.h.svn-base | |
| parent | 18820242e374421ebd6d504a20d11f310b2ac023 (diff) | |
| parent | 720f5023a8f68aaaa54cb6b7bf46efee23b5b4c3 (diff) | |
Import Debian changes 0.4.1-1
hardinfo (0.4.1-1) unstable; urgency=low
  * New upstream release. 
Diffstat (limited to 'arch/linux/common/.svn/text-base/storage.h.svn-base')
| -rw-r--r-- | arch/linux/common/.svn/text-base/storage.h.svn-base | 268 | 
1 files changed, 268 insertions, 0 deletions
| diff --git a/arch/linux/common/.svn/text-base/storage.h.svn-base b/arch/linux/common/.svn/text-base/storage.h.svn-base new file mode 100644 index 00000000..4fb682a9 --- /dev/null +++ b/arch/linux/common/.svn/text-base/storage.h.svn-base @@ -0,0 +1,268 @@ +/* + *    HardInfo - Displays System Information + *    Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@linuxmag.com.br> + * + *    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 + *    the Free Software Foundation, version 2. + * + *    This program is distributed in the hope that it will be useful, + *    but WITHOUT ANY WARRANTY; without even the implied warranty of + *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *    GNU General Public License for more details. + * + *    You should have received a copy of the GNU General Public License + *    along with this program; if not, write to the Free Software + *    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA + */ + +static gchar *storage_icons = ""; + +static gboolean +remove_scsi_devices(gpointer key, gpointer value, gpointer data) +{ +    if (!strncmp((gchar *) key, "SCSI", 4)) { +	g_free((gchar *) key); +	g_free((GtkTreeIter *) value); +	return TRUE; +    } +    return FALSE; +} + +/* SCSI support by Pascal F.Martin <pascalmartin@earthlink.net> */ +void +scan_scsi(void) +{ +    FILE *proc_scsi; +    gchar buffer[256], *buf; +    gint n = 0; +    gint scsi_controller; +    gint scsi_channel; +    gint scsi_id; +    gint scsi_lun; +    gchar *vendor = NULL, *revision = NULL, *model = NULL; + +    /* remove old devices from global device table */ +    g_hash_table_foreach_remove(devices, remove_scsi_devices, NULL); + +    if (!g_file_test("/proc/scsi/scsi", G_FILE_TEST_EXISTS)) +	return; + +    storage_list = g_strconcat(storage_list, "\n[SCSI Disks]\n", NULL); + +    proc_scsi = fopen("/proc/scsi/scsi", "r"); +    while (fgets(buffer, 256, proc_scsi)) { +	buf = g_strstrip(buffer); +	if (!strncmp(buf, "Host: scsi", 10)) { +	    sscanf(buf, +		   "Host: scsi%d Channel: %d Id: %d Lun: %d", +		   &scsi_controller, &scsi_channel, &scsi_id, &scsi_lun); + +	    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); + +	} else if (!strncmp(buf, "Type:   ", 8)) { +	    char *p = strstr(buf, "ANSI SCSI revi"); +	    gchar *type = NULL, *icon = NULL; + +	    if (p != NULL) { +		while (*(--p) == ' '); +		*(++p) = 0; + +                static struct { +                    char *type; +                    char *label; +                    char *icon; +                } type2icon[] = { +                    { "Direct-Access", "Disk", "hdd"}, +                    { "Sequential-Access", "Tape", "tape"}, +                    { "Printer", "Printer", "lpr"}, +                    { "WORM", "CD-ROM", "cd"}, +                    { "CD-ROM", "CD-ROM", "cd"}, +                    { "Scanner", "Scanner", "scanner"}, +                    { NULL, "Generic", "scsi"}  +                }; +                int i; + +                for (i = 0; type2icon[i].type != NULL; i++) +                    if (!strcmp(buf + 8, type2icon[i].type)) +                        break; + +                type = type2icon[i].label; +                icon = type2icon[i].icon; +	    } +	     +	    gchar *devid = g_strdup_printf("SCSI%d", n); +	    storage_list = g_strdup_printf("%s$%s$%s=\n", storage_list, devid, model); +	    storage_icons = g_strdup_printf("%sIcon$%s$%s=%s.png\n", storage_icons, devid, model, icon); + +	    gchar *strhash = g_strdup_printf("[Device Information]\n" +					     "Model=%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, +					     type, +					     revision, +					     scsi_controller, +					     scsi_channel, +					     scsi_id, +					     scsi_lun); +	    g_hash_table_insert(devices, devid, strhash); + +	    g_free(model); +	    g_free(revision); +	    g_free(vendor); +	} +    } +    fclose(proc_scsi); +} + +static gboolean +remove_ide_devices(gpointer key, gpointer value, gpointer data) +{ +    if (!strncmp((gchar *) key, "IDE", 3)) { +	g_free((gchar *) key); +	g_free((gchar *) value); + +	return TRUE; +    } +    return FALSE; +} + + +void +scan_ide(void) +{ +    FILE *proc_ide; +    gchar *device, iface, *model, *media, *pgeometry = NULL, *lgeometry = +	NULL; +    gint n = 0, i = 0, cache; + +    /* remove old devices from global device table */ +    g_hash_table_foreach_remove(devices, remove_ide_devices, NULL); + +    storage_list = g_strdup_printf("%s\n[IDE Disks]\n", storage_list); + +    iface = 'a'; +    for (i = 0; i <= 16; i++) { +	device = g_strdup_printf("/proc/ide/hd%c/model", iface); +	if (g_file_test(device, G_FILE_TEST_EXISTS)) { +	    gchar buf[64]; + +	    cache = 0; + +	    proc_ide = fopen(device, "r"); +	    fgets(buf, 64, proc_ide); +	    fclose(proc_ide); + +	    buf[strlen(buf) - 1] = 0; + +	    model = g_strdup(buf); + +	    g_free(device); + +	    device = g_strdup_printf("/proc/ide/hd%c/media", iface); +	    proc_ide = fopen(device, "r"); +	    fgets(buf, 64, proc_ide); +	    fclose(proc_ide); +	    buf[strlen(buf) - 1] = 0; + +	    media = g_strdup(buf); + +	    g_free(device); + +	    device = g_strdup_printf("/proc/ide/hd%c/cache", iface); +	    if (g_file_test(device, G_FILE_TEST_EXISTS)) { +		proc_ide = fopen(device, "r"); +		fscanf(proc_ide, "%d", &cache); +		fclose(proc_ide); +	    } +	    g_free(device); + +	    device = g_strdup_printf("/proc/ide/hd%c/geometry", iface); +	    if (g_file_test(device, G_FILE_TEST_EXISTS)) { +		gchar *tmp; + +		proc_ide = fopen(device, "r"); + +		fgets(buf, 64, proc_ide); +		for (tmp = buf; *tmp; tmp++) { +		    if (*tmp >= '0' && *tmp <= '9') +			break; +		} + +		pgeometry = g_strdup(g_strstrip(tmp)); + +		fgets(buf, 64, proc_ide); +		for (tmp = buf; *tmp; tmp++) { +		    if (*tmp >= '0' && *tmp <= '9') +			break; +		} +		lgeometry = g_strdup(g_strstrip(tmp)); + +		fclose(proc_ide); +	    } +	    g_free(device); + +	    n++; + +	    gchar *devid = g_strdup_printf("IDE%d", n); + +	    storage_list = g_strdup_printf("%s$%s$%s=\n", storage_list, +					 devid, model); +	    storage_icons = g_strdup_printf("%sIcon$%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" +					     "Device Name=hd%c\n" +					     "Media=%s\n" "Cache=%dkb\n", +					     model, iface, media, cache); +	    if (pgeometry && lgeometry) +		strhash = g_strdup_printf("%s[Geometry]\n" +					  "Physical=%s\n" +					  "Logical=%s\n", +					  strhash, pgeometry, lgeometry); +             +	    g_hash_table_insert(devices, devid, strhash); + +	    g_free(model); +	    model = ""; + +	    g_free(pgeometry); +	    pgeometry = NULL; +	    g_free(lgeometry); +	    lgeometry = NULL; +	} else +	    g_free(device); + +	iface++; +    } +} | 
