]> err.no Git - util-linux/commitdiff
libmount: clean up mnt_fs_set_optstr()
authorKarel Zak <kzak@redhat.com>
Tue, 24 Aug 2010 14:03:50 +0000 (16:03 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 3 Jan 2011 11:28:41 +0000 (12:28 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
shlibs/mount/src/fs.c
shlibs/mount/src/mount.h.in
shlibs/mount/src/mount.sym
shlibs/mount/src/mountP.h
shlibs/mount/src/tab_parse.c
shlibs/mount/src/tab_update.c

index 4931d078538f4848e32c613f994bf81d3b4d587e..2151d544926317015dc6f9b83f9f94b18f9d3c58 100644 (file)
@@ -390,16 +390,7 @@ const char *mnt_fs_get_optstr(mnt_fs *fs)
        return fs ? fs->optstr : NULL;
 }
 
-/**
- * mnt_fs_set_optstr:
- * @fs: fstab/mtab/mountinfo entry
- * @optstr: options string
- *
- * This function creates a private copy of @optstr.
- *
- * Returns: 0 on success or -1 in case of error.
- */
-int mnt_fs_set_optstr(mnt_fs *fs, const char *optstr)
+int __mnt_fs_set_optstr(mnt_fs *fs, const char *optstr, int split)
 {
        char *p = NULL, *v = NULL, *f = NULL;
 
@@ -409,7 +400,8 @@ int mnt_fs_set_optstr(mnt_fs *fs, const char *optstr)
                return -1;
 
        if (optstr) {
-               if (mnt_split_optstr((char *) optstr, NULL, &v, &f, 0, 0))
+               if (split &&
+                   mnt_split_optstr((char *) optstr, NULL, &v, &f, 0, 0))
                        return -1;
 
                p = strdup(optstr);
@@ -431,17 +423,31 @@ int mnt_fs_set_optstr(mnt_fs *fs, const char *optstr)
 }
 
 /**
- * mnt_fs_append_optstr:
+ * mnt_fs_set_optstr:
  * @fs: fstab/mtab/mountinfo entry
- * @optstr: options string (usually userspace specific options)
+ * @optstr: options string
  *
- * This function appends @optstr to the current list of the mount options. The
- * VFS and FS specific lists are not modified -- so then the
- * mnt_fs_get_optstr() function returns VFS + FS + userspace mount options.
+ * This function creates a private copy of @optstr. The function also updates
+ * VFS and FS mount options.
  *
  * Returns: 0 on success or -1 in case of error.
  */
-int mnt_fs_append_optstr(mnt_fs *fs, const char *optstr)
+int mnt_fs_set_optstr(mnt_fs *fs, const char *optstr)
+{
+       return __mnt_fs_set_optstr(fs, optstr, TRUE);
+}
+
+/**
+ * mnt_fs_append_userspace_optstr:
+ * @fs: fstab/mtab/mountinfo entry
+ * @optstr: options string
+ *
+ * This function appends @optstr to the current list of the mount options. The VFS and
+ * FS mount options are not modified.
+ *
+ * Returns: 0 on success or -1 in case of error.
+ */
+int mnt_fs_append_userspace_optstr(mnt_fs *fs, const char *optstr)
 {
        assert(fs);
 
@@ -451,6 +457,38 @@ int mnt_fs_append_optstr(mnt_fs *fs, const char *optstr)
        return mnt_optstr_append_option(&fs->optstr, optstr, NULL);
 }
 
+/**
+ * mnt_fs_append_optstr:
+ * @fs: fstab/mtab/mountinfo entry
+ * @optstr: mount options
+ *
+ * Returns: 0 on success or -1 in case of error.
+ */
+int mnt_fs_append_optstr(mnt_fs *fs, const char *optstr)
+{
+       char *v = NULL, *f = NULL;
+
+       assert(fs);
+
+       if (!fs)
+               return -1;
+       if (!optstr)
+               return 0;
+
+       if (mnt_split_optstr((char *) optstr, NULL, &v, &f, 0, 0))
+               return -1;
+
+       if (mnt_optstr_append_option(&fs->optstr, optstr, NULL))
+               return -1;
+       if (v && mnt_optstr_append_option(&fs->vfs_optstr, v, NULL))
+               return -1;
+       if (f && mnt_optstr_append_option(&fs->fs_optstr, f, NULL))
+               return -1;
+
+       return 0;
+
+}
+
 /**
  * mnt_fs_get_fs_optstr:
  * @fs: fstab/mtab/mountinfo entry pointer
index 5f900155bf74b04ced188ad31a8a726f56d15fdc..a4170b479093b2f14a9021eb00221dd1fd0ad00f 100644 (file)
@@ -207,6 +207,7 @@ extern int mnt_fs_set_fstype(mnt_fs *ent, const char *fstype);
 extern const char *mnt_fs_get_optstr(mnt_fs *ent);
 extern int mnt_fs_set_optstr(mnt_fs *ent, const char *optstr);
 extern int mnt_fs_append_optstr(mnt_fs *fs, const char *optstr);
+extern int mnt_fs_append_userspace_optstr(mnt_fs *fs, const char *optstr);
 extern const char *mnt_fs_get_vfs_optstr(mnt_fs *ent);
 extern const char *mnt_fs_get_fs_optstr(mnt_fs *ent);
 extern int mnt_fs_get_freq(mnt_fs *ent);
index 198f82851217ecb4370ef97c62e9e9bdbe5b582d..56e20dddf95e89f92469121968591e76c1f360ce 100644 (file)
@@ -19,6 +19,7 @@ global:
        mnt_free_optls;
        mnt_free_tab;
        mnt_fs_append_optstr;
+       mnt_fs_append_userspace_optstr;
        mnt_fs_get_devno;
        mnt_fs_get_freq;
        mnt_fs_get_fs_optstr;
index 9f00b613fa4bcc35e56f20d429c8e92220c039c8..d962b67966c4a6ce0a5a2d5429f34696e69da730 100644 (file)
@@ -11,6 +11,7 @@
 #define _LIBMOUNT_PRIVATE_H
 
 #include <sys/types.h>
+#include "c.h"
 
 #define USE_UNSTABLE_LIBMOUNT_API
 
@@ -170,5 +171,6 @@ extern int mnt_optmap_require_value(const struct mnt_optmap *mapent);
 /* fs.c */
 extern int __mnt_fs_set_source(mnt_fs *fs, char *source);
 extern int __mnt_fs_set_fstype(mnt_fs *fs, char *fstype);
+extern int __mnt_fs_set_optstr(mnt_fs *fs, const char *optstr, int split);
 
 #endif /* _LIBMOUNT_PRIVATE_H */
index 6f8308e50bc46cd9e87387fd08d1f33aa74ced44..1d59d17aded5593681a2f724afbbec84b18c33da 100644 (file)
@@ -613,7 +613,7 @@ done:
  * Note that @uf must contain only userspace specific mount options instead of
  * VFS options (note that FS options are ignored).
  *
- * Returns: modified filesystem (from @tb) or NULL.
+ * Returns modified filesystem (from @tb) or NULL.
  */
 static mnt_fs *mnt_tab_merge_userspace_fs(mnt_tab *tb, mnt_fs *uf)
 {
@@ -647,7 +647,7 @@ static mnt_fs *mnt_tab_merge_userspace_fs(mnt_tab *tb, mnt_fs *uf)
        }
 
        if (fs)
-               mnt_fs_append_optstr(fs, optstr);
+               mnt_fs_append_userspace_optstr(fs, optstr);
        return fs;
 }
 
index 887ee685ec1ae77a2458612b32dd6bd5d4c70ec3..7b53d63cd77d3c0dd736f1781cf883baf21dae18 100644 (file)
@@ -531,6 +531,7 @@ err:
  * - for /var/run/mount/mountinfo:
  *   * evaluate if the update is necessary
  *   * set fs root and devname for bind mount and btrfs subvolumes
+ *   * removes unnecessary mount options
  * - allocate update_lock if necessary
  *
  * This function has to be always called before mount(2). The mnt_update_file()
@@ -599,7 +600,7 @@ int mnt_prepare_update(mnt_update *upd)
                /* remount */
                if (mnt_split_optstr(o, &u, NULL, NULL, MNT_NOMTAB, 0))
                        goto err;
-               if (mnt_fs_set_optstr(upd->fs, u))
+               if (__mnt_fs_set_optstr(upd->fs, u, FALSE))
                        goto err;
 
        } else {
@@ -611,7 +612,7 @@ int mnt_prepare_update(mnt_update *upd)
                        goto nothing;   /* no userpsace options */
                if (set_fs_root(upd, upd->fs))
                        goto err;
-               mnt_fs_set_optstr(upd->fs, u);
+               __mnt_fs_set_optstr(upd->fs, u, FALSE);
        }
 
        if (!upd->nolock && !upd->lc) {
@@ -765,7 +766,7 @@ static int modify_options(mnt_update *upd)
                mnt_tab_remove_fs(tb, fs);
                rem_fs = fs;
        } else
-               mnt_fs_set_optstr(fs, mnt_fs_get_optstr(upd->fs));
+               __mnt_fs_set_optstr(fs, mnt_fs_get_optstr(upd->fs), FALSE);
 
        if (!update_file(upd->filename, upd->format, tb))
                rc = 0;