~ubuntu-branches/ubuntu/precise/hardinfo/precise

« back to all changes in this revision

Viewing changes to arch/linux/common/storage.h

  • Committer: Bazaar Package Importer
  • Author(s): Agney Lopes Roth Ferraz
  • Date: 2009-03-28 22:55:02 UTC
  • mfrom: (3.1.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090328225502-p4bnvi8q6hr95cij
Tags: 0.5c-1
New upstream version. 
(Closes: #517591, #511237, #457703, #519256, #449250, #457820, #497758) 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 *    HardInfo - Displays System Information
3
 
 *    Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@linuxmag.com.br>
 
3
 *    Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@hardinfo.org>
4
4
 *
5
5
 *    This program is free software; you can redistribute it and/or modify
6
6
 *    it under the terms of the GNU General Public License as published by
36
36
    gint scsi_id;
37
37
    gint scsi_lun;
38
38
    gchar *vendor = NULL, *revision = NULL, *model = NULL;
 
39
    gchar *scsi_storage_list;
39
40
 
40
41
    /* remove old devices from global device table */
41
42
    g_hash_table_foreach_remove(moreinfo, remove_scsi_devices, NULL);
43
44
    if (!g_file_test("/proc/scsi/scsi", G_FILE_TEST_EXISTS))
44
45
        return;
45
46
 
46
 
    storage_list = g_strconcat(storage_list, "\n[SCSI Disks]\n", NULL);
 
47
    scsi_storage_list = g_strdup("\n[SCSI Disks]\n");
47
48
 
48
49
    proc_scsi = fopen("/proc/scsi/scsi", "r");
49
50
    while (fgets(buffer, 256, proc_scsi)) {
55
56
 
56
57
            n++;
57
58
        } else if (!strncmp(buf, "Vendor: ", 8)) {
58
 
            char *p;
59
 
            char *rev = strstr(buf, "Rev: ");
60
 
 
61
 
            model = strstr(buf, "Model: ");
62
 
 
63
 
            if (model == NULL) {
64
 
                model = buf + strlen(buf);
65
 
            }
66
 
            p = model;
67
 
            while (*(--p) == ' ');
68
 
            *(++p) = 0;
69
 
            vendor = g_strdup(buf + 8);
70
 
 
71
 
            if (rev != NULL) {
72
 
                revision = g_strdup(rev + 5);
73
 
            } else {
74
 
                rev = model + strlen(model);
75
 
            }
76
 
            p = rev;
77
 
            while (*(--p) == ' ');
78
 
            *(++p) = 0;
79
 
            model = g_strdup_printf("%s %s", vendor, model + 7);
80
 
 
 
59
            buf[17] = '\0';
 
60
            buf[41] = '\0';
 
61
            buf[53] = '\0';
 
62
            
 
63
            vendor   = g_strdup(g_strstrip(buf + 8));
 
64
            model    = g_strdup_printf("%s %s", vendor, g_strstrip(buf + 24));
 
65
            revision = g_strdup(g_strstrip(buf + 46));
81
66
        } else if (!strncmp(buf, "Type:   ", 8)) {
82
67
            char *p;
83
68
            gchar *type = NULL, *icon = NULL;
98
83
                    { "Direct-Access", "Disk", "hdd"},
99
84
                    { "Sequential-Access", "Tape", "tape"},
100
85
                    { "Printer", "Printer", "lpr"},
101
 
                    { "WORM", "CD-ROM", "cd"},
102
 
                    { "CD-ROM", "CD-ROM", "cd"},
 
86
                    { "WORM", "CD-ROM", "cdrom"},
 
87
                    { "CD-ROM", "CD-ROM", "cdrom"},
103
88
                    { "Scanner", "Scanner", "scanner"},
 
89
                    { "Flash Disk", "USB Flash Disk", "usbfldisk" },
104
90
                    { NULL, "Generic", "scsi"} 
105
91
                };
106
92
                int i;
107
 
 
108
 
                for (i = 0; type2icon[i].type != NULL; i++)
109
 
                    if (g_str_equal(buf + 8, type2icon[i].type))
110
 
                        break;
111
 
 
112
 
                type = type2icon[i].label;
113
 
                icon = type2icon[i].icon;
 
93
                
 
94
                if (strstr(model, "Flash Disk")) {
 
95
                  type = "Flash Disk";
 
96
                  icon = "usbfldisk";
 
97
                } else {
 
98
                  for (i = 0; type2icon[i].type != NULL; i++)
 
99
                      if (g_str_equal(buf + 8, type2icon[i].type))
 
100
                          break;
 
101
                          
 
102
                  type = type2icon[i].label;
 
103
                  icon = type2icon[i].icon;
 
104
                }
114
105
            }
115
106
            
116
107
            gchar *devid = g_strdup_printf("SCSI%d", n);
117
 
            storage_list = h_strdup_cprintf("$%s$%s=\n", storage_list, devid, model);
 
108
            scsi_storage_list = h_strdup_cprintf("$%s$%s=\n", scsi_storage_list, devid, model);
118
109
            storage_icons = h_strdup_cprintf("Icon$%s$%s=%s.png\n", storage_icons, devid, model, icon);
119
 
 
 
110
            
120
111
            gchar *strhash = g_strdup_printf("[Device Information]\n"
121
 
                                             "Model=%s\n"
122
 
                                             "Vendor=%s (%s)\n"
123
 
                                             "Type=%s\n"
124
 
                                             "Revision=%s\n"
125
 
                                             "[SCSI Controller]\n"
126
 
                                             "Controller=scsi%d\n"
127
 
                                             "Channel=%d\n"
128
 
                                             "ID=%d\n" "LUN=%d\n",
129
 
                                             model,
130
 
                                             vendor_get_name(model),
131
 
                                             vendor_get_url(model),
132
 
                                             type,
133
 
                                             revision,
134
 
                                             scsi_controller,
135
 
                                             scsi_channel,
136
 
                                             scsi_id,
137
 
                                             scsi_lun);
 
112
                                             "Model=%s\n", model);
 
