Re: git: 415a0ce02c9e - main - Revert Make newly POSIX functions visible

From: Warner Losh <imp_at_bsdimp.com>
Date: Thu, 20 Mar 2025 09:55:56 UTC
On Thu, Mar 20, 2025, 1:42 AM Stephen Hurd <shurd@freebsd.org> wrote:

> The branch main has been updated by shurd:
>
> URL:
> https://cgit.FreeBSD.org/src/commit/?id=415a0ce02c9ee2c15c7973b2dfbddda71f6344a2
>
> commit 415a0ce02c9ee2c15c7973b2dfbddda71f6344a2
> Author:     Stephen Hurd <shurd@FreeBSD.org>
> AuthorDate: 2025-03-20 07:15:15 +0000
> Commit:     Stephen Hurd <shurd@FreeBSD.org>
> CommitDate: 2025-03-20 07:41:27 +0000
>
>     Revert Make newly POSIX functions visible
>
>     Summary:
>     This reverts commit d7efac1be1441c122f7fb9de51a409172f21326c.
>     This reverts commit 9d0eea9422d075c8a6924b33161d2d5abfb4072a.
>
>     Some ports (specifically Python) define __BSD_VISIBLE themselves, so
>     the change from __BSD_VISIBLE to __POSIX_VISIBLE >= 202405 makes them
>     fail.
>

That's not legal. Defining __BSD_VISIBLE directly is illegal and won't work
right. Can't work right and should likely be a compile time error. With am
exp run to fix.

Warner


