diff options
-rw-r--r-- | hardinfo2/arch/linux/common/sensors.h | 72 | ||||
-rw-r--r-- | hardinfo2/hardinfo.h | 1 | ||||
-rw-r--r-- | hardinfo2/socket.c | 3 | ||||
-rw-r--r-- | hardinfo2/socket.h | 2 | ||||
-rw-r--r-- | hardinfo2/util.c | 17 |
5 files changed, 58 insertions, 37 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 */ } diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h index 287119a5..9734a21b 100644 --- a/hardinfo2/hardinfo.h +++ b/hardinfo2/hardinfo.h @@ -33,5 +33,6 @@ inline void strend(gchar *str, gchar chr); inline void remove_linefeed(gchar *str); void widget_set_cursor(GtkWidget *widget, GdkCursorType cursor_type); inline gchar *size_human_readable(gfloat size); + void nonblock_sleep(guint msec); #endif /* __HARDINFO_H__ */ diff --git a/hardinfo2/socket.c b/hardinfo2/socket.c index 4212c547..c17c9f5c 100644 --- a/hardinfo2/socket.c +++ b/hardinfo2/socket.c @@ -48,8 +48,6 @@ Socket *sock_connect(gchar * host, gint port) } s = g_new0(Socket, 1); - s->host = g_strdup(host); - s->port = port; s->sock = sock; return s; @@ -76,6 +74,5 @@ int sock_read(Socket * s, gchar * buffer, gint size) void sock_close(Socket * s) { close(s->sock); - g_free(s->host); g_free(s); } diff --git a/hardinfo2/socket.h b/hardinfo2/socket.h index 4c8fddb2..db34c552 100644 --- a/hardinfo2/socket.h +++ b/hardinfo2/socket.h @@ -22,8 +22,6 @@ typedef struct _Socket Socket; struct _Socket { - gchar *host; - gint port; gint sock; }; diff --git a/hardinfo2/util.c b/hardinfo2/util.c index ee6040b2..b1c11174 100644 --- a/hardinfo2/util.c +++ b/hardinfo2/util.c @@ -77,3 +77,20 @@ widget_set_cursor(GtkWidget *widget, GdkCursorType cursor_type) while(gtk_events_pending()) gtk_main_iteration(); } + +static gboolean +__nonblock_cb(gpointer data) +{ + gtk_main_quit(); + return FALSE; +} + +void +nonblock_sleep(guint msec) +{ + g_timeout_add(msec, (GSourceFunc)__nonblock_cb, NULL); + gtk_main(); +} + + + |