[Bug 268479] lib/libc/stdlib/getenv.c may have a problem with putenv()

From: <bugzilla-noreply_at_freebsd.org>
Date: Mon, 26 Dec 2022 08:16:47 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=268479

--- Comment #14 from Mark Millard <marklmi26-fbsd@yahoo.com> ---
(In reply to Dennis Clarke from comment #12)

To know the the boot FreeBSD kernel information (for the active architecture
when more than one is possible) in a context known to be FreeBSD, use:

sysctl(8) - get or set kernel state

or:

sysctl, sysctlbyname, sysctlnametomib(3) - get or set system information

I'm unsure why other programming interfaces should be a strictly
redundant presentation of the same information as the subset of sysctl
information that provides defaults for the interface(s) you are trying
to use for some reason.

In other words, if you use the right interface, you can "can actually
know the system we are running on". Why do you insist on using the
interface that you are trying to use for this? FreeBSD would be
broken in various respects if its standard operating procedures in
various places suddenly stopped working in order to not return
different uname(1) and uname(3) results than sysctl (and its
variants) would return.

FYI:

FreeBSD 4.8 looks to be the first release that uname(1) documents
with:

ENVIRONMENT
     An environment variable composed of the string UNAME_ followed by any
     flag to the uname utility (except for -a) will allow the corresponding
     data to be set to the contents of the environment variable.

But, interestingly, 6.3 looks to be the first that uname(3) documents
with:

ENVIRONMENT
     UNAME_s  If the environment variable UNAME_s is set, it will override the
              sysname member.

     UNAME_r  If the environment variable UNAME_r is set, it will override the
              release member.

     UNAME_v  If the environment variable UNAME_v is set, it will override the
              version member.

     UNAME_m  If the environment variable UNAME_m is set, it will override the
              machine member.

In other words: these were added later than uname(1) and uname(3) were
originally added. But they have been around for a while.

-- 
You are receiving this mail because:
You are the assignee for the bug.