Date: Sat, 14 Nov 2020 19:43:38 +0100 From: Gordon Bergling <gbe@freebsd.org> To: Scott Long <scottl@freebsd.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r367686 - head/lib/libutil Message-ID: <X7AlWq2I8ftSwZil@lion.0xfce3.net> In-Reply-To: <202011141757.0AEHvo1m098201@repo.freebsd.org> References: <202011141757.0AEHvo1m098201@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Scott, this somehow breaks the build. --------------------------------------------------------------------- ===> lib/msun (obj,all,install) /tank/nfs_public/tiny/src/lib/libutil/getlocalbase.c:69:30: error: comparison of integers of different signs: 'size_t' (aka 'unsigned long') and 'ssize_t' (aka 'long') [-Werror,-Wsign-compare] if ((tmplen < 0) || (tmplen >= (ssize_t)pathlen)) { ~~~~~~ ^ ~~~~~~~~~~~~~~~~ 1 error generated. --- getlocalbase.o --- *** [getlocalbase.o] Error code 1 ..................................................................... Got this on arm64 with the following src.conf: WITH_MALLOC_PRODUCTION=1 WITH_EXTRA_TCP_STACKS=1 WITH_BEARSSL=1 WITH_PIE=1 WITH_RETPOLINE=1 --Gordon On Sat, Nov 14, 2020 at 05:57:50PM +0000, Scott Long wrote: > Author: scottl > Date: Sat Nov 14 17:57:50 2020 > New Revision: 367686 > URL: https://svnweb.freebsd.org/changeset/base/367686 > > Log: > Add the library function getlocalbase and its manual page. This helps to > unify the retrieval of the various ways that the local software base directory, > typically "/usr/local", is expressed in the system. > > Reviewed by: se > Differential Revision: https://reviews.freebsd.org/D27022 > > Added: > head/lib/libutil/getlocalbase.3 (contents, props changed) > head/lib/libutil/getlocalbase.c (contents, props changed) > Modified: > head/lib/libutil/Makefile > head/lib/libutil/libutil.h > > Modified: head/lib/libutil/Makefile > ============================================================================== > --- head/lib/libutil/Makefile Sat Nov 14 15:44:28 2020 (r367685) > +++ head/lib/libutil/Makefile Sat Nov 14 17:57:50 2020 (r367686) > @@ -12,7 +12,8 @@ PACKAGE= runtime > LIB= util > SHLIB_MAJOR= 9 > > -SRCS= _secure_path.c auth.c expand_number.c flopen.c fparseln.c gr_util.c \ > +SRCS= _secure_path.c auth.c expand_number.c flopen.c fparseln.c \ > + getlocalbase.c gr_util.c \ > hexdump.c humanize_number.c kinfo_getfile.c \ > kinfo_getallproc.c kinfo_getproc.c kinfo_getvmmap.c \ > kinfo_getvmobject.c kld.c \ > @@ -30,7 +31,7 @@ CFLAGS+= -DINET6 > > CFLAGS+= -I${.CURDIR} -I${SRCTOP}/lib/libc/gen/ > > -MAN+= expand_number.3 flopen.3 fparseln.3 hexdump.3 \ > +MAN+= expand_number.3 flopen.3 fparseln.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 \ > > Added: head/lib/libutil/getlocalbase.3 > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/lib/libutil/getlocalbase.3 Sat Nov 14 17:57:50 2020 (r367686) > @@ -0,0 +1,110 @@ > +.\" > +.\" SPDX-License-Identifier: BSD-2-Clause-FreeBSD > +.\" > +.\" Copyright 2020 Scott Long > +.\" > +.\" Redistribution and use in source and binary forms, with or without > +.\" modification, are permitted provided that the following conditions > +.\" are met: > +.\" 1. Redistributions of source code must retain the above copyright > +.\" notice, this list of conditions and the following disclaimer. > +.\" 2. Redistributions in binary form must reproduce the above copyright > +.\" notice, this list of conditions and the following disclaimer in the > +.\" documentation and/or other materials provided with the distribution. > +.\" > +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND > +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE > +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS > +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) > +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT > +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY > +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > +.\" SUCH DAMAGE. > +.\" > +.\" $FreeBSD$ > +.\" > +.Dd Oct 28, 2020 > +.Dt GETLOCALBASE 3 > +.Os > +.Sh NAME > +.Nm getlocalbase > +.Nd "return the path to the local software directory" > +.Sh LIBRARY > +.Lb libutil > +.Sh SYNOPSIS > +.In libutil.h > +.Ft ssize_t > +.Fn getlocalbase "char *path" "size_t len" > +.Sh DESCRIPTION > +The > +.Fn getlocalbase > +function returns the path to the local software base directory. > +Normally this is the > +.Pa /usr/local > +directory. > +First the > +.Ev LOCALBASE > +environment variable is checked. > +If that doesn't exist then the > +.Va user.localbase > +sysctl is checked. > +If that also doesn't exist then the value of the > +.Dv _PATH_LOCALBASE > +compile-time variable is used. > +If that is undefined then the default of > +.Pa /usr/local > +is used. > +.Pp > +The > +.Fa path > +argument points to a caller-supplied buffer to hold the resulting pathname. > +The > +.Fa len > +argument is the length of the caller-supplied buffer. > +.Sh IMPLEMENTATION NOTES > +Calls to > +.Fn getlocalpath > +will perform a setugid check on the running binary before checking the > +environment. > +.Sh RETURN VALUES > +If the request completes without error, the size of the string copied into the > +buffer, including the terminating NUL, is returned. > +If an error occurred or the buffer was too small to hold the string, > +.Fn getlocalbase > +returns -1 and sets > +.Em errno > +to indicate the error condition. > +.Sh ENVIRONMENT > +The > +.Fn getlocalbase > +library function retrieves the > +.Ev LOCALBASE > +environment variable. > +.Sh ERRORS > +The > +.Fn getlocalbase > +function will fail and set > +.Va errno > +for the following conditions: > +.Bl -tag -width Er > +.It Bq Er EINVAL > +One of the passed in parameters is NULL or zero. > +.It Bq Er ENOMEM > +There isn't enough space in the passed in buffer to hold the pathname string. > +.El > +.Sh SEE ALSO > +.Xr env 1 , > +.Xr src.conf 5 , > +.Xr sysctl 8 > +.Sh HISTORY > +The > +.Nm > +library function first appeared in > +.Fx 13.0 . > +.Sh AUTHORS > +This > +manual page was written by > +.An Scott Long Aq Mt scottl@FreeBSD.org . > > Added: head/lib/libutil/getlocalbase.c > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/lib/libutil/getlocalbase.c Sat Nov 14 17:57:50 2020 (r367686) > @@ -0,0 +1,75 @@ > +/*- > + * SPDX-License-Identifier: BSD-2-Clause > + * > + * Copyright 2020 Scott Long <scottl@freebsd.org> > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > + * SUCH DAMAGE. > + */ > + > +#include <sys/cdefs.h> > +__FBSDID("$FreeBSD$"); > + > +#include <sys/types.h> > +#include <sys/errno.h> > +#include <sys/sysctl.h> > +#include <stdlib.h> > +#include <paths.h> > +#include <libutil.h> > +#include <string.h> > +#include <unistd.h> > + > +ssize_t > +getlocalbase(char *path, size_t pathlen) > +{ > + size_t tmplen; > + const char *tmppath; > + > + if ((pathlen == 0) || (path == NULL)) { > + errno = EINVAL; > + return (-1); > + } > + > + tmppath = NULL; > + tmplen = pathlen; > + if (issetugid() == 0) > + tmppath = getenv("LOCALBASE"); > + > + if ((tmppath == NULL) && > + (sysctlbyname("user.localbase", path, &tmplen, NULL, 0) == 0)) { > + return (tmplen); > + } > + > + if (tmppath == NULL) > +#ifdef _PATH_LOCALBASE > + tmppath = _PATH_LOCALBASE; > +#else > + tmppath = "/usr/local"; > +#endif > + > + tmplen = strlcpy(path, tmppath, pathlen); > + if ((tmplen < 0) || (tmplen >= (ssize_t)pathlen)) { > + errno = ENOMEM; > + tmplen = -1; > + } > + > + return (tmplen); > +} > > Modified: head/lib/libutil/libutil.h > ============================================================================== > --- head/lib/libutil/libutil.h Sat Nov 14 15:44:28 2020 (r367685) > +++ head/lib/libutil/libutil.h Sat Nov 14 17:57:50 2020 (r367686) > @@ -98,6 +98,7 @@ int flopen(const char *_path, int _flags, ...); > int flopenat(int _dirfd, const char *_path, int _flags, ...); > int forkpty(int *_amaster, char *_name, > struct termios *_termp, struct winsize *_winp); > +ssize_t getlocalbase(char *path, size_t pathlen); > void hexdump(const void *_ptr, int _length, const char *_hdr, int _flags); > int humanize_number(char *_buf, size_t _len, int64_t _number, > const char *_suffix, int _scale, int _flags); > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org" --
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?X7AlWq2I8ftSwZil>