[1/2] libc: Make string.h POSIX.1-2024 compliant

Message ID 20251114220044.1761728-1-simon.barth@gmx.de
State New
Headers
Series [1/2] libc: Make string.h POSIX.1-2024 compliant |

Commit Message

Simon Barth Nov. 14, 2025, 10 p.m. UTC
  POSIX.1-2024 added strlcpy, strlcat, and memmem to strings.h. Previously
these functions were only available as parts of BSD or GNU extensions.

Fix the header so that the symbol are visible for either the right
extensions, or for POSIX.1-2024.
---
 newlib/libc/include/string.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
  

Comments

Joel Sherrill Nov. 17, 2025, 5:28 p.m. UTC | #1
This looks ok to me. Checked against POSIX Issue 8.

--joel

On Fri, Nov 14, 2025 at 4:02 PM Simon Barth <simon.barth@gmx.de> wrote:

> POSIX.1-2024 added strlcpy, strlcat, and memmem to strings.h. Previously
> these functions were only available as parts of BSD or GNU extensions.
>
> Fix the header so that the symbol are visible for either the right
> extensions, or for POSIX.1-2024.
> ---
>  newlib/libc/include/string.h | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/newlib/libc/include/string.h b/newlib/libc/include/string.h
> index 32199c027..3e66ec3dd 100644
> --- a/newlib/libc/include/string.h
> +++ b/newlib/libc/include/string.h
> @@ -68,10 +68,12 @@ void *       memccpy (void *__restrict, const void
> *__restrict, int, size_t);
>  #endif
>  #if __GNU_VISIBLE
>  void *  mempcpy (void *, const void *, size_t);
> -void *  memmem (const void *, size_t, const void *, size_t);
>  void *  memrchr (const void *, int, size_t);
>  void *  rawmemchr (const void *, int);
>  #endif
> +#if __GNU_VISIBLE || __POSIX_VISIBLE >= 202405
> +void *  memmem (const void *, size_t, const void *, size_t);
> +#endif
>  #if __POSIX_VISIBLE >= 200809
>  char   *stpcpy (char *__restrict, const char *__restrict);
>  char   *stpncpy (char *__restrict, const char *__restrict, size_t);
> @@ -111,7 +113,7 @@ int __xpg_strerror_r (int, char *, size_t);
>  /* Reentrant version of strerror.  */
>  char * _strerror_r (struct _reent *, int, int, int *);
>
> -#if __BSD_VISIBLE
> +#if __BSD_VISIBLE || __POSIX_VISIBLE >= 202405L
>  size_t strlcat (char *, const char *, size_t);
>  size_t strlcpy (char *, const char *, size_t);
>  #endif
> --
> 2.51.2
>
>
  

Patch

diff --git a/newlib/libc/include/string.h b/newlib/libc/include/string.h
index 32199c027..3e66ec3dd 100644
--- a/newlib/libc/include/string.h
+++ b/newlib/libc/include/string.h
@@ -68,10 +68,12 @@  void *	 memccpy (void *__restrict, const void *__restrict, int, size_t);
 #endif
 #if __GNU_VISIBLE
 void *	 mempcpy (void *, const void *, size_t);
-void *	 memmem (const void *, size_t, const void *, size_t);
 void *	 memrchr (const void *, int, size_t);
 void *	 rawmemchr (const void *, int);
 #endif
+#if __GNU_VISIBLE || __POSIX_VISIBLE >= 202405
+void *	 memmem (const void *, size_t, const void *, size_t);
+#endif
 #if __POSIX_VISIBLE >= 200809
 char 	*stpcpy (char *__restrict, const char *__restrict);
 char 	*stpncpy (char *__restrict, const char *__restrict, size_t);
@@ -111,7 +113,7 @@  int	__xpg_strerror_r (int, char *, size_t);
 /* Reentrant version of strerror.  */
 char *	_strerror_r (struct _reent *, int, int, int *);
 
-#if __BSD_VISIBLE
+#if __BSD_VISIBLE || __POSIX_VISIBLE >= 202405L
 size_t	strlcat (char *, const char *, size_t);
 size_t	strlcpy (char *, const char *, size_t);
 #endif