diff options
| author | Leandro A. F. Pereira <leandro@hardinfo.org> | 2006-10-15 16:03:32 +0000 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2006-10-15 16:03:32 +0000 | 
| commit | f17b415f930f3926cb5099dd8c88cd99259d6b26 (patch) | |
| tree | 4af0d27df2d8006e3d9ecf81355b3b225292c6fb /hardinfo2/arch/linux | |
| parent | 4db081cacf5e5d9f45931396b1477ef03570f7c7 (diff) | |
hddtemp support cleanup, fixes
Diffstat (limited to 'hardinfo2/arch/linux')
| -rw-r--r-- | hardinfo2/arch/linux/common/sensors.h | 72 | 
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 */  } | 
