From f4c0514703d3f8cca215ee1ecde0736a7c007b21 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 19 Apr 2011 22:09:34 +0200 Subject: [PATCH] mount: properly parse timeouts options in the middle of the string --- src/mount.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/mount.c b/src/mount.c index ded8273590e..6205cb7f5a5 100644 --- a/src/mount.c +++ b/src/mount.c @@ -460,17 +460,19 @@ static int mount_add_default_dependencies(Mount *m) { return 0; } -static void mount_fix_timeouts(Mount *m) { +static int mount_fix_timeouts(Mount *m) { MountParameters *p; const char *timeout = NULL; Unit *other; Iterator i; usec_t u; + char *t; + int r; assert(m); if (!(p = get_mount_parameters_configured(m))) - return; + return 0; /* Allow configuration how long we wait for a device that * backs a mount point to show up. This is useful to support @@ -482,11 +484,18 @@ static void mount_fix_timeouts(Mount *m) { else if ((timeout = mount_test_option(p->options, "x-systemd-device-timeout"))) timeout += 25; else - return; + return 0; - if (parse_usec(timeout, &u) < 0) { + t = strndup(timeout, strcspn(timeout, ",;" WHITESPACE)); + if (!t) + return -ENOMEM; + + r = parse_usec(t, &u); + free(t); + + if (r < 0) { log_warning("Failed to parse timeout for %s, ignoring: %s", m->where, timeout); - return; + return r; } SET_FOREACH(other, m->meta.dependencies[UNIT_AFTER], i) { @@ -495,6 +504,8 @@ static void mount_fix_timeouts(Mount *m) { other->meta.job_timeout = u; } + + return 0; } static int mount_verify(Mount *m) {