Move mntopts(3) suppport into libutil

Many programs use this functionality so it should be available centrally
rather than compiled into each program independently.  This has the
modest downside of adding libutil dependencies to some mount_<foo>
programs, but many (plus mount(8)) already have those depndencies so
this shouldn't be a major imposition.

In commit 906c312bbf, Kirk said this could be done once the change was
merged to FreeBSD 13.  That happened in commit 668dfa0166 in 2023.

While here perform related tidying including removing SRCS where the
only entry is ${PROG}.c rendering it unnecessary.

Reviewed by:	olce, dim, emaste
Differential Revision:	https://reviews.freebsd.org/D49951
This commit is contained in:
Brooks Davis 2025-04-22 22:50:19 +01:00
parent 5842658903
commit cda23fc36d
22 changed files with 51 additions and 118 deletions

View file

@ -16,9 +16,10 @@ SRCS= _secure_path.c auth.c cpuset.c expand_number.c flopen.c fparseln.c \
kinfo_getvmobject.c kld.c \
login_auth.c login_cap.c \
login_class.c login_crypt.c login_ok.c login_times.c login_tty.c \
mntopts.c \
pidfile.c property.c pty.c pw_scan.c pw_util.c quotafile.c \
realhostname.c stub.c trimdomain.c uucplock.c
INCS= libutil.h login_cap.h
INCS= libutil.h login_cap.h mntopts.h
CFLAGS+= -DNO__SCCSID
@ -32,7 +33,8 @@ MAN+= cpuset.3 expand_number.3 flopen.3 fparseln.3 ftime.3 getlocalbase.3 \
hexdump.3 humanize_number.3 kinfo_getallproc.3 kinfo_getfile.3 \
kinfo_getproc.3 kinfo_getvmmap.3 kinfo_getvmobject.3 kld.3 \
login_auth.3 login_cap.3 \
login_class.3 login_ok.3 login_times.3 login_tty.3 pidfile.3 \
login_class.3 login_ok.3 login_times.3 login_tty.3 mntopts.3 \
pidfile.3 \
property.3 pty.3 quotafile.3 realhostname.3 realhostname_sa.3 \
_secure_path.3 trimdomain.3 uucplock.3 pw_util.3
MAN+= login.conf.5
@ -54,6 +56,14 @@ MLINKS+=login_times.3 in_lt.3 login_times.3 in_ltm.3 \
login_times.3 in_ltms.3 \
login_times.3 in_lts.3 \
login_times.3 parse_lt.3
MLINKS+=mntopts.3 getmntopts.3 \
mntopts.3 getmntpoint.3 \
mntopts.3 chkdoreload.3 \
mntopts.3 build_iovec.3 \
mntopts.3 build_iovec_argf.3 \
mntopts.3 free_iovec.3 \
mntopts.3 checkpath.3 \
mntopts.3 rmslashes.3
MLINKS+=pidfile.3 pidfile_close.3 \
pidfile.3 pidfile_fileno.3 \
pidfile.3 pidfile_open.3 \

View file

