chiark / gitweb /
journal: replace contexts hashmap with a plain array
[elogind.git] / src / fstab-generator / fstab-generator.c
index 1c85a729b82093392dbf85608b704de24a558488..1f345949289902270a98adaa96b478702a689db9 100644 (file)
@@ -148,10 +148,8 @@ static int add_swap(
                         return log_oom();
 
                 mkdir_parents_label(lnk, 0755);
-                if (symlink(unit, lnk) < 0) {
-                        log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
-                        return -errno;
-                }
+                if (symlink(unit, lnk) < 0)
+                        return log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
         }
 
         return 0;
@@ -268,10 +266,8 @@ static int add_mount(
                 fprintf(f, "Options=%s\n", filtered);
 
         fflush(f);
-        if (ferror(f)) {
-                log_error_errno(errno, "Failed to write unit file %s: %m", unit);
-                return -errno;
-        }
+        if (ferror(f))
+                return log_error_errno(errno, "Failed to write unit file %s: %m", unit);
 
         if (!noauto && post) {
                 lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL);
@@ -279,10 +275,8 @@ static int add_mount(
                         return log_oom();
 
                 mkdir_parents_label(lnk, 0755);
-                if (symlink(unit, lnk) < 0) {
-                        log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
-                        return -errno;
-                }
+                if (symlink(unit, lnk) < 0)
+                        return log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
         }
 
         if (automount) {
@@ -296,10 +290,8 @@ static int add_mount(
 
                 fclose(f);
                 f = fopen(automount_unit, "wxe");
-                if (!f) {
-                        log_error_errno(errno, "Failed to create unit file %s: %m", automount_unit);
-                        return -errno;
-                }
+                if (!f)
+                        return log_error_errno(errno, "Failed to create unit file %s: %m", automount_unit);
 
                 fprintf(f,
                         "# Automatically generated by systemd-fstab-generator\n\n"
@@ -319,10 +311,8 @@ static int add_mount(
                         where);
 
                 fflush(f);
-                if (ferror(f)) {
-                        log_error_errno(errno, "Failed to write unit file %s: %m", automount_unit);
-                        return -errno;
-                }
+                if (ferror(f))
+                        return log_error_errno(errno, "Failed to write unit file %s: %m", automount_unit);
 
                 free(lnk);
                 lnk = strjoin(arg_dest, "/", post, nofail ? ".wants/" : ".requires/", automount_name, NULL);
@@ -330,10 +320,8 @@ static int add_mount(
                         return log_oom();
 
                 mkdir_parents_label(lnk, 0755);
-                if (symlink(automount_unit, lnk) < 0) {
-                        log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
-                        return -errno;
-                }
+                if (symlink(automount_unit, lnk) < 0)
+                        return log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
         }
 
         return 0;
@@ -488,7 +476,7 @@ static int add_usr_mount(void) {
                         return log_oom();
         }
 
-        if (!arg_usr_what || !arg_usr_options)
+        if (!arg_usr_what)
                 return 0;
 
         what = fstab_node_to_udev_node(arg_usr_what);
@@ -497,7 +485,13 @@ static int add_usr_mount(void) {
                 return -1;
         }
 
-        opts = arg_usr_options;
+        if (!arg_usr_options)
+                opts = arg_root_rw > 0 ? "rw" : "ro";
+        else if (!mount_test_option(arg_usr_options, "ro") &&
+                 !mount_test_option(arg_usr_options, "rw"))
+                opts = strappenda(arg_usr_options, ",", arg_root_rw > 0 ? "rw" : "ro");
+        else
+                opts = arg_usr_options;
 
         log_debug("Found entry what=%s where=/sysroot/usr type=%s", what, strna(arg_usr_fstype));
         return add_mount(what,
@@ -629,6 +623,12 @@ int main(int argc, char *argv[]) {
         }
 
         free(arg_root_what);
+        free(arg_root_fstype);
+        free(arg_root_options);
+
+        free(arg_usr_what);
+        free(arg_usr_fstype);
+        free(arg_usr_options);
 
         return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
 }