]> err.no Git - util-linux/commitdiff
libmount: correctly use "none" values
authorKarel Zak <kzak@redhat.com>
Thu, 5 Aug 2010 10:35:54 +0000 (12:35 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 3 Jan 2011 11:28:40 +0000 (12:28 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
shlibs/mount/src/fs.c
shlibs/mount/src/tab_parse.c
shlibs/mount/src/utils.c

index 7fc5e88253e8305dc9208e6b42dbed55821b4ebc..b0de9eaef0f98339c7070e4d1c77b91603885962 100644 (file)
@@ -193,10 +193,10 @@ int __mnt_fs_set_source(mnt_fs *fs, char *source)
 {
        assert(fs);
 
-       if (!source)
-               return -1;
+       if (source && !strcmp(source, "none"))
+               source = NULL;
 
-       if (strchr(source, '=')) {
+       if (source && strchr(source, '=')) {
                char *name, *val;
 
                if (blkid_parse_tag_string(source, &name, &val) != 0)
@@ -401,20 +401,23 @@ const char *mnt_fs_get_optstr(mnt_fs *fs)
  */
 int mnt_fs_set_optstr(mnt_fs *fs, const char *optstr)
 {
-       char *p, *v, *f;
+       char *p = NULL, *v = NULL, *f = NULL;
 
        assert(fs);
 
-       if (!fs || !optstr)
-               return -1;
-       if (mnt_split_optstr((char *) optstr, NULL, &v, &f, 0, 0))
+       if (!fs)
                return -1;
 
-       p = strdup(optstr);
-       if (!p) {
-               free(v);
-               free(f);
-               return -1;
+       if (optstr) {
+               if (mnt_split_optstr((char *) optstr, NULL, &v, &f, 0, 0))
+                       return -1;
+
+               p = strdup(optstr);
+               if (!p) {
+                       free(v);
+                       free(f);
+                       return -1;
+               }
        }
 
        free(fs->optstr);
index 4ab39fbd128404f38c7766e4b64e820c1205d031..6f8308e50bc46cd9e87387fd08d1f33aa74ced44 100644 (file)
@@ -206,7 +206,10 @@ static int mnt_parse_mountinfo_line(mnt_fs *fs, char *s)
        fs->fs_optstr = next_word(&s);
        if (!fs->fs_optstr)
                return 1;
-
+       if (!strcmp(fs->fs_optstr, "none")) {
+               free(fs->fs_optstr);
+               fs->fs_optstr = NULL;
+       }
        return 0;
 }
 
index 55e060581437ac8d9c456eb0dd99dd2bfb76c40e..15785df2af0045e4b429f1c5e7998e4cea2eba24 100644 (file)
@@ -325,8 +325,10 @@ int mnt_has_regular_mtab(void)
 /**
  * mnt_get_writable_mtab_path:
  *
- * Returns: pointer to the static string with path to the file with userspace
- *          mount options (classic /etc/mtab or /var/run/mount/mountinfo)
+ * It's not error if this function return NULL and errno is not set. In case of
+ * error the errno is set by open(2).
+ *
+ * Returns: pointer to the static string with path to mtab or NULL.
  */
 const char *mnt_get_writable_mtab_path(void)
 {
@@ -336,6 +338,8 @@ const char *mnt_get_writable_mtab_path(void)
        mtab = !lstat(_PATH_MOUNTED, &mst);
        info = !stat(MNT_PATH_RUNDIR, &ist);
 
+       errno = 0;
+
        /* A) mtab is symlink, /var/run/mount is available */
        if (mtab && S_ISLNK(mst.st_mode) && info) {
                int fd = open(MNT_PATH_MOUNTINFO, O_RDWR | O_CREAT, 0644);