@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd January 19, 2023
.Dd April 21, 2025
.Dt MNTOPTS 3
.Os
.Sh NAME
@ -35,6 +35,8 @@
.Nm checkpath ,
.Nm rmslashes
.Nd "mount point operations"
.Sh LIBRARY
.Lb libutil
.Sh SYNOPSIS
.In mntopts.h
.Ft void
@ -69,18 +71,6 @@
The
.Nm mntopts
functions support operations associated with a mount point.
For historic reasons are in a file in the sources for the
.Xr mount 8
program.
Thus, to access them the following lines need to be added to the
.Nm Makefile
of the program wanting to use them:
.Bd -literal
SRCS+= getmntopts.c
MOUNT= ${SRCTOP}/sbin/mount
CFLAGS+= -I${MOUNT}
\&.PATH: ${MOUNT}
.Ed
.Pp
The
.Fn getmntopts
@ -326,7 +316,7 @@ flag, would also have an
entry.
This can be declared and used as follows:
.Bd -literal
#include "mntopts.h"
#include <mntopts.h>
struct mntopt mopts[] = {
MOPT_STDOPTS,
@ -377,3 +367,11 @@ and
.Fn chkdoreload
functions were added in
.Fx 13.2 .
.Pp
Historically, these functions were found in getmntopts.c in the sources for the
.Xr mount 8
program.
As of
.Fx 15.0
they are part of
.Nm libutil .

View file

@ -29,6 +29,9 @@
* SUCH DAMAGE.
*/
#ifndef _MNTOPTS_H_
#define _MNTOPTS_H_
struct mntopt {
const char *m_option; /* option name */
int m_inverse; /* if a negative option, e.g. "atime" */
@ -107,3 +110,5 @@ extern int getmnt_silent;
void build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val, size_t len);
void build_iovec_argf(struct iovec **iov, int *iovlen, const char *name, const char *fmt, ...);
void free_iovec(struct iovec **iovec, int *iovlen);
#endif /* !_MNTOPTS_H_ */

View file

@ -3,10 +3,7 @@
PACKAGE=runtime
PROG= fsck
SRCS= fsck.c fsutil.c preen.c
SRCS+= getmntopts.c
MAN= fsck.8
MOUNT= ${SRCTOP}/sbin/mount
CFLAGS+= -I${MOUNT}
.PATH: ${MOUNT}
LIBADD= util
.include <bsd.prog.mk>

View file

@ -5,12 +5,12 @@ LINKS+= ${BINDIR}/fsck_ffs ${BINDIR}/fsck_4.2bsd
MAN= fsck_ffs.8
MLINKS= fsck_ffs.8 fsck_ufs.8 fsck_ffs.8 fsck_4.2bsd.8
SRCS= dir.c ea.c fsutil.c inode.c main.c pass1.c pass1b.c pass2.c pass3.c \
pass4.c pass5.c setup.c suj.c utilities.c gjournal.c getmntopts.c \
pass4.c pass5.c setup.c suj.c utilities.c gjournal.c \
globs.c
LIBADD= ufs
LIBADD= ufs util
WARNS?= 2
CFLAGS+= -I${.CURDIR} -I${.CURDIR:H}/mount
CFLAGS+= -I${.CURDIR}
.PATH: ${SRCTOP}/sys/ufs/ffs ${.CURDIR:H}/mount
.PATH: ${SRCTOP}/sys/ufs/ffs
.include <bsd.prog.mk>

View file

@ -3,13 +3,10 @@
.include <src.opts.mk>
.PATH: ${.CURDIR:H}/mount
PACKAGE=ufs
PROG= growfs
SRCS= growfs.c getmntopts.c
SRCS= growfs.c
MAN= growfs.8
CFLAGS+=-I${.CURDIR:H}/mount
.if defined(GFSDBG)
SRCS+= debug.c

View file

@ -1,7 +1,6 @@
CONFGROUPS= CONFTTYS
PACKAGE=runtime
PROG= init
SRCS= init.c getmntopts.c
MAN= init.8
PRECIOUSPROG=
INSTALLFLAGS=-b -B.bak
@ -11,11 +10,6 @@ LIBADD= util crypt
CONFTTYSNAME= ttys
CONFTTYS+= ttys
# Needed for getmntopts.c
MOUNT= ${SRCTOP}/sbin/mount
CFLAGS+=-I${MOUNT}
.PATH: ${MOUNT}
NO_SHARED?= YES
.include <bsd.prog.mk>

View file

@ -2,11 +2,10 @@
PACKAGE=ufs
PROG= mksnap_ffs
SRCS= mksnap_ffs.c getmntopts.c
LIBADD= util
MAN= mksnap_ffs.8
WARNS?= 2
CFLAGS+=-I${.CURDIR:H}/mount
.if defined(NOSUID)
BINMODE=554

View file

@ -1,15 +1,7 @@
PACKAGE=runtime
PROG= mount
SRCS= mount.c mount_fs.c getmntopts.c vfslist.c
MAN= mntopts.3 mount.8
MLINKS+= mntopts.3 getmntopts.3
MLINKS+= mntopts.3 getmntpoint.3
MLINKS+= mntopts.3 chkdoreload.3
MLINKS+= mntopts.3 build_iovec.3
MLINKS+= mntopts.3 build_iovec_argf.3
MLINKS+= mntopts.3 free_iovec.3
MLINKS+= mntopts.3 checkpath.3
MLINKS+= mntopts.3 rmslashes.3
SRCS= mount.c mount_fs.c vfslist.c
MAN= mount.8
LIBADD= util xo

View file

@ -1,16 +1,10 @@
PACKAGE=runtime
PROG= mount_cd9660
SRCS= mount_cd9660.c getmntopts.c
MAN= mount_cd9660.8
LIBADD= kiconv
MOUNT= ${.CURDIR:H}/mount
CFLAGS+= -I${MOUNT}
LIBADD= kiconv util
# Needs to be dynamically linked for optional dlopen() access to
# userland libiconv
NO_SHARED?= NO
.PATH: ${MOUNT}
.include <bsd.prog.mk>

View file

@ -20,12 +20,7 @@ DEBUG_FLAGS+= -DFUSE4BSD_VERSION="\"${F4BVERS}\""
PACKAGE=runtime
PROG= mount_fusefs
SRCS= mount_fusefs.c getmntopts.c
MAN8= mount_fusefs.8
MOUNT= ${.CURDIR:H}/mount
CFLAGS+= -I${MOUNT}
.PATH: ${MOUNT}
LIBADD= util
.include <bsd.prog.mk>

View file

@ -1,19 +1,10 @@
#
#
PACKAGE=runtime
PROG= mount_msdosfs
SRCS= mount_msdosfs.c getmntopts.c
MAN= mount_msdosfs.8
LIBADD= kiconv
MOUNT= ${.CURDIR:H}/mount
CFLAGS+= -I${MOUNT}
LIBADD= kiconv util
# Needs to be dynamically linked for optional dlopen() access to
# userland libiconv
NO_SHARED?= NO
.PATH: ${MOUNT}
.include <bsd.prog.mk>

View file

@ -1,12 +1,12 @@
PACKAGE=nfs
PROG= mount_nfs
SRCS= mount_nfs.c getmntopts.c mounttab.c
SRCS= mount_nfs.c mounttab.c
MAN= mount_nfs.8
LIBADD= util
MOUNT= ${.CURDIR:H}/mount
UMNTALL= ${SRCTOP}/usr.sbin/rpc.umntall
CFLAGS+= -DNFS -I${MOUNT} -I${UMNTALL}
CFLAGS+= -DNFS -I${UMNTALL}
.PATH: ${MOUNT} ${UMNTALL}
.PATH: ${UMNTALL}
.include <bsd.prog.mk>

View file

@ -1,11 +1,6 @@
PACKAGE=runtime
PROG= mount_nullfs
SRCS= mount_nullfs.c getmntopts.c
MAN= mount_nullfs.8
MOUNT= ${.CURDIR:H}/mount
CFLAGS+=-I${MOUNT}
.PATH: ${MOUNT}
LIBADD= util
.include <bsd.prog.mk>

View file

@ -1,12 +1,7 @@
PACKAGE=runtime
PROG= mount_udf
SRCS= mount_udf.c getmntopts.c
MAN= mount_udf.8
LIBADD= kiconv
MOUNT= ${.CURDIR:H}/mount
CFLAGS+= -I${MOUNT} -I${SRCTOP}/sys
.PATH: ${MOUNT}
LIBADD= kiconv util
# Needs to be dynamically linked for optional dlopen() access to
# userland libiconv

View file

@ -1,11 +1,6 @@
PACKAGE=runtime
PROG= mount_unionfs
SRCS= mount_unionfs.c getmntopts.c
MAN= mount_unionfs.8
MOUNT= ${.CURDIR:H}/mount
CFLAGS+=-I${MOUNT}
.PATH: ${MOUNT}
LIBADD= util
.include <bsd.prog.mk>

View file

@ -1,13 +1,8 @@
PACKAGE=ufs
PROG= tunefs
SRCS= tunefs.c getmntopts.c
LIBADD= ufs
LIBADD= ufs util
MAN= tunefs.8
MOUNT= ${SRCTOP}/sbin/mount
CFLAGS+= -I${MOUNT}
.PATH: ${MOUNT}
WARNS?= 3
.include <bsd.prog.mk>

View file

@ -55,7 +55,6 @@ GTESTS+= xattr
.for p in ${GTESTS}
SRCS.$p+= ${p}.cc
SRCS.$p+= getmntopts.c
SRCS.$p+= mockfs.cc
SRCS.$p+= utils.cc
.endfor
@ -68,7 +67,6 @@ TEST_METADATA.nfs+= required_user="root"
TEST_METADATA+= timeout=10
FUSEFS= ${SRCTOP}/sys/fs/fuse
MOUNT= ${SRCTOP}/sbin/mount
# Suppress warnings that GCC generates for the libc++ and gtest headers.
CXXWARNFLAGS.gcc+= -Wno-placement-new -Wno-attributes
# Suppress Wcast-align for readdir.cc, because it is unavoidable when using
@ -87,8 +85,6 @@ CXXWARNFLAGS+= -Wno-vla-cxx-extension
.endif
CXXFLAGS+= -I${SRCTOP}/tests
CXXFLAGS+= -I${FUSEFS}
CXXFLAGS+= -I${MOUNT}
.PATH: ${MOUNT}
LIBADD+= pthread
LIBADD+= gmock gtest

View file

@ -6,7 +6,6 @@ SRCS+= automountd.c
SRCS+= autounmountd.c
SRCS+= common.c
SRCS+= defined.c
SRCS+= getmntopts.c
SRCS+= log.c
SRCS+= popen.c
SRCS+= token.l
@ -18,15 +17,9 @@ MAN= automount.8 automountd.8 autounmountd.8 auto_master.5
LIBADD= util
# Needed for getmntopts.c
MOUNT= ${SRCTOP}/sbin/mount
CFLAGS+=-I${MOUNT}
LINKS= ${BINDIR}/automountd ${BINDIR}/automount
LINKS+= ${BINDIR}/automountd ${BINDIR}/autounmountd
.PATH: ${MOUNT}
SUBDIR= autofs
.include <bsd.prog.mk>

View file

@ -1,15 +1,12 @@
PROG= mount_smbfs
PACKAGE= smbutils
SRCS= mount_smbfs.c getmntopts.c
MAN= mount_smbfs.8
MOUNTDIR= ${SRCTOP}/sbin/mount
CONTRIBDIR= ${SRCTOP}/contrib/smbfs
CFLAGS+= -DSMBFS -I${MOUNTDIR} -I${CONTRIBDIR}/include
CFLAGS+= -DSMBFS -I${CONTRIBDIR}/include
LIBADD= smb
LIBADD= smb util
.PATH: ${CONTRIBDIR}/mount_smbfs
.PATH: ${MOUNTDIR}
.include <bsd.prog.mk>

View file

@ -1,13 +1,8 @@
PROG= mountd
SRCS= mountd.c getmntopts.c
MAN= exports.5 netgroup.5 mountd.8
MOUNT= ${SRCTOP}/sbin/mount
CFLAGS+= -I${MOUNT}
WARNS?= 2
.PATH: ${MOUNT}
LIBADD= util
.include <bsd.prog.mk>