chiark / gitweb /
manager: when breaking ordering cycle show full cycle loop
[elogind.git] / src / path-lookup.c
index 1c4b5dc4e1f6bc1c37eb3261432a67db6fa4e4fe..00003620a57a88e2e604625682bdf96e44dffa60 100644 (file)
 
 #include "path-lookup.h"
 
+int session_config_home(char **config_home) {
+        const char *e;
+
+        if ((e = getenv("XDG_CONFIG_HOME"))) {
+                if (asprintf(config_home, "%s/systemd/session", e) < 0)
+                        return -ENOMEM;
+
+                return 1;
+        } else {
+                const char *home;
+
+                if ((home = getenv("HOME"))) {
+                        if (asprintf(config_home, "%s/.config/systemd/session", home) < 0)
+                                return -ENOMEM;
+
+                        return 1;
+                }
+        }
+
+        return 0;
+}
+
 static char** session_dirs(void) {
         const char *home, *e;
         char *config_home = NULL, *data_home = NULL;
@@ -45,16 +67,10 @@ static char** session_dirs(void) {
          * as data, and allow overriding as configuration.
          */
 
-        home = getenv("HOME");
-
-        if ((e = getenv("XDG_CONFIG_HOME"))) {
-                if (asprintf(&config_home, "%s/systemd/session", e) < 0)
-                        goto fail;
+        if (session_config_home(&config_home) < 0)
+                goto fail;
 
-        } else if (home) {
-                if (asprintf(&config_home, "%s/.config/systemd/session", home) < 0)
-                        goto fail;
-        }
+        home = getenv("HOME");
 
         if ((e = getenv("XDG_CONFIG_DIRS")))
                 if (!(config_dirs = strv_split(e, ":")))
@@ -80,7 +96,7 @@ static char** session_dirs(void) {
                  * one. */
 
                 mkdir_parents(data_home, 0777);
-                symlink("../../../.config/systemd/session", data_home);
+                (void) symlink("../../../.config/systemd/session", data_home);
         }
 
         if ((e = getenv("XDG_DATA_DIRS")))
@@ -165,13 +181,17 @@ int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as) {
                                 return -ENOMEM;
                 } else
                         if (!(p->unit_path = strv_new(
-                                              SYSTEM_CONFIG_UNIT_PATH,  /* /etc/systemd/system/ */
-                                              SYSTEM_DATA_UNIT_PATH,    /* /lib/systemd/system/ */
+                                              SYSTEM_CONFIG_UNIT_PATH,
+                                              "/etc/systemd/system",
+                                              "/usr/local/share/systemd/system",
+                                              "/usr/share/systemd/system",
+                                              "/lib/systemd/system",
+                                              SYSTEM_DATA_UNIT_PATH,
                                               NULL)))
                                 return -ENOMEM;
         }
 
-        if (running_as == MANAGER_INIT) {
+        if (running_as == MANAGER_SYSTEM) {
                 /* /etc/init.d/ compatibility does not matter to users */
 
                 if ((e = getenv("SYSTEMD_SYSVINIT_PATH")))