summaryrefslogtreecommitdiff
path: root/src/core/mount.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-11-28 13:02:15 -0500
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-11-28 14:30:50 -0500
commit5cca8defd2717669c69d13c479c0885af5b534bd (patch)
tree67f1647c776a2eb4db31f51c0e10d9fbbe777b2a /src/core/mount.c
parent9d05dd2e1ef814a714214004f927ce82c9890fa6 (diff)
mount: be more careful about errors when parsing mtab
Fixup for 4a3a9ef610.
Diffstat (limited to 'src/core/mount.c')
-rw-r--r--src/core/mount.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/core/mount.c b/src/core/mount.c
index bccf6c5bfa..679d15c50a 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -1535,15 +1535,22 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
if (!tb || !itr)
return log_oom();
- mnt_table_parse_mtab(tb, NULL);
- if (r)
+ r = mnt_table_parse_mtab(tb, NULL);
+ if (r < 0)
return r;
- while (mnt_table_next_fs(tb, itr, &fs) == 0) {
+ r = 0;
+ for (;;) {
const char *device, *path, *options, *fstype;
_cleanup_free_ const char *d = NULL, *p = NULL;
int k;
+ k = mnt_table_next_fs(tb, itr, &fs);
+ if (k == 1)
+ break;
+ else if (k < 0)
+ return log_error_errno(k, "Failed to get next entry from /etc/fstab: %m");
+
device = mnt_fs_get_source(fs);
path = mnt_fs_get_target(fs);
options = mnt_fs_get_options(fs);
@@ -1555,7 +1562,7 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
return log_oom();
k = mount_add_one(m, d, p, options, fstype, set_flags);
- if (k < 0)
+ if (r == 0 && k < 0)
r = k;
}