aboutsummaryrefslogtreecommitdiff
path: root/hardinfo2/arch
diff options
context:
space:
mode:
authorLeandro A. F. Pereira <leandro@hardinfo.org>2006-10-15 16:03:32 +0000
committerLeandro A. F. Pereira <leandro@hardinfo.org>2006-10-15 16:03:32 +0000
commitf17b415f930f3926cb5099dd8c88cd99259d6b26 (patch)
tree4af0d27df2d8006e3d9ecf81355b3b225292c6fb /hardinfo2/arch
parent4db081cacf5e5d9f45931396b1477ef03570f7c7 (diff)
hddtemp support cleanup, fixes
Diffstat (limited to 'hardinfo2/arch')
-rw-r--r--hardinfo2/arch/linux/common/sensors.h72
1 files changed, 40 insertions, 32 deletions
diff --git a/hardinfo2/arch/linux/common/sensors.h b/hardinfo2/arch/linux/common/sensors.h
index 44e2260d..946de968 100644
--- a/hardinfo2/arch/linux/common/sensors.h
+++ b/hardinfo2/arch/linux/common/sensors.h
@@ -270,46 +270,52 @@ read_sensors_acpi(void)
static void
read_sensors_hddtemp(void)
{
- Socket *s = sock_connect("127.0.0.1", 7634);
+ Socket *s;
static gchar *old = NULL;
gchar buffer[1024];
- gint len;
+ gint len = 0;
- if (!s)
- return;
-
- len = sock_read(s, buffer, sizeof(buffer));
- sock_close(s);
-
- if (len > 2 && buffer[0] == '|' && buffer[1] == '/') {
- gchar **disks;
- int i;
+ if ((s = sock_connect("127.0.0.1", 7634))) {
+ while (len <= 2)
+ len = sock_read(s, buffer, sizeof(buffer));
+ sock_close(s);
- if (old)
- g_free(old);
+ if (len > 2 && buffer[0] == '|' && buffer[1] == '/') {
+ gchar **disks;
+ int i;
- old = g_strdup("[Hard Disk Temperature]\n");
+ if (old)
+ g_free(old);
+
+ old = g_strdup("[Hard Disk Temperature]\n");
- disks = g_strsplit(buffer, "\n", 0);
- for (i = 0; disks[i]; i++) {
- gchar **fields = g_strsplit(disks[i] + 1, "|", 5);
+ disks = g_strsplit(buffer, "\n", 0);
+ for (i = 0; disks[i]; i++) {
+ gchar **fields = g_strsplit(disks[i] + 1, "|", 5);
+
+ /*
+ * 0 -> /dev/hda
+ * 1 -> FUJITSU MHV2080AH
+ * 2 -> 41
+ * 3 -> C
+ */
+ old = g_strdup_printf("%s\n"
+ "%s (%s)=%s\302\260%s\n",
+ old,
+ fields[1], fields[0],
+ fields[2], fields[3]);
- /*
- * 0 -> /dev/hda
- * 1 -> FUJITSU MHV2080AH
- * 2 -> 41
- * 3 -> C
- */
- old = g_strdup_printf("%s\n"
- "%s (%s)=%s\302\260%s\n",
- old,
- fields[1], fields[0],
- fields[2], fields[3]);
-
- g_strfreev(fields);
+ g_strfreev(fields);
+ }
+
+ g_strfreev(disks);
+ } else {
+ /* FIXME: This might go crazy in an infinite loop. */
+ g_warning("reading hddtemp failed. retrying in 100ms");
+ nonblock_sleep(100);
+ read_sensors_hddtemp();
+ return;
}
-
- g_strfreev(disks);
}
if (old) {
@@ -328,5 +334,7 @@ read_sensors(void)
read_sensors_hwmon();
read_sensors_acpi();
read_sensors_hddtemp();
+
+ /* FIXME: Add support for omnibook, ibm acpi and more sensors */
}