chiark / gitweb /
log: when we log to /dev/console and got disconnected (maybe due to vhangup) reconnect
[elogind.git] / src / shared / install.c
index cfd4a5af8acad9f038ed4b2b4473cd74f93ee0d7..17e8a7508e07a4976ab4c24fb8b62e9bfff76dd7 100644 (file)
@@ -38,6 +38,7 @@
 #include "conf-files.h"
 #include "specifier.h"
 #include "install-printf.h"
+#include "special.h"
 
 typedef struct {
         Hashmap *will_install;
@@ -275,10 +276,10 @@ static int remove_marked_symlinks_fd(
 
                         found =
                                 set_get(remove_symlinks_to, dest) ||
-                                set_get(remove_symlinks_to, path_get_file_name(dest));
+                                set_get(remove_symlinks_to, basename(dest));
 
                         if (unit_name_is_instance(p))
-                                found = found && strv_contains(files, path_get_file_name(p));
+                                found = found && strv_contains(files, basename(p));
 
                         if (found) {
 
@@ -450,7 +451,7 @@ static int find_symlinks_fd(
                         if (path_is_absolute(name))
                                 found_dest = path_equal(dest, name);
                         else
-                                found_dest = streq(path_get_file_name(dest), name);
+                                found_dest = streq(basename(dest), name);
 
                         if (found_path && found_dest) {
                                 _cleanup_free_ char *t = NULL;
@@ -717,7 +718,7 @@ int unit_file_link(
                 char *fn;
                 struct stat st;
 
-                fn = path_get_file_name(*i);
+                fn = basename(*i);
 
                 if (!path_is_absolute(*i) ||
                     !unit_name_is_valid(fn, true)) {
@@ -860,7 +861,7 @@ static int install_info_add(
         assert(name || path);
 
         if (!name)
-                name = path_get_file_name(path);
+                name = basename(path);
 
         if (!unit_name_is_valid(name, true))
                 return -EINVAL;
@@ -921,6 +922,7 @@ static int config_parse_also(const char *unit,
                              const char *filename,
                              unsigned line,
                              const char *section,
+                             unsigned section_line,
                              const char *lvalue,
                              int ltype,
                              const char *rvalue,
@@ -956,6 +958,7 @@ static int config_parse_user(const char *unit,
                              const char *filename,
                              unsigned line,
                              const char *section,
+                             unsigned section_line,
                              const char *lvalue,
                              int ltype,
                              const char *rvalue,
@@ -1426,7 +1429,7 @@ static int install_context_mark_for_removal(
                         char *unit_file;
 
                         if (i->path) {
-                                unit_file = path_get_file_name(i->path);
+                                unit_file = basename(i->path);
 
                                 if (unit_name_is_instance(unit_file))
                                         /* unit file named as instance exists, thus all symlinks
@@ -1560,7 +1563,8 @@ int unit_file_reenable(
 int unit_file_set_default(
                 UnitFileScope scope,
                 const char *root_dir,
-                char *file,
+                const char *file,
+                bool force,
                 UnitFileChange **changes,
                 unsigned *n_changes) {
 
@@ -1573,6 +1577,7 @@ int unit_file_set_default(
 
         assert(scope >= 0);
         assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(file);
 
         if (unit_name_to_type(file) != UNIT_TARGET)
                 return -EINVAL;
@@ -1589,14 +1594,15 @@ int unit_file_set_default(
         if (r < 0)
                 return r;
 
-        i = (InstallInfo*)hashmap_first(c.will_install);
+        assert_se(i = hashmap_first(c.will_install));
 
         r = unit_file_search(&c, i, &paths, root_dir, false);
         if (r < 0)
                 return r;
 
-        path = strappenda(config_path, "/default.target");
-        r = create_symlink(i->path, path, true, changes, n_changes);
+        path = strappenda(config_path, "/" SPECIAL_DEFAULT_TARGET);
+
+        r = create_symlink(i->path, path, force, changes, n_changes);
         if (r < 0)
                 return r;
 
@@ -1612,6 +1618,10 @@ int unit_file_get_default(
         char **p;
         int r;
 
+        assert(scope >= 0);
+        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(name);
+
         r = lookup_paths_init_from_scope(&paths, scope);
         if (r < 0)
                 return r;
@@ -1621,9 +1631,9 @@ int unit_file_get_default(
                 char *n;
 
                 if (isempty(root_dir))
-                        path = strappend(*p, "/default.target");
+                        path = strappend(*p, "/" SPECIAL_DEFAULT_TARGET);
                 else
-                        path = strjoin(root_dir, "/", *p, "/default.target", NULL);
+                        path = strjoin(root_dir, "/", *p, "/" SPECIAL_DEFAULT_TARGET, NULL);
 
                 if (!path)
                         return -ENOMEM;
@@ -1631,10 +1641,14 @@ int unit_file_get_default(
                 r = readlink_malloc(path, &tmp);
                 if (r == -ENOENT)
                         continue;
-                if (r < 0)
+                else if (r == -EINVAL)
+                        /* not a symlink */
+                        n = strdup(SPECIAL_DEFAULT_TARGET);
+                else if (r < 0)
                         return r;
+                else
+                        n = strdup(basename(tmp));
 
-                n = strdup(path_get_file_name(tmp));
                 if (!n)
                         return -ENOMEM;
 
@@ -1993,7 +2007,7 @@ int unit_file_get_list(
                                 f->state = UNIT_FILE_STATIC;
 
                 found:
-                        r = hashmap_put(h, path_get_file_name(f->path), f);
+                        r = hashmap_put(h, basename(f->path), f);
                         if (r < 0)
                                 return r;
                         f = NULL; /* prevent cleanup */