aboutsummaryrefslogtreecommitdiff
path: root/hardinfo2/modules/devices/storage.c
diff options
context:
space:
mode:
Diffstat (limited to 'hardinfo2/modules/devices/storage.c')
-rw-r--r--hardinfo2/modules/devices/storage.c377
1 files changed, 0 insertions, 377 deletions
diff --git a/hardinfo2/modules/devices/storage.c b/hardinfo2/modules/devices/storage.c
deleted file mode 100644
index 23ab1de2..00000000
--- a/hardinfo2/modules/devices/storage.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * HardInfo - Displays System Information
- * 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
- * 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
- */
-
-#include <string.h>
-
-#include "hardinfo.h"
-#include "devices.h"
-
-gchar *storage_icons = NULL;
-
-static gboolean
-remove_scsi_devices(gpointer key, gpointer value, gpointer data)
-{
- return g_str_has_prefix(key, "SCSI");
-}
-
-/* SCSI support by Pascal F.Martin <pascalmartin@earthlink.net> */
-void
-__scan_scsi_devices(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;
- gchar *scsi_storage_list;
-
- /* remove old devices from global device table */
- g_hash_table_foreach_remove(moreinfo, remove_scsi_devices, NULL);
-
- if (!g_file_test("/proc/scsi/scsi", G_FILE_TEST_EXISTS))
- return;
-
- scsi_storage_list = g_strdup("\n[SCSI Disks]\n");
-
- if ((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)) {
- 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;
-
- if (!(p = strstr(buf, "ANSI SCSI revision"))) {
- p = strstr(buf, "ANSI SCSI revision");
- }
-
- 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", "cdrom"},
- { "CD-ROM", "CD-ROM", "cdrom"},
- { "Scanner", "Scanner", "scanner"},
- { "Flash Disk", "USB Flash Disk", "usbfldisk" },
- { NULL, "Generic", "scsi"}
- };
- int i;
-
- 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);
- 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", 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);
- g_free(revision);
- g_free(vendor);
- }
- }
- fclose(proc_scsi);
- }
-
- if (n) {
- storage_list = h_strconcat(storage_list, scsi_storage_list, NULL);
- g_free(scsi_storage_list);
- }
-}
-
-static gboolean
-remove_ide_devices(gpointer key, gpointer value, gpointer data)
-{
- return g_str_has_prefix(key, "IDE");
-}
-
-void
-__scan_ide_devices(void)
-{
- FILE *proc_ide;
- gchar *device, iface, *model, *media, *pgeometry = NULL, *lgeometry =
- NULL;
- gint n = 0, i = 0, cache, nn = 0;
- 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);
-
- ide_storage_list = g_strdup("\n[IDE Disks]\n");
-
- 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[128];
-
- cache = 0;
-
- proc_ide = fopen(device, "r");
- (void)fgets(buf, 128, 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");
- (void)fgets(buf, 128, proc_ide);
- fclose(proc_ide);
- buf[strlen(buf) - 1] = 0;
-
- media = g_strdup(buf);
- if (g_str_equal(media, "cdrom")) {
- /* obtain cd-rom drive information from cdrecord */
- GTimer *timer;
- gchar *tmp = g_strdup_printf("cdrecord dev=/dev/hd%c -prcap 2>/dev/stdout", iface);
- FILE *prcap;
-
- if ((prcap = popen(tmp, "r"))) {
- /* we need a timeout so cdrecord does not try to get information on cd drives
- with inserted media, which is not possible currently. half second should be
- enough. */
- timer = g_timer_new();
- g_timer_start(timer);
-
- while (fgets(buf, 128, prcap) && g_timer_elapsed(timer, NULL) < 0.5) {
- if (g_str_has_prefix(buf, " Does")) {
- if (g_str_has_suffix(buf, "media\n") && !strstr(buf, "speed")) {
- gchar *media_type = g_strstrip(strstr(buf, "Does "));
- gchar **ttmp = g_strsplit(media_type, " ", 0);
-
- capab = h_strdup_cprintf("\nCan %s#%d=%s\n",
- capab,
- ttmp[1], ++nn, ttmp[2]);
-
- g_strfreev(ttmp);
- } else if (strstr(buf, "Buffer-Underrun-Free")) {
- capab = h_strdup_cprintf("\nSupports BurnProof=%s\n",
- capab,
- strstr(buf, "Does not") ? "No" : "Yes");
- } else if (strstr(buf, "multi-session")) {
- capab = h_strdup_cprintf("\nCan read multi-session CDs=%s\n",
- capab,
- strstr(buf, "Does not") ? "No" : "Yes");
- } else if (strstr(buf, "audio CDs")) {
- capab = h_strdup_cprintf("\nCan play audio CDs=%s\n",
- capab,
- strstr(buf, "Does not") ? "No" : "Yes");
- } else if (strstr(buf, "PREVENT/ALLOW")) {
- capab = h_strdup_cprintf("\nCan lock media=%s\n",
- capab,
- strstr(buf, "Does not") ? "No" : "Yes");
- }
- } else if ((strstr(buf, "read") || strstr(buf, "write")) && strstr(buf, "kB/s")) {
- speed = g_strconcat(speed ? speed : "",
- strreplacechr(g_strstrip(buf), ":", '='),
- "\n", NULL);
- } else if (strstr(buf, "Device seems to be")) {
- driver = g_strdup_printf("Driver=%s\n", strchr(buf, ':') + 1);
- }
- }
-
- pclose(prcap);
- g_timer_destroy(timer);
- }
-
- g_free(tmp);
- }
- 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");
- (void)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");
-
- (void)fgets(buf, 64, proc_ide);
- for (tmp = buf; *tmp; tmp++) {
- if (*tmp >= '0' && *tmp <= '9')
- break;
- }
-
- pgeometry = g_strdup(g_strstrip(tmp));
-
- (void)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);
-
- 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",
- 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);
-
- g_free(driver);
- driver = NULL;
- }
-
- if (pgeometry && lgeometry) {
- strhash = h_strdup_cprintf("[Geometry]\n"
- "Physical=%s\n"
- "Logical=%s\n",
- strhash, pgeometry, lgeometry);
-
- g_free(pgeometry);
- pgeometry = NULL;
- g_free(lgeometry);
- lgeometry = NULL;
- }
-
- if (capab) {
- strhash = h_strdup_cprintf("[Capabilities]\n%s", strhash, capab);
-
- g_free(capab);
- capab = NULL;
- }
-
- if (speed) {
- strhash = h_strdup_cprintf("[Speeds]\n%s", strhash, speed);
-
- g_free(speed);
- speed = NULL;
- }
-
- g_hash_table_insert(moreinfo, devid, strhash);
-
- g_free(model);
- model = g_strdup("");
- } else
- g_free(device);
-
- iface++;
- }
-
- if (n) {
- storage_list = h_strconcat(storage_list, ide_storage_list, NULL);
- g_free(ide_storage_list);
- }
-}