master
  1/*	$NetBSD: mntopts.h,v 1.20 2021/09/18 03:05:20 christos Exp $	*/
  2
  3/*-
  4 * Copyright (c) 1994
  5 *      The Regents of the University of California.  All rights reserved.
  6 *
  7 * Redistribution and use in source and binary forms, with or without
  8 * modification, are permitted provided that the following conditions
  9 * are met:
 10 * 1. Redistributions of source code must retain the above copyright
 11 *    notice, this list of conditions and the following disclaimer.
 12 * 2. Redistributions in binary form must reproduce the above copyright
 13 *    notice, this list of conditions and the following disclaimer in the
 14 *    documentation and/or other materials provided with the distribution.
 15 * 3. Neither the name of the University nor the names of its contributors
 16 *    may be used to endorse or promote products derived from this software
 17 *    without specific prior written permission.
 18 *
 19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 22 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 29 * SUCH DAMAGE.
 30 *
 31 *	@(#)mntopts.h	8.7 (Berkeley) 3/29/95
 32 */
 33#ifndef _MNTOPTS_H_
 34#define _MNTOPTS_H_
 35
 36#include <sys/cdefs.h>
 37
 38struct mntopt {
 39	const char *m_option;	/* option name */
 40	int m_inverse;		/* if a negative option, eg "dev" */
 41	int m_flag;		/* bit to set, eg. MNT_RDONLY */
 42	int m_altloc;		/* 1 => set bit in altflags */
 43};
 44
 45/* User-visible MNT_ flags. */
 46#define MOPT_ACLS		{ "acls",	0, MNT_ACLS, 0 }
 47#define MOPT_NFS4ACLS		{ "nfs4acls",	0, MNT_NFS4ACLS, 0 }
 48#define MOPT_POSIX1EACLS	{ "posix1eacls",0, MNT_POSIX1EACLS, 0 }
 49#define MOPT_ASYNC		{ "async",	0, MNT_ASYNC, 0 }
 50#define MOPT_NOCOREDUMP		{ "coredump",	1, MNT_NOCOREDUMP, 0 }
 51#define MOPT_NODEV		{ "dev",	1, MNT_NODEV, 0 }
 52#define MOPT_NODEVMTIME		{ "devmtime",	1, MNT_NODEVMTIME, 0 }
 53#define MOPT_NOEXEC		{ "exec",	1, MNT_NOEXEC, 0 }
 54#define MOPT_NOSUID		{ "suid",	1, MNT_NOSUID, 0 }
 55#define MOPT_RDONLY		{ "rdonly",	0, MNT_RDONLY, 0 }
 56#define MOPT_SYNC		{ "sync",	0, MNT_SYNCHRONOUS, 0 }
 57#define MOPT_UNION		{ "union",	0, MNT_UNION, 0 }
 58#define MOPT_USERQUOTA		{ "userquota",	0, 0, 0 }
 59#define MOPT_GROUPQUOTA		{ "groupquota",	0, 0, 0 }
 60#define MOPT_NOATIME		{ "atime",	1, MNT_NOATIME, 0 }
 61#define MOPT_RELATIME		{ "relatime",	0, MNT_RELATIME, 0 }
 62#define MOPT_SYMPERM		{ "symperm",	0, MNT_SYMPERM, 0 }
 63#define MOPT_SOFTDEP		{ "softdep",	0, MNT_SOFTDEP, 0 }
 64#define MOPT_LOG		{ "log",	0, MNT_LOG, 0 }
 65#define MOPT_IGNORE		{ "hidden",	0, MNT_IGNORE, 0 }
 66#define MOPT_EXTATTR		{ "extattr",	0, MNT_EXTATTR, 0 }
 67#define MOPT_DISCARD		{ "discard",	0, MNT_DISCARD, 0 }
 68#define MOPT_AUTOMOUNTED	{ "automounted",0, MNT_AUTOMOUNTED, 0 }
 69
 70/* Control flags. */
 71#define MOPT_FORCE		{ "force",	0, MNT_FORCE, 0 }
 72#define MOPT_UPDATE		{ "update",	0, MNT_UPDATE, 0 }
 73#define MOPT_RELOAD		{ "reload",	0, MNT_RELOAD, 0 }
 74#define MOPT_GETARGS		{ "getargs",	0, MNT_GETARGS,	0 }
 75
 76/* Support for old-style "ro", "rw" flags. */
 77#define MOPT_RO			{ "ro",		0, MNT_RDONLY, 0 }
 78#define MOPT_RW			{ "rw",		1, MNT_RDONLY, 0 }
 79
 80/* This is parsed by mount(8), but is ignored by specific mount_*(8)s. */
 81#define MOPT_AUTO		{ "auto",	0, 0, 0 }
 82#define MOPT_RUMP		{ "rump",	0, 0, 0 }
 83#define MOPT_NULL		{ NULL,		0, 0, 0 }
 84
 85#define MOPT_FSTAB_COMPAT						\
 86	MOPT_RO,							\
 87	MOPT_RW,							\
 88	MOPT_AUTO
 89
 90/* Standard options which all mounts can understand. */
 91#define MOPT_STDOPTS							\
 92	MOPT_USERQUOTA,							\
 93	MOPT_GROUPQUOTA,						\
 94	MOPT_FSTAB_COMPAT,						\
 95	MOPT_NOCOREDUMP,						\
 96	MOPT_NODEV,							\
 97	MOPT_NOEXEC,							\
 98	MOPT_NOSUID,							\
 99	MOPT_RDONLY,							\
100	MOPT_UNION,							\
101	MOPT_IGNORE,							\
102	MOPT_SYMPERM,							\
103	MOPT_RUMP,							\
104	MOPT_AUTOMOUNTED
105
106__BEGIN_DECLS
107typedef struct mntoptparse *mntoptparse_t;
108mntoptparse_t getmntopts(const char *, const struct mntopt *, int *, int *);
109const char *getmntoptstr(mntoptparse_t, const char *);
110long getmntoptnum(mntoptparse_t, const char *);
111void freemntopts(mntoptparse_t);
112
113extern int getmnt_silent;
114__END_DECLS
115
116#endif /* _MNTOPTS_H_ */