svn commit: r367686 - head/lib/libutil

Scott Long scottl at samsco.org
Sat Nov 14 22:17:38 UTC 2020


Another oversight on my part.  I have a fix, it’s trivial, but I’m running a few more tests to be sure this time.

Scott


> On Nov 14, 2020, at 2:54 PM, Gordon Bergling <gbe at freebsd.org> wrote:
> 
> Hi Scott,
> 
> after r367689 the build was fixed, but on arm64 I get the following error,
> when I try to 'pkg upgrade':
> 
> $ doas pkg upgrade
> Cannot determine local path
> $
> 
> Is this error somehow related to this change?
> 
> --Gordon
> 
> On Sat, Nov 14, 2020 at 11:44:29AM -0700, Scott Long wrote:
>> Hi,
>> 
>> Yeah, I’m working on a fix, sorry.  I made a last minute change that I thought I
>> had tested, but apparently hadn’t.
>> 
>> Scott
>> 
>> 
>>> On Nov 14, 2020, at 11:43 AM, Gordon Bergling <gbe at freebsd.org> wrote:
>>> 
>>> 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 at 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 at 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 at freebsd.org mailing list
>>>> https://lists.freebsd.org/mailman/listinfo/svn-src-head
>>>> To unsubscribe, send any mail to "svn-src-head-unsubscribe at freebsd.org"
>>> 
>>> -- 
>> 
> 
> -- 



More information about the svn-src-all mailing list