chiark / gitweb /
mount: Don't stop the mountinfo parser if one line can't be read
authorFabiano FidĂȘncio <fabianofidencio@gmail.com>
Tue, 5 Oct 2010 15:41:06 +0000 (08:41 -0700)
committerLennart Poettering <lennart@poettering.net>
Tue, 5 Oct 2010 20:26:28 +0000 (22:26 +0200)
The current behavior of the /proc/self/mountinfo parser
is to stop the parser on parse failures

I'm only changing this behavior to try the next line and adding
a warning if occurs a fail.

src/mount.c

index b17fe2a7d3df371ea658cd9c347672d44e5559cb..dcf0a434744483a6a9944a22a7347c711c646d0d 100644 (file)
@@ -1408,13 +1408,14 @@ finish:
 
 static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
         int r;
+        unsigned i;
         char *device, *path, *options, *options2, *fstype, *d, *p, *o;
 
         assert(m);
 
         rewind(m->proc_self_mountinfo);
 
-        for (;;) {
+        for (i = 1;; i++) {
                 int k;
 
                 device = path = options = options2 = fstype = d = p = o = NULL;
@@ -1441,8 +1442,8 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
                         if (k == EOF)
                                 break;
 
-                        r = -EBADMSG;
-                        goto finish;
+                        log_warning("Failed to parse /proc/self/mountinfo:%u.", i);
+                        goto clean_up;
                 }
 
                 if (asprintf(&o, "%s,%s", options, options2) < 0) {
@@ -1459,6 +1460,7 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
                 if ((r = mount_add_one(m, d, p, o, fstype, true, set_flags)) < 0)
                         goto finish;
 
+clean_up:
                 free(device);
                 free(path);
                 free(options);