chiark / gitweb /
backlight: include ID_PATH in file names for backlight settings
authorLennart Poettering <lennart@poettering.net>
Mon, 14 Oct 2013 17:01:09 +0000 (19:01 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 14 Oct 2013 17:02:44 +0000 (19:02 +0200)
Much like for rfkill devices we should provide some stability regarding
enumeration order, hence include the stable bits of the device path in
the file name we store settings under.

rules/99-systemd.rules.in
src/backlight/backlight.c
src/rfkill/rfkill.c

index 8e877809a2327cd43eafe7e5f7c18c5254f83d8e..a6203543c5462ea250a1d3b67919e7cf9779477f 100644 (file)
@@ -54,8 +54,8 @@ ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sy
 # Pull in backlight save/restore for all backlight devices and
 # keyboard backlights
 
-ACTION=="add", SUBSYSTEM=="backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service"
-ACTION=="add", SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service"
+ACTION=="add", SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service"
+ACTION=="add", SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service"
 
 # Pull in rfkill save/restore for all rfkill devices
 
index 51a67a042ade57dee83b2c094996795cbec16a90..e8cdad61edad67b2b34aab8d82d10f4f11879f94 100644 (file)
@@ -195,8 +195,8 @@ static bool validate_device(struct udev *udev, struct udev_device *device) {
 int main(int argc, char *argv[]) {
         _cleanup_udev_unref_ struct udev *udev = NULL;
         _cleanup_udev_device_unref_ struct udev_device *device = NULL;
-        _cleanup_free_ char *saved = NULL, *ss = NULL;
-        const char *sysname;
+        _cleanup_free_ char *saved = NULL, *ss = NULL, *escaped_ss = NULL, *escaped_sysname = NULL, *escaped_path_id = NULL;
+        const char *sysname, *path_id;
         int r;
 
         if (argc != 3) {
@@ -252,7 +252,30 @@ int main(int argc, char *argv[]) {
                 return EXIT_FAILURE;
         }
 
-        saved = strjoin("/var/lib/systemd/backlight/", ss, ":", sysname, NULL);
+        escaped_ss = cescape(ss);
+        if (!escaped_ss) {
+                log_oom();
+                return EXIT_FAILURE;
+        }
+
+        escaped_sysname = cescape(sysname);
+        if (!escaped_sysname) {
+                log_oom();
+                return EXIT_FAILURE;
+        }
+
+        path_id = udev_device_get_property_value(device, "ID_PATH");
+        if (path_id) {
+                escaped_path_id = cescape(path_id);
+                if (!escaped_path_id) {
+                        log_oom();
+                        return EXIT_FAILURE;
+                }
+
+                saved = strjoin("/var/lib/systemd/backlight/", escaped_path_id, ":", escaped_ss, ":", escaped_sysname, NULL);
+        } else
+                saved = strjoin("/var/lib/systemd/backlight/", escaped_ss, ":", escaped_sysname, NULL);
+
         if (!saved) {
                 log_oom();
                 return EXIT_FAILURE;
index ad1d63d32deaaba1a778492397e6b79a775fbec7..812cf408fb2aacbe20f890f3e153e470b8f58b07 100644 (file)
@@ -86,7 +86,7 @@ int main(int argc, char *argv[]) {
                         return EXIT_FAILURE;
                 }
 
-                saved = strjoin("/var/lib/systemd/rfkill/", escaped_path_id, "-", escaped_name, NULL);
+                saved = strjoin("/var/lib/systemd/rfkill/", escaped_path_id, ":", escaped_name, NULL);
         } else
                 saved = strjoin("/var/lib/systemd/rfkill/", escaped_name, NULL);