summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-10-14 19:01:09 +0200
committerLennart Poettering <lennart@poettering.net>2013-10-14 19:02:44 +0200
commitbe3f52f4ed02a9256b1577719677b32a17b525ac (patch)
tree488cd3cc70190f3ca82034b6d2811a0106da0bfa
parentf6f738db7273f8a2092ac372852f37f2a34cea17 (diff)
backlight: include ID_PATH in file names for backlight settings
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.
-rw-r--r--rules/99-systemd.rules.in4
-rw-r--r--src/backlight/backlight.c29
-rw-r--r--src/rfkill/rfkill.c2
3 files changed, 29 insertions, 6 deletions
diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
index 8e877809a2..a6203543c5 100644
--- a/rules/99-systemd.rules.in
+++ b/rules/99-systemd.rules.in
@@ -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
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
index 51a67a042a..e8cdad61ed 100644
--- a/src/backlight/backlight.c
+++ b/src/backlight/backlight.c
@@ -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;
diff --git a/src/rfkill/rfkill.c b/src/rfkill/rfkill.c
index ad1d63d32d..812cf408fb 100644
--- a/src/rfkill/rfkill.c
+++ b/src/rfkill/rfkill.c
@@ -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);