>     Reported by:    jrtc27, cperciva
> ---
>  include/dlfcn.h  |  8 +-------
>  include/stdlib.h | 13 +++++--------
>  include/string.h |  6 +++---
>  include/time.h   |  8 +++-----
>  include/unistd.h | 16 ++++++----------
>  include/wchar.h  |  7 ++-----
>  6 files changed, 20 insertions(+), 38 deletions(-)
>
> diff --git a/include/dlfcn.h b/include/dlfcn.h
> index ec4ad14b5091..89ec43b332e9 100644
> --- a/include/dlfcn.h
> +++ b/include/dlfcn.h
> @@ -80,9 +80,6 @@ typedef       struct dl_info {
>         const char      *dli_sname;     /* Name of nearest symbol. */
>         void            *dli_saddr;     /* Address of nearest symbol. */
>  } Dl_info;
> -#if __POSIX_VISIBLE >= 202405
> -typedef struct dl_info Dl_info_t;
> -#endif
>
>  /*-
>   * The actual type declared by this typedef is immaterial, provided that
> @@ -122,12 +119,9 @@ char       *dlerror(void);
>  void   *dlopen(const char *, int);
>  void   *dlsym(void * __restrict, const char * __restrict);
>
> -#if __POSIX_VISIBLE >= 202405
> -int     dladdr(const void * __restrict, Dl_info * __restrict);
> -#endif
> -
>  #if __BSD_VISIBLE
>  void   *fdlopen(int, int);
> +int     dladdr(const void * __restrict, Dl_info * __restrict);
>  dlfunc_t dlfunc(void * __restrict, const char * __restrict);
>  int     dlinfo(void * __restrict, int, void * __restrict);
>  void    dllockinit(void *_context,
> diff --git a/include/stdlib.h b/include/stdlib.h
> index 449b17fefff5..162031ab393d 100644
> --- a/include/stdlib.h
> +++ b/include/stdlib.h
> @@ -157,7 +157,7 @@ _Noreturn void       _Exit(int) __noexcept;
>  /*
>   * If we're in a mode greater than C99, expose C11 functions.
>   */
> -#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L || __POSIX_VISIBLE
> >= 202405
> +#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
>  void * aligned_alloc(size_t, size_t) __malloc_like __alloc_align(1)
>             __alloc_size(2);
>  int    at_quick_exit(void (*)(void)) __noexcept;
> @@ -236,13 +236,6 @@ int         unlockpt(int);
>  int     ptsname_r(int, char *, size_t);
>  #endif
>
> -#if __POSIX_VISIBLE >= 202405
> -void    qsort_r(void *, size_t, size_t,
> -           int (*)(const void *, const void *, void *), void *);
> -void   *reallocarray(void *, size_t, size_t) __result_use_check
> -           __alloc_size2(2, 3);
> -#endif
> -
>  #if __BSD_VISIBLE
>  extern const char *malloc_conf;
>  extern void (*malloc_message)(void *, const char *);
> @@ -312,8 +305,12 @@ int         mergesort_b(void *, size_t, size_t, int
> (^)(const void *, const void *));
>  int     mkostemp(char *, int);
>  int     mkostemps(char *, int, int);
>  int     mkostempsat(int, char *, int, int);
> +void    qsort_r(void *, size_t, size_t,
> +           int (*)(const void *, const void *, void *), void *);
>  int     radixsort(const unsigned char **, int, const unsigned char *,
>             unsigned);
> +void   *reallocarray(void *, size_t, size_t) __result_use_check
> +           __alloc_size2(2, 3);
>  void   *reallocf(void *, size_t) __result_use_check __alloc_size(2);
>  int     rpmatch(const char *);
>  char   *secure_getenv(const char *);
> diff --git a/include/string.h b/include/string.h
> index 3deca63bd71a..a3fa96ebb449 100644
> --- a/include/string.h
> +++ b/include/string.h
> @@ -63,8 +63,8 @@ void  *memrchr(const void *, int, size_t) __pure;
>  #endif
>  int     memcmp(const void *, const void *, size_t) __pure;
>  void   *(memcpy)(void * __restrict, const void * __restrict, size_t);
> -#if __POSIX_VISIBLE >= 202405
> -void   *(memmem)(const void *, size_t, const void *, size_t) __pure;
> +#if __BSD_VISIBLE
> +void   *memmem(const void *, size_t, const void *, size_t) __pure;
>  #endif
>  void   *(memmove)(void *, const void *, size_t);
>  #if __BSD_VISIBLE
> @@ -98,7 +98,7 @@ char  *strerror(int);
>  #if __POSIX_VISIBLE >= 200112
>  int     strerror_r(int, char *, size_t);
>  #endif
> -#if __POSIX_VISIBLE >= 202405
> +#if __BSD_VISIBLE
>  size_t  (strlcat)(char * __restrict, const char * __restrict, size_t);
>  size_t  (strlcpy)(char * __restrict, const char * __restrict, size_t);
>  #endif
> diff --git a/include/time.h b/include/time.h
> index e011792aaaeb..89a76ca5fd93 100644
> --- a/include/time.h
> +++ b/include/time.h
> @@ -180,17 +180,15 @@ time_t posix2time(time_t t);
>  #include <xlocale/_time.h>
>  #endif
>
> -#if __ISO_C_VISIBLE >= 2011 || __POSIX_VISIBLE >= 202405 || \
> +#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 2011 || \
>      (defined(__cplusplus) && __cplusplus >= 201703)
>  #include <sys/_timespec.h>
>  /* ISO/IEC 9899:2011 7.27.2.5 The timespec_get function */
>  #define TIME_UTC       1       /* time elapsed since epoch */
> -#if __ISO_C_VISIBLE >= 2023 || __POSIX_VISIBLE >= 202405
> -/* ISO/IEC 9899:2024 7.29.1 Components of time */
> -#define TIME_MONOTONIC 2       /* monotonic time */
> -#endif
>  int timespec_get(struct timespec *ts, int base);
>  #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 2023
> +/* ISO/IEC 9899:2024 7.29.1 Components of time */
> +#define TIME_MONOTONIC 2       /* monotonic time */
>  /* ISO/IEC 9899:2024 7.29.2.7 The timespec_getres function */
>  int timespec_getres(struct timespec *, int);
>  #endif
> diff --git a/include/unistd.h b/include/unistd.h
> index 3a4e1be192d9..8574b2ba9915 100644
> --- a/include/unistd.h
> +++ b/include/unistd.h
> @@ -483,16 +483,6 @@ int         usleep(useconds_t);
>  pid_t   vfork(void) __returns_twice;
>  #endif
>
> -/* 1003.1-2024 */
> -#if __POSIX_VISIBLE >= 202405
> -pid_t   _Fork(void);
> -int     getentropy(void *, size_t);
> -int     getresgid(gid_t *, gid_t *, gid_t *);
> -int     getresuid(uid_t *, uid_t *, uid_t *);
> -int     setresgid(gid_t, gid_t, gid_t);
> -int     setresuid(uid_t, uid_t, uid_t);
> -#endif
> -
>  #if __BSD_VISIBLE
>  struct timeval;                                /* select(2) */
>
> @@ -520,11 +510,14 @@ int        feature_present(const char *);
>  int     fchroot(int);
>  char   *fflagstostr(u_long);
>  int     getdomainname(char *, int);
> +int     getentropy(void *, size_t);
>  int     getgrouplist(const char *, gid_t, gid_t *, int *);
>  int     getloginclass(char *, size_t);
>  mode_t  getmode(const void *, mode_t);
>  int     getosreldate(void);
>  int     getpeereid(int, uid_t *, gid_t *);
> +int     getresgid(gid_t *, gid_t *, gid_t *);
> +int     getresuid(uid_t *, uid_t *, uid_t *);
>  char   *getusershell(void);
>  int     initgroups(const char *, gid_t);
>  int     iruserok(unsigned long, int, const char *, const char *);
> @@ -582,6 +575,8 @@ void        *setmode(const char *);
>  int     setpgrp(pid_t, pid_t);                 /* obsoleted by setpgid()
> */
>  void    setproctitle(const char *_fmt, ...) __printf0like(1, 2);
>  void    setproctitle_fast(const char *_fmt, ...) __printf0like(1, 2);
> +int     setresgid(gid_t, gid_t, gid_t);
> +int     setresuid(uid_t, uid_t, uid_t);
>  int     setrgid(gid_t);
>  int     setruid(uid_t);
>  void    setusershell(void);
> @@ -594,6 +589,7 @@ int  undelete(const char *);
>  int     unwhiteout(const char *);
>  void   *valloc(size_t);                        /* obsoleted by malloc() */
>  int     funlinkat(int, const char *, int, int);
> +pid_t   _Fork(void);
>
>  #ifndef _OPTRESET_DECLARED
>  #define        _OPTRESET_DECLARED
> diff --git a/include/wchar.h b/include/wchar.h
> index a8c016c42faf..e4b037c9b16f 100644
> --- a/include/wchar.h
> +++ b/include/wchar.h
> @@ -235,13 +235,10 @@ size_t    wcsnrtombs(char * __restrict, const
> wchar_t ** __restrict, size_t,
>             size_t, mbstate_t * __restrict);
>  #endif
>
> -#if __POSIX_VISIBLE >= 202405
> -size_t wcslcat(wchar_t *, const wchar_t *, size_t);
> -size_t wcslcpy(wchar_t *, const wchar_t *, size_t);
> -#endif
> -
>  #if __BSD_VISIBLE
>  wchar_t        *fgetwln(FILE * __restrict, size_t * __restrict);
> +size_t wcslcat(wchar_t *, const wchar_t *, size_t);
> +size_t wcslcpy(wchar_t *, const wchar_t *, size_t);
>  #endif
>
>  #if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
>