OSDN Git Service

search some known directories under /sys/class/backlight
authorChih-Wei Huang <cwhuang@linux.org.tw>
Fri, 7 Feb 2014 15:20:00 +0000 (23:20 +0800)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Fri, 14 Feb 2014 17:39:44 +0000 (01:39 +0800)
lights.c

index 74d8eaf..661d51b 100644 (file)
--- a/lights.c
+++ b/lights.c
@@ -125,25 +125,36 @@ static int check_backlight_file(char const* name, char* path)
 static int find_backlight_file(char const* file, char* path)
 {
     int ret;
+    size_t i;
+    DIR* dir;
     char name[PATH_MAX];
     const char* dirname = "/sys/class/backlight";
+    const char* dirs[] = {
+        "eeepc",
+        "intel_backlight",
+        "thinkpad_screen",
+        "acpi_video0",
+    };
+
+    // Check some known dirs
+    for (i = 0; i < sizeof(dirs) / sizeof(const char*); ++i) {
+        snprintf(name, PATH_MAX, "%s/%s/%s", dirname, dirs[i], file);
+        if (check_backlight_file(name, path)) {
+            return 1;
+        }
+    }
 
-    // Check acpi_video0 first. It seems to work in most cases.
-    snprintf(name, PATH_MAX, "%s/acpi_video0/%s", dirname, file);
-    if (!(ret = check_backlight_file(name, path))) {
-        DIR* dir = opendir(dirname);
-        if (dir != NULL) {
-            struct dirent* de;
-            while ((de = readdir(dir))) {
-                if (de->d_name[0] != '.') {
-                    snprintf(name, PATH_MAX, "%s/%s/%s", dirname, de->d_name, file);
-                    if ((ret = check_backlight_file(name, path))) {
-                        break;
-                    }
+    if ((dir = opendir(dirname))) {
+        struct dirent* de;
+        while ((de = readdir(dir))) {
+            if (de->d_name[0] != '.') {
+                snprintf(name, PATH_MAX, "%s/%s/%s", dirname, de->d_name, file);
+                if ((ret = check_backlight_file(name, path))) {
+                    break;
                 }
             }
-            closedir(dir);
         }
+        closedir(dir);
     }
     return ret;
 }