From d0f1cceb57f25cfed3b2852adaee95db6443839d Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay@vrfy.org>
Date: Tue, 9 Oct 2012 00:16:50 +0200
Subject: [PATCH] udev: support multiple entries for ENV{SYSTEMD_ALIAS} and
ENV{SYSTEM_WANTS} (cherry picked from commit
07845c142b41083bc759a18e601123aa5f6864f1)
[ F17: only the systemd part ]
Conflicts:
src/udev/udev-rules.c
---
src/core/device.c | 35 +++++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)
diff --git a/src/core/device.c b/src/core/device.c
index d5df752..4502f9a 100644
--- a/src/core/device.c
+++ b/src/core/device.c
@@ -251,30 +251,49 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
* interpret for the main object */
const char *wants, *alias;
- if ((alias = udev_device_get_property_value(dev, "SYSTEMD_ALIAS"))) {
- if (!is_path(alias))
- log_warning("SYSTEMD_ALIAS for %s is not a path, ignoring: %s", sysfs, alias);
- else {
- if ((r = device_add_escaped_name(u, alias)) < 0)
+ alias = udev_device_get_property_value(dev, "SYSTEMD_ALIAS");
+ if (alias) {
+ char *state, *w;
+ size_t l;
+
+ FOREACH_WORD_QUOTED(w, l, alias, state) {
+ char *e;
+
+ e = strndup(w, l);
+ if (!e) {
+ r = -ENOMEM;
goto fail;
+ }
+
+ if (!is_path(e)) {
+ log_warning("SYSTEMD_ALIAS for %s is not a path, ignoring: %s", sysfs, e);
+ free(e);
+ } else {
+
+ r = device_add_escaped_name(u, e);
+ free(e);
+ if (r < 0)
+ goto fail;
+ }
}
}
- if ((wants = udev_device_get_property_value(dev, "SYSTEMD_WANTS"))) {
+ wants = udev_device_get_property_value(dev, "SYSTEMD_WANTS");
+ if (wants) {
char *state, *w;
size_t l;
FOREACH_WORD_QUOTED(w, l, wants, state) {
char *e;
- if (!(e = strndup(w, l))) {
+ e = strndup(w, l);
+ if (!e) {
r = -ENOMEM;
goto fail;
}
r = unit_add_dependency_by_name(u, UNIT_WANTS, e, NULL, true);
free(e);
-
if (r < 0)
goto fail;
}