]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: make the mountinfo parser more robust
authorKarel Zak <kzak@redhat.com>
Mon, 17 Feb 2014 12:17:47 +0000 (13:17 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 17 Feb 2014 12:17:47 +0000 (13:17 +0100)
... sorry, the previous change to the parser was too stupid.

Signed-off-by: Karel Zak <kzak@redhat.com>
libmount/src/tab_parse.c

index 910b4b313a15e083d6709185809be195ede21e01..81232736cacb62d05e8cc85360142a4dbf95db4d 100644 (file)
@@ -123,7 +123,6 @@ static int mnt_parse_table_line(struct libmnt_fs *fs, char *s)
  */
 static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, char *s)
 {
-       size_t sz;
        int rc, end = 0;
        unsigned int maj, min;
        char *fstype = NULL, *src = NULL, *p;
@@ -147,15 +146,6 @@ static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, char *s)
        if (rc >= 7 && end > 0)
                s += end;
 
-       /* remove "(deleted)" suffix */
-       sz = strlen(fs->target);
-       if (sz > PATH_DELETED_SUFFIX_SZ) {
-               char *p = fs->target + (sz - PATH_DELETED_SUFFIX_SZ);
-
-               if (strcmp(p, PATH_DELETED_SUFFIX) == 0)
-                       *p = '\0';
-       }
-
        /* (7) optional fields, terminated by " - " */
        p = strstr(s, " - ");
        if (!p) {
@@ -175,9 +165,20 @@ static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, char *s)
                        &fs->fs_optstr);
 
        if (rc >= 10) {
+               size_t sz;
+
                fs->flags |= MNT_FS_KERNEL;
                fs->devno = makedev(maj, min);
 
+               /* remove "(deleted)" suffix */
+               sz = strlen(fs->target);
+               if (sz > PATH_DELETED_SUFFIX_SZ) {
+                       char *p = fs->target + (sz - PATH_DELETED_SUFFIX_SZ);
+
+                       if (strcmp(p, PATH_DELETED_SUFFIX) == 0)
+                               *p = '\0';
+               }
+
                unmangle_string(fs->root);
                unmangle_string(fs->target);
                unmangle_string(fs->vfs_optstr);