1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-07 01:27:11 +03:00

mount: properly parse timeouts options in the middle of the string

This commit is contained in:
Lennart Poettering 2011-04-19 22:09:34 +02:00
parent 2286fdf7c5
commit f4c0514703

View File

@ -460,17 +460,19 @@ static int mount_add_default_dependencies(Mount *m) {
return 0; return 0;
} }
static void mount_fix_timeouts(Mount *m) { static int mount_fix_timeouts(Mount *m) {
MountParameters *p; MountParameters *p;
const char *timeout = NULL; const char *timeout = NULL;
Unit *other; Unit *other;
Iterator i; Iterator i;
usec_t u; usec_t u;
char *t;
int r;
assert(m); assert(m);
if (!(p = get_mount_parameters_configured(m))) if (!(p = get_mount_parameters_configured(m)))
return; return 0;
/* Allow configuration how long we wait for a device that /* Allow configuration how long we wait for a device that
* backs a mount point to show up. This is useful to support * 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"))) else if ((timeout = mount_test_option(p->options, "x-systemd-device-timeout")))
timeout += 25; timeout += 25;
else 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); 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) { 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; other->meta.job_timeout = u;
} }
return 0;
} }
static int mount_verify(Mount *m) { static int mount_verify(Mount *m) {