fix hwmon for 2.6.29, simplify code a bit
authorPhil Sutter <n0-1@freewrt.org>
Sun, 10 May 2009 20:47:47 +0000 (22:47 +0200)
committerPhil Sutter <phil@nwl.cc>
Mon, 11 May 2009 22:49:40 +0000 (00:49 +0200)
src/linux.c

index b92459b..3f82464 100644 (file)
@@ -825,6 +825,7 @@ int open_sysfs_sensor(const char *dir, const char *dev, const char *type, int n,
        char buf[256];
        int fd;
        int divfd;
+       struct stat st;
 
        memset(buf, 0, sizeof(buf));
 
@@ -851,16 +852,21 @@ int open_sysfs_sensor(const char *dir, const char *dev, const char *type, int n,
                }
        }
 
-       /* change vol to in */
+       /* At least the acpitz hwmon doesn't have a 'device' subdir,
+        * so check it's existence and strip it from buf otherwise. */
+       snprintf(path, 255, "%s%s", dir, dev);
+       if (stat(path, &st)) {
+               buf[strlen(buf) - 7] = 0;
+       }
+
+       /* change vol to in, tempf to temp */
        if (strcmp(type, "vol") == 0) {
                type = "in";
+       } else if (strcmp(type, "tempf") == 0) {
+               type = "temp";
        }
 
-       if (strcmp(type, "tempf") == 0) {
-               snprintf(path, 255, "%s%s/%s%d_input", dir, dev, "temp", n);
-       } else {
-               snprintf(path, 255, "%s%s/%s%d_input", dir, dev, type, n);
-       }
+       snprintf(path, 255, "%s%s/%s%d_input", dir, dev, type, n);
        strncpy(devtype, path, 255);
 
        /* open file */