113
            
 
114
            const gchar *url = vendor_get_url(model);
 
115
            if (url) {
 
116
              strhash = h_strdup_cprintf("Vendor=%s (%s)\n",
 
117
                                         strhash,
 
118
                                         vendor_get_name(model),
 
119
                                         url);
 
120
            } else {
 
121
              strhash = h_strdup_cprintf("Vendor=%s\n",
 
122
                                         strhash,
 
123
                                         vendor_get_name(model));
 
124
            }
 
125
 
 
126
            strhash = h_strdup_cprintf("Type=%s\n"
 
127
                                       "Revision=%s\n"
 
128
                                       "[SCSI Controller]\n"
 
129
                                       "Controller=scsi%d\n"
 
130
                                       "Channel=%d\n"
 
131
                                       "ID=%d\n" "LUN=%d\n",
 
132
                                       strhash,
 
133
                                       type,
 
134
                                       revision,
 
135
                                       scsi_controller,
 
136
                                       scsi_channel,
 
137
                                       scsi_id,
 
138
                                       scsi_lun);
138
139
            g_hash_table_insert(moreinfo, devid, strhash);
139
140
 
140
141
            g_free(model);
143
144
        }
144
145
    }
145
146
    fclose(proc_scsi);
 
147
    
 
148
    if (n) {
 
149
      storage_list = h_strconcat(storage_list, scsi_storage_list, NULL);
 
150
      g_free(scsi_storage_list);
 
151
    }
146
152
}
147
153
 
148
154
static gboolean
158
164
    gchar *device, iface, *model, *media, *pgeometry = NULL, *lgeometry =
159
165
        NULL;
160
166
    gint n = 0, i = 0, cache, nn = 0;
161
 
    gchar *capab = NULL, *speed = NULL, *driver = NULL;
 
167
    gchar *capab = NULL, *speed = NULL, *driver = NULL, *ide_storage_list;
162
168
 
163
169
    /* remove old devices from global device table */
164
170
    g_hash_table_foreach_remove(moreinfo, remove_ide_devices, NULL);
165
 
 
166
 
    storage_list = g_strconcat(storage_list, "\n[IDE Disks]\n", NULL);
 
171
    
 
172
    ide_storage_list = g_strdup("\n[IDE Disks]\n");
167
173
 
168
174
    iface = 'a';
169
175
    for (i = 0; i <= 16; i++) {
285
291
 
286
292
            gchar *devid = g_strdup_printf("IDE%d", n);
287
293
 
288
 
            storage_list = h_strdup_cprintf("$%s$%s=\n", storage_list,
 
294
            ide_storage_list = h_strdup_cprintf("$%s$%s=\n", ide_storage_list,
289
295
                                         devid, model);
290
296
            storage_icons = h_strdup_cprintf("Icon$%s$%s=%s.png\n", storage_icons, devid,
291
297
                                          model, g_str_equal(media, "cdrom") ? \
292
298
                                                 "cdrom" : "hdd");
293
 
 
 
299
            
294
300
            gchar *strhash = g_strdup_printf("[Device Information]\n"
295
 
                                             "Model=%s\n"
296
 
                                             "Vendor=%s (%s)\n"
297
 
                                             "Device Name=hd%c\n"
298
 
                                             "Media=%s\n"
299
 
                                             "Cache=%dkb\n",
300
 
                                             model,
301
 
                                             vendor_get_name(model),
302
 
                                             vendor_get_url(model),
303
 
                                             iface,
304
 
                                             media,
305
 
                                             cache);
 
301
                                             "Model=%s\n",
 
302
                                             model);
 
303
            
 
304
            const gchar *url = vendor_get_url(model);
 
305
            
 
306
            if (url) {
 
307
              strhash = h_strdup_cprintf("Vendor=%s (%s)\n",
 
308
                                         strhash,
 
309
                                         vendor_get_name(model),
 
310
                                         url);
 
311
            } else {
 
312
              strhash = h_strdup_cprintf("Vendor=%s\n",
 
313
                                         strhash,
 
314
                                         vendor_get_name(model));
 
315
            }
 
316
            
 
317
            strhash = h_strdup_cprintf("Device Name=hd%c\n"
 
318
                                       "Media=%s\n"
 
319
                                       "Cache=%dkb\n",
 
320
                                       strhash,
 
321
                                       iface,
 
322
                                       media,
 
323
                                       cache);
306
324
            if (driver) {
307
325
                strhash = h_strdup_cprintf("%s\n", strhash, driver);
308
326
                
345
363
 
346
364
        iface++;
347
365
    }
 
366
    
 
367
    if (n) {
 
368
      storage_list = h_strconcat(storage_list, ide_storage_list, NULL);
 
369
      g_free(ide_storage_list);
 
370
    }
348
371
}