dcavalca / rpms / systemd

Forked from rpms/systemd 2 years ago
Clone
Zbigniew Jędrzejewski-Szmek d22a5a
From e58c591e5a969523356aafe7e8d308b42f0f401b Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek d22a5a
From: Lennart Poettering <lennart@poettering.net>
Zbigniew Jędrzejewski-Szmek d22a5a
Date: Mon, 14 Oct 2013 19:01:09 +0200
Zbigniew Jędrzejewski-Szmek d22a5a
Subject: [PATCH] backlight: include ID_PATH in file names for backlight
Zbigniew Jędrzejewski-Szmek d22a5a
 settings
Zbigniew Jędrzejewski-Szmek d22a5a
Zbigniew Jędrzejewski-Szmek d22a5a
Much like for rfkill devices we should provide some stability regarding
Zbigniew Jędrzejewski-Szmek d22a5a
enumeration order, hence include the stable bits of the device path in
Zbigniew Jędrzejewski-Szmek d22a5a
the file name we store settings under.
Zbigniew Jędrzejewski-Szmek d22a5a
Zbigniew Jędrzejewski-Szmek d22a5a
(cherry picked from commit be3f52f4ed02a9256b1577719677b32a17b525ac)
Zbigniew Jędrzejewski-Szmek d22a5a
Zbigniew Jędrzejewski-Szmek d22a5a
Conflicts:
Zbigniew Jędrzejewski-Szmek d22a5a
	rules/99-systemd.rules.in
Zbigniew Jędrzejewski-Szmek d22a5a
	src/rfkill/rfkill.c
Zbigniew Jędrzejewski-Szmek d22a5a
---
Zbigniew Jędrzejewski-Szmek d22a5a
 rules/99-systemd.rules.in |  4 ++--
Zbigniew Jędrzejewski-Szmek d22a5a
 src/backlight/backlight.c | 29 ++++++++++++++++++++++++++---
Zbigniew Jędrzejewski-Szmek d22a5a
 2 files changed, 28 insertions(+), 5 deletions(-)
Zbigniew Jędrzejewski-Szmek d22a5a
Zbigniew Jędrzejewski-Szmek d22a5a
diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
Zbigniew Jędrzejewski-Szmek d22a5a
index ff0e771..dd6e7f1 100644
Zbigniew Jędrzejewski-Szmek d22a5a
--- a/rules/99-systemd.rules.in
Zbigniew Jędrzejewski-Szmek d22a5a
+++ b/rules/99-systemd.rules.in
Zbigniew Jędrzejewski-Szmek d22a5a
@@ -57,8 +57,8 @@ ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sy
Zbigniew Jędrzejewski-Szmek d22a5a
 # Pull in backlight save/restore for all backlight devices and
Zbigniew Jędrzejewski-Szmek d22a5a
 # keyboard backlights
Zbigniew Jędrzejewski-Szmek d22a5a
 
Zbigniew Jędrzejewski-Szmek d22a5a
-SUBSYSTEM=="backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
Zbigniew Jędrzejewski-Szmek d22a5a
-SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
Zbigniew Jędrzejewski-Szmek d22a5a
+SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
Zbigniew Jędrzejewski-Szmek d22a5a
+SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
Zbigniew Jędrzejewski-Szmek d22a5a
 
Zbigniew Jędrzejewski-Szmek d22a5a
 # Asynchronously mount file systems implemented by these modules as
Zbigniew Jędrzejewski-Szmek d22a5a
 # soon as they are loaded.
