getlocalbase: Make default path actually configurable

We include paths.h in getlocalbase.c, which defines _PATH_LOCALBASE.
This will override a definition on the command line, meaning it is
impossible to override like how the manpage says you can, and it means
the code to provide a fallback default is dead as the macro is always
defined.

Instead, introduce a new LOCALBASE_PATH macro like LOCALBASE_CTL_LEN
that can be set on the command line and will default to the system's
existing _PATH_LOCALBASE to avoid duplicating the default here.

Reviewed by:	imp
Differential Revision:	https://reviews.freebsd.org/D40975
This commit is contained in:
Jessica Clarke 2023-07-11 21:49:22 +01:00
parent d1e44bc944
commit 3a46fe2261
2 changed files with 9 additions and 9 deletions

View file

@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd November 25, 2020
.Dd July 11, 2023
.Dt GETLOCALBASE 3
.Os
.Sh NAME
@ -53,10 +53,10 @@ If that does not exist then the
.Va user.localbase
sysctl is checked.
If that also does not exist then the value of the
.Dv _PATH_LOCALBASE
.Dv LOCALBASE_PATH
compile-time variable is used.
If that is undefined then the default of
.Pa /usr/local
If that is undefined then the system default,
.Pa _PATH_LOCALBASE
is used.
.Pp
The contents of the string returned by the

View file

@ -37,8 +37,8 @@ __FBSDID("$FreeBSD$");
#include <libutil.h>
#include <unistd.h>
#ifndef _PATH_LOCALBASE
#define _PATH_LOCALBASE "/usr/local"
#ifndef LOCALBASE_PATH
#define LOCALBASE_PATH _PATH_LOCALBASE
#endif
#ifndef LOCALBASE_CTL_LEN
@ -73,17 +73,17 @@ getlocalbase(void)
#if LOCALBASE_CTL_LEN > 0
if (sysctl(localbase_oid, 2, localpath, &localpathlen, NULL, 0) != 0) {
if (errno != ENOMEM)
localbase = _PATH_LOCALBASE;
localbase = LOCALBASE_PATH;
else
localbase = ILLEGAL_PREFIX;
} else {
if (localpath[0] != '\0')
localbase = localpath;
else
localbase = _PATH_LOCALBASE;
localbase = LOCALBASE_PATH;
}
#else
localbase = _PATH_LOCALBASE;
localbase = LOCALBASE_PATH;
#endif
return (localbase);