From cda23fc36d22bfa9d57d1a57c0daaeeb86bac94f Mon Sep 17 00:00:00 2001 From: Brooks Davis Date: Tue, 22 Apr 2025 22:50:19 +0100 Subject: [PATCH] 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_ programs, but many (plus mount(8)) already have those depndencies so this shouldn't be a major imposition. In commit 906c312bbf74, Kirk said this could be done once the change was merged to FreeBSD 13. That happened in commit 668dfa016698 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 --- lib/libutil/Makefile | 14 ++++++++-- {sbin/mount => lib/libutil}/mntopts.3 | 26 +++++++++---------- .../getmntopts.c => lib/libutil/mntopts.c | 0 {sbin/mount => lib/libutil}/mntopts.h | 5 ++++ sbin/fsck/Makefile | 5 +--- sbin/fsck_ffs/Makefile | 8 +++--- sbin/growfs/Makefile | 5 +--- sbin/init/Makefile | 6 ----- sbin/mksnap_ffs/Makefile | 3 +-- sbin/mount/Makefile | 12 ++------- sbin/mount_cd9660/Makefile | 8 +----- sbin/mount_fusefs/Makefile | 7 +---- sbin/mount_msdosfs/Makefile | 11 +------- sbin/mount_nfs/Makefile | 8 +++--- sbin/mount_nullfs/Makefile | 7 +---- sbin/mount_udf/Makefile | 7 +---- sbin/mount_unionfs/Makefile | 7 +---- sbin/tunefs/Makefile | 7 +---- tests/sys/fs/fusefs/Makefile | 4 --- usr.sbin/autofs/Makefile | 7 ----- usr.sbin/mount_smbfs/Makefile | 7 ++--- usr.sbin/mountd/Makefile | 5 ---- 22 files changed, 51 insertions(+), 118 deletions(-) rename {sbin/mount => lib/libutil}/mntopts.3 (96%) rename sbin/mount/getmntopts.c => lib/libutil/mntopts.c (100%) rename {sbin/mount => lib/libutil}/mntopts.h (98%) diff --git a/lib/libutil/Makefile b/lib/libutil/Makefile index 8178d33b7ba..0639745d08f 100644 --- a/lib/libutil/Makefile +++ b/lib/libutil/Makefile @@ -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 \ diff --git a/sbin/mount/mntopts.3 b/lib/libutil/mntopts.3 similarity index 96% rename from sbin/mount/mntopts.3 rename to lib/libutil/mntopts.3 index 74fca612479..35f6d476fce 100644 --- a/sbin/mount/mntopts.3 +++ b/lib/libutil/mntopts.3 @@ -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 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 . diff --git a/sbin/mount/getmntopts.c b/lib/libutil/mntopts.c similarity index 100% rename from sbin/mount/getmntopts.c rename to lib/libutil/mntopts.c diff --git a/sbin/mount/mntopts.h b/lib/libutil/mntopts.h similarity index 98% rename from sbin/mount/mntopts.h rename to lib/libutil/mntopts.h index dc1452097ed..0027b8ca715 100644 --- a/sbin/mount/mntopts.h +++ b/lib/libutil/mntopts.h @@ -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_ */ diff --git a/sbin/fsck/Makefile b/sbin/fsck/Makefile index 3273ea730dc..33ff4784a92 100644 --- a/sbin/fsck/Makefile +++ b/sbin/fsck/Makefile @@ -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 diff --git a/sbin/fsck_ffs/Makefile b/sbin/fsck_ffs/Makefile index 7b0f0ed822b..c6676007db2 100644 --- a/sbin/fsck_ffs/Makefile +++ b/sbin/fsck_ffs/Makefile @@ -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 diff --git a/sbin/growfs/Makefile b/sbin/growfs/Makefile index 6fb1ba51db0..b5b3d99f287 100644 --- a/sbin/growfs/Makefile +++ b/sbin/growfs/Makefile @@ -3,13 +3,10 @@ .include -.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 diff --git a/sbin/init/Makefile b/sbin/init/Makefile index 124a9f77ded..1fc9b633f66 100644 --- a/sbin/init/Makefile +++ b/sbin/init/Makefile @@ -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 diff --git a/sbin/mksnap_ffs/Makefile b/sbin/mksnap_ffs/Makefile index 591fd6adcc2..cf5079fdfa8 100644 --- a/sbin/mksnap_ffs/Makefile +++ b/sbin/mksnap_ffs/Makefile @@ -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 diff --git a/sbin/mount/Makefile b/sbin/mount/Makefile index 9b5c9b9e593..e2a3098813c 100644 --- a/sbin/mount/Makefile +++ b/sbin/mount/Makefile @@ -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 diff --git a/sbin/mount_cd9660/Makefile b/sbin/mount_cd9660/Makefile index 3a8f9cd45cb..9fa8e743616 100644 --- a/sbin/mount_cd9660/Makefile +++ b/sbin/mount_cd9660/Makefile @@ -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 diff --git a/sbin/mount_fusefs/Makefile b/sbin/mount_fusefs/Makefile index 0c173bf1b68..e683b35f0c8 100644 --- a/sbin/mount_fusefs/Makefile +++ b/sbin/mount_fusefs/Makefile @@ -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 diff --git a/sbin/mount_msdosfs/Makefile b/sbin/mount_msdosfs/Makefile index e01755b2fce..50f07f17500 100644 --- a/sbin/mount_msdosfs/Makefile +++ b/sbin/mount_msdosfs/Makefile @@ -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 diff --git a/sbin/mount_nfs/Makefile b/sbin/mount_nfs/Makefile index 3e61a9f680e..fb425106dd8 100644 --- a/sbin/mount_nfs/Makefile +++ b/sbin/mount_nfs/Makefile @@ -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 diff --git a/sbin/mount_nullfs/Makefile b/sbin/mount_nullfs/Makefile index 12e87308ed1..1844aa14b24 100644 --- a/sbin/mount_nullfs/Makefile +++ b/sbin/mount_nullfs/Makefile @@ -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 diff --git a/sbin/mount_udf/Makefile b/sbin/mount_udf/Makefile index c41c051fc31..6506f6ba398 100644 --- a/sbin/mount_udf/Makefile +++ b/sbin/mount_udf/Makefile @@ -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 diff --git a/sbin/mount_unionfs/Makefile b/sbin/mount_unionfs/Makefile index 2096386a378..35e7e8fa75b 100644 --- a/sbin/mount_unionfs/Makefile +++ b/sbin/mount_unionfs/Makefile @@ -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 diff --git a/sbin/tunefs/Makefile b/sbin/tunefs/Makefile index e236525557e..4ea2219c8e0 100644 --- a/sbin/tunefs/Makefile +++ b/sbin/tunefs/Makefile @@ -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 diff --git a/tests/sys/fs/fusefs/Makefile b/tests/sys/fs/fusefs/Makefile index 06b82071fe3..4265f5b71df 100644 --- a/tests/sys/fs/fusefs/Makefile +++ b/tests/sys/fs/fusefs/Makefile @@ -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 diff --git a/usr.sbin/autofs/Makefile b/usr.sbin/autofs/Makefile index 2d0c1bcb880..b32c617cfd5 100644 --- a/usr.sbin/autofs/Makefile +++ b/usr.sbin/autofs/Makefile @@ -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 diff --git a/usr.sbin/mount_smbfs/Makefile b/usr.sbin/mount_smbfs/Makefile index 8bd1b0f34d9..857d475103d 100644 --- a/usr.sbin/mount_smbfs/Makefile +++ b/usr.sbin/mount_smbfs/Makefile @@ -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 diff --git a/usr.sbin/mountd/Makefile b/usr.sbin/mountd/Makefile index e63b03bbfe4..ebc4d3438cc 100644 --- a/usr.sbin/mountd/Makefile +++ b/usr.sbin/mountd/Makefile @@ -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