Zbigniew Jędrzejewski-Szmek d22a5a
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
Zbigniew Jędrzejewski-Szmek d22a5a
index 51a67a0..e8cdad6 100644
Zbigniew Jędrzejewski-Szmek d22a5a
--- a/src/backlight/backlight.c
Zbigniew Jędrzejewski-Szmek d22a5a
+++ b/src/backlight/backlight.c
Zbigniew Jędrzejewski-Szmek d22a5a
@@ -195,8 +195,8 @@ static bool validate_device(struct udev *udev, struct udev_device *device) {
Zbigniew Jędrzejewski-Szmek d22a5a
 int main(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek d22a5a
         _cleanup_udev_unref_ struct udev *udev = NULL;
Zbigniew Jędrzejewski-Szmek d22a5a
         _cleanup_udev_device_unref_ struct udev_device *device = NULL;
Zbigniew Jędrzejewski-Szmek d22a5a
-        _cleanup_free_ char *saved = NULL, *ss = NULL;
Zbigniew Jędrzejewski-Szmek d22a5a
-        const char *sysname;
Zbigniew Jędrzejewski-Szmek d22a5a
+        _cleanup_free_ char *saved = NULL, *ss = NULL, *escaped_ss = NULL, *escaped_sysname = NULL, *escaped_path_id = NULL;
Zbigniew Jędrzejewski-Szmek d22a5a
+        const char *sysname, *path_id;
Zbigniew Jędrzejewski-Szmek d22a5a
         int r;
Zbigniew Jędrzejewski-Szmek d22a5a
 
Zbigniew Jędrzejewski-Szmek d22a5a
         if (argc != 3) {
Zbigniew Jędrzejewski-Szmek d22a5a
@@ -252,7 +252,30 @@ int main(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek d22a5a
                 return EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek d22a5a
         }
Zbigniew Jędrzejewski-Szmek d22a5a
 
Zbigniew Jędrzejewski-Szmek d22a5a
-        saved = strjoin("/var/lib/systemd/backlight/", ss, ":", sysname, NULL);
Zbigniew Jędrzejewski-Szmek d22a5a
+        escaped_ss = cescape(ss);
Zbigniew Jędrzejewski-Szmek d22a5a
+        if (!escaped_ss) {
Zbigniew Jędrzejewski-Szmek d22a5a
+                log_oom();
Zbigniew Jędrzejewski-Szmek d22a5a
+                return EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek d22a5a
+        }
Zbigniew Jędrzejewski-Szmek d22a5a
+
Zbigniew Jędrzejewski-Szmek d22a5a
+        escaped_sysname = cescape(sysname);
Zbigniew Jędrzejewski-Szmek d22a5a
+        if (!escaped_sysname) {
Zbigniew Jędrzejewski-Szmek d22a5a
+                log_oom();
Zbigniew Jędrzejewski-Szmek d22a5a
+                return EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek d22a5a
+        }
Zbigniew Jędrzejewski-Szmek d22a5a
+
Zbigniew Jędrzejewski-Szmek d22a5a
+        path_id = udev_device_get_property_value(device, "ID_PATH");
Zbigniew Jędrzejewski-Szmek d22a5a
+        if (path_id) {
Zbigniew Jędrzejewski-Szmek d22a5a
+                escaped_path_id = cescape(path_id);
Zbigniew Jędrzejewski-Szmek d22a5a
+                if (!escaped_path_id) {
Zbigniew Jędrzejewski-Szmek d22a5a
+                        log_oom();
Zbigniew Jędrzejewski-Szmek d22a5a
+                        return EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek d22a5a
+                }
Zbigniew Jędrzejewski-Szmek d22a5a
+
Zbigniew Jędrzejewski-Szmek d22a5a
+                saved = strjoin("/var/lib/systemd/backlight/", escaped_path_id, ":", escaped_ss, ":", escaped_sysname, NULL);
Zbigniew Jędrzejewski-Szmek d22a5a
+        } else
Zbigniew Jędrzejewski-Szmek d22a5a
+                saved = strjoin("/var/lib/systemd/backlight/", escaped_ss, ":", escaped_sysname, NULL);
Zbigniew Jędrzejewski-Szmek d22a5a
+
Zbigniew Jędrzejewski-Szmek d22a5a
         if (!saved) {
Zbigniew Jędrzejewski-Szmek d22a5a
                 log_oom();
Zbigniew Jędrzejewski-Szmek d22a5a
                 return EXIT_FAILURE;