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.

(cherry picked from commit be3f52f4ed)

Conflicts:
	rules/99-systemd.rules.in
	src/rfkill/rfkill.c
This commit is contained in:
Lennart Poettering
2014-06-18 14:18:42 -04:00
committed by Zbigniew Jędrzejewski-Szmek
parent 5763621e1f
commit e58c591e5a
2 changed files with 28 additions and 5 deletions
+2 -2
View File
@@ -57,8 +57,8 @@ ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sy
# Pull in backlight save/restore for all backlight devices and
# keyboard backlights
SUBSYSTEM=="backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
# Asynchronously mount file systems implemented by these modules as
# soon as they are loaded.
+26 -3
View 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;