Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates-src > by-pkgid > ab4b662b9827b6375ffd451bf4abd615 > files > 573

systemd-44-24.fc17.src.rpm

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;
                         }