NAME
getmntopts
,
getmntoptstr
, getmntoptnum
,
freemntopts
—
scan mount options
LIBRARY
library “libutil”
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
Thegetmntopts
()
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 isMNT_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
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.