summaryrefslogtreecommitdiffstats
path: root/shlibs
diff options
context:
space:
mode:
authorKarel Zak2010-08-06 11:50:39 +0200
committerKarel Zak2011-01-03 12:28:41 +0100
commit0c188bb238bf5c2a2cd3403b27c91426f60cbe07 (patch)
tree9026dc9b0ca5e8875e4ad628d074e4f0b5e41a86 /shlibs
parentlibmount: remove unnecessary options container (diff)
downloadkernel-qcow2-util-linux-0c188bb238bf5c2a2cd3403b27c91426f60cbe07.tar.gz
kernel-qcow2-util-linux-0c188bb238bf5c2a2cd3403b27c91426f60cbe07.tar.xz
kernel-qcow2-util-linux-0c188bb238bf5c2a2cd3403b27c91426f60cbe07.zip
libmount: fix datatype for mountflags
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'shlibs')
-rw-r--r--shlibs/mount/src/mount.h.in2
-rw-r--r--shlibs/mount/src/mtab.c6
-rw-r--r--shlibs/mount/src/optstr.c18
3 files changed, 14 insertions, 12 deletions
diff --git a/shlibs/mount/src/mount.h.in b/shlibs/mount/src/mount.h.in
index 329ec8f10..3283630cd 100644
--- a/shlibs/mount/src/mount.h.in
+++ b/shlibs/mount/src/mount.h.in
@@ -157,7 +157,7 @@ extern int mnt_split_optstr(const char *optstr,
char **user, char **vfs, char **fs,
int ifnore_user, int ignore_vfs);
-extern int mnt_optstr_get_mountflags(const char *optstr);
+extern int mnt_optstr_get_mountflags(const char *optstr, unsigned long *flags);
/* iter.c */
enum {
diff --git a/shlibs/mount/src/mtab.c b/shlibs/mount/src/mtab.c
index 81b01f2be..eeef8a0c2 100644
--- a/shlibs/mount/src/mtab.c
+++ b/shlibs/mount/src/mtab.c
@@ -57,7 +57,7 @@
*/
struct _mnt_mtab {
int action; /* MNT_ACT_{MOUNT,UMOUNT} */
- int mountflags; /* MS_* flags */
+ unsigned long mountflags; /* MS_* flags */
char *filename; /* usually /etc/mtab or /var/run/mount/mountinfo */
char *old_target; /* for MS_MOVE */
int format; /* MNT_FMT_{MTAB,MOUNTINFO} */
@@ -205,7 +205,7 @@ int mnt_mtab_set_optstr(mnt_mtab *mt, const char *optstr)
*
* Returns: 0 on success, -1 in case of error.
*/
-int mnt_mtab_set_mountflags(mnt_mtab *mt, int flags)
+int mnt_mtab_set_mountflags(mnt_mtab *mt, unsigned long flags)
{
assert(mt);
if (!mt)
@@ -596,7 +596,7 @@ int mnt_mtab_prepare_update(mnt_mtab *mt)
o = mnt_fs_get_optstr(mt->fs);
if (o)
- mt->mountflags |= mnt_optstr_get_mountflags(o);
+ mnt_optstr_get_mountflags(o, &mt->mountflags);
/* umount */
if (mt->action == MNT_ACT_UMOUNT)
diff --git a/shlibs/mount/src/optstr.c b/shlibs/mount/src/optstr.c
index c2581be63..3308a1a0e 100644
--- a/shlibs/mount/src/optstr.c
+++ b/shlibs/mount/src/optstr.c
@@ -410,6 +410,7 @@ int mnt_split_optstr(const char *optstr, char **user, char **vfs, char **fs,
/**
* mnt_optstr_get_mountflags:
* @optstr: string with comma separated list of options
+ * @flags: returns mount flags
*
* The mountflags are IDs from all MNT_MFLAG options from MNT_LINUX_MAP options
* map. See "struct mnt_optmap". For more details about mountflags see
@@ -421,18 +422,19 @@ int mnt_split_optstr(const char *optstr, char **user, char **vfs, char **fs,
*
* "bind,noexec,foo,bar" --returns-> MS_BIND|MS_NOEXEC
*
- * Returns: mount flags or 0.
+ * Note that @flags are not zeroized by this function.
+ *
+ * Returns: 0 on success or -1 in case of error
*/
-int mnt_optstr_get_mountflags(const char *optstr)
+int mnt_optstr_get_mountflags(const char *optstr, unsigned long *flags)
{
- int flags = 0;
struct mnt_optmap const *maps[1];
char *name, *str = (char *) optstr;
size_t namesz = 0;
assert(optstr);
- if (!optstr)
+ if (!optstr || !flags)
return -1;
maps[0] = mnt_get_builtin_optmap(MNT_LINUX_MAP);
@@ -445,15 +447,15 @@ int mnt_optstr_get_mountflags(const char *optstr)
if (!(ent->mask & MNT_MFLAG))
continue;
if (ent->mask & MNT_INVERT)
- flags &= ~ent->id;
+ *flags &= ~ent->id;
else
- flags |= ent->id;
+ *flags |= ent->id;
}
}
DBG(DEBUG_OPTIONS, fprintf(stderr,
- "libmount: optstr '%s': mountflags 0x%08x\n", optstr, flags));
- return flags;
+ "libmount: optstr '%s': mountflags 0x%08lx\n", optstr, *flags));
+ return 0;
}
#ifdef TEST_PROGRAM