NAME
getmntopts,
getmntoptstr,
getmntoptnum,
freemntopts —
scan mount options
LIBRARY
System Utilities Library (libutil, -lutil)
SYNOPSIS
#include <mntopts.h>
mntoptparse_t
getmntopts(
const
char *options,
const struct
mntopt *mopts,
int
*flagp,
int
*altflagp);
const char *
getmntoptstr(
mntoptparse_t
mp,
const char *opt);
long
getmntoptnum(
mntoptparse_t
mp,
const char *opt);
void
freemntopts(
mntoptparse_t
mp);
DESCRIPTION
The
getmntopts() function takes a comma separated option list
and a list of valid option names, and computes the bitmasks corresponding to
the requested set of options.
The string
options is broken down into a sequence of comma
separated tokens. Each token is looked up in the table described by
mopts and the bits in the word referenced by either
flagp or
altflagp (depending on
the
m_altloc
field of the option's table entry) are
updated. The flag words are not initialized by
getmntopts().
The table,
mopts, has the following format:
struct mntopt {
const char *m_option; /* option name */
int m_inverse; /* negative option, e.g., "dev" */
int m_flag; /* bit to set, e.g., MNT_RDONLY */
int m_altloc; /* use altflagp rather than flagp */
};
The members of this structure are:
-
-
- m_option
- the option name, for example “suid”.
-
-
- m_inverse
- tells getmntopts() that the name has the
inverse meaning of the bit. For example, “suid” is the string,
whereas the mount flag is
MNT_NOSUID
. In this
case, the sense of the string and the flag are inverted, so the
m_inverse flag should be set.
-
-
- m_flag
- the value of the bit to be set or cleared in the flag word
when the option is recognized. The bit is set when the option is
discovered, but cleared if the option name was preceded by the letters
“no”. The m_inverse flag causes these
two operations to be reversed.
-
-
- m_altloc
- the bit should be set or cleared in
altflagp rather than
flagp.
Each of the user visible
MNT_
flags has a corresponding
MOPT_
macro which defines an appropriate
struct mntopt
entry. To simplify the program interface
and ensure consistency across all programs, a general purpose macro,
MOPT_STDOPTS
, is defined which contains an entry for
all the generic VFS options. In addition, the macros
MOPT_FORCE
and
MOPT_UPDATE
exist to enable the
MNT_FORCE
and
MNT_UPDATE
flags to be set. Finally, the table must be
terminated by an entry with a
NULL
first element.
getmntopts() returns a
mntoptparse_t
handle that can be used in subsequent
getmntoptstr() and
getmntoptnum() calls to fetch a value for an option and that
must be freed with a call to
freemntopts(). If an error
occurred, then if the external integer value
getmnt_silent is zero then
getmntopts() prints an error message and exits; if
getmnt_silent is non-zero then
getmntopts() returns
NULL
.
The
getmntoptstr() function returns the string value of the
named option, if such a value was set in the option string. If the value was
not set, then if the external integer value
getmnt_silent is zero then
getmntoptstr() prints an error message and exits; if
getmnt_silent is non-zero then
getmntoptstr() returns
NULL
.
The
getmntoptnum() function returns the long value of the
named option, if such a value was set in the option string. If the value was
not set, or could not be converted from a string to a long, then if the
external integer value
getmnt_silent is zero then
getmntoptnum() prints an error message and exits; if
getmnt_silent is non-zero then
getmntoptnum() returns -1.
The
freemntopts() function frees the storage used by
getmntopts().
RETURN VALUES
getmntopts() returns
NULL
if an error
occurred. Note that some bits may already have been set in
flagp and
altflagp even if
NULL
is returned.
getmntoptstr()
returns
NULL
if an error occurred.
getmntoptnum() returns -1 if an error occurred.
EXAMPLES
Most commands will use the standard option set. Local filesystems which support
the
MNT_UPDATE
flag, would also have an
MOPT_UPDATE
entry. This can be declared and used as
follows:
#include <mntopts.h>
static const struct mntopt mopts[] = {
MOPT_STDOPTS,
MOPT_UPDATE,
{ NULL }
};
...
long val;
mntoptparse_t mp;
mntflags = mntaltflags = 0;
...
mp = getmntopts(options, mopts, &mntflags, &mntaltflags);
if (mp == NULL)
err(EXIT_FAILURE, "getmntopts");
...
val = getmntoptnum(mp, "rsize");
freemntopts(mp);
DIAGNOSTICS
If the external integer variable
getmnt_silent is zero
then the
getmntopts(),
getmntoptstr(), and
getmntoptnum() functions display an error message and exit
if an error occurred. By default
getmnt_silent is zero.
SEE ALSO
err(3),
mount(8)
HISTORY
The
getmntopts() function appeared in
4.4BSD. It was moved to the utilities library and
enhanced to retrieve option values in
NetBSD
2.0.