diff options
Diffstat (limited to 'hardinfo2')
| -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(); +} + + + | 
