aboutsummaryrefslogtreecommitdiff
path: root/hardinfo2
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
parent4db081cacf5e5d9f45931396b1477ef03570f7c7 (diff)
hddtemp support cleanup, fixes
Diffstat (limited to 'hardinfo2')
-rw-r--r--hardinfo2/arch/linux/common/sensors.h72
-rw-r--r--hardinfo2/hardinfo.h1
-rw-r--r--hardinfo2/socket.c3
-rw-r--r--hardinfo2/socket.h2
-rw-r--r--hardinfo2/util.c17
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();
+}
+
+
+