chiark / gitweb /
fstab-generator: allow x-systemd.device-timeout for swap units
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 27 Jun 2014 19:03:05 +0000 (15:03 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 30 Jun 2014 22:39:45 +0000 (18:39 -0400)
src/fstab-generator/fstab-generator.c
src/shared/generator.c

index 6f392df..1256a1c 100644 (file)
@@ -129,6 +129,11 @@ static int add_swap(const char *what, struct mntent *me) {
                 return -errno;
         }
 
+        /* use what as where, to have a nicer error message */
+        r = generator_write_timeouts(arg_dest, what, what, me->mnt_opts, NULL);
+        if (r < 0)
+                return r;
+
         if (!noauto) {
                 lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
                 if (!lnk)
index 762033b..1db5f8f 100644 (file)
@@ -97,7 +97,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
          * user input, like crypto devices. */
 
         _cleanup_free_ char *node = NULL, *unit = NULL, *t = NULL;
-        char *prefix, *start, *timeout, *postfix;
+        char *start, *timeout;
         usec_t u;
         int r;
         size_t len;
@@ -107,9 +107,11 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
         else if ((start = mount_test_option(opts, "x-systemd.device-timeout")))
                 timeout = start + 25;
         else {
-                *filtered = strdup(opts);
-                if (!*filtered)
-                        return log_oom();
+                if (filtered) {
+                        *filtered = strdup(opts);
+                        if (!*filtered)
+                                return log_oom();
+                }
 
                 return 0;
         }
@@ -119,11 +121,15 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
         if (!t)
                 return -ENOMEM;
 
-        prefix = strndupa(opts, start - opts - (start != opts));
-        postfix = timeout + len + (timeout[len] != '\0');
-        *filtered = strjoin(prefix, *postfix ? postfix : NULL, NULL);
-        if (!*filtered)
-                return log_oom();
+        if (filtered) {
+                char *prefix, *postfix;
+
+                prefix = strndupa(opts, start - opts - (start != opts));
+                postfix = timeout + len + (timeout[len] != '\0');
+                *filtered = strjoin(prefix, *postfix ? postfix : NULL, NULL);
+                if (!*filtered)
+                        return log_oom();
+        }
 
         r = parse_sec(t, &u);
         if (r < 0) {