Module Name: src
Committed By: riastradh
Date: Fri Nov 1 21:11:37 UTC 2024
Modified Files:
src/common/lib/libc/string: strlcat.c strlcpy.c
src/include: string.h
src/sys/lib/libkern: libkern.h
Log Message:
string.h: Fix various symbol visibility issues.
1. Order declarations according to POSIX 2024 to make this easier to
review side-by-side with the spec.
2. Fix visibility of memccpy: XSI-only, not POSIX in general; require
_XOPEN_SOURCE, not just _POSIX_C_SOURCE.
3. Omit redundant _XOPEN_SOURCE test around stpcpy/stpncpy.
4. Hide strdup in POSIX 2001. Not POSIX (without XSI) until 2008.
5. Hide strerror_r until POSIX 2001. Can't find evidence of it in
any earlier POSIX or X/Open. (Not 100% sure on this one, maybe
someone can double-check my research.)
6. Add restrict to strlcat/strlcpy.
7. Omit redundant _XOPEN_SOURCE test around strndup and strnlen.
8. Hide strtok_r until POSIX 2001. Can't find evidence of it in
any earlier POSIX or X/Open. (Not 100% sure on this one, maybe
someone can double-check my research.)
Carry the restrict qualifiers on strlcat/strlcpy to libkern too.
Main reference:
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/string.h.html
PR standards/58804: string.h: wrong visibility for memccpy
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/string/strlcat.c
cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/string/strlcpy.c
cvs rdiff -u -r1.55 -r1.56 src/include/string.h
cvs rdiff -u -r1.146 -r1.147 src/sys/lib/libkern/libkern.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/common/lib/libc/string/strlcat.c
diff -u src/common/lib/libc/string/strlcat.c:1.4 src/common/lib/libc/string/strlcat.c:1.5
--- src/common/lib/libc/string/strlcat.c:1.4 Wed Jan 23 07:57:27 2013
+++ src/common/lib/libc/string/strlcat.c Fri Nov 1 21:11:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: strlcat.c,v 1.4 2013/01/23 07:57:27 matt Exp $ */
+/* $NetBSD: strlcat.c,v 1.5 2024/11/01 21:11:37 riastradh Exp $ */
/* $OpenBSD: strlcat.c,v 1.10 2003/04/12 21:56:39 millert Exp $ */
/*
@@ -24,7 +24,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: strlcat.c,v 1.4 2013/01/23 07:57:27 matt Exp $");
+__RCSID("$NetBSD: strlcat.c,v 1.5 2024/11/01 21:11:37 riastradh Exp $");
#endif /* LIBC_SCCS and not lint */
#ifdef _LIBC
@@ -53,7 +53,7 @@ __weak_alias(strlcat, _strlcat)
* If retval >= siz, truncation occurred.
*/
size_t
-strlcat(char *dst, const char *src, size_t siz)
+strlcat(char *__restrict dst, const char *__restrict src, size_t siz)
{
#if 1
char *d = dst;
Index: src/common/lib/libc/string/strlcpy.c
diff -u src/common/lib/libc/string/strlcpy.c:1.3 src/common/lib/libc/string/strlcpy.c:1.4
--- src/common/lib/libc/string/strlcpy.c:1.3 Mon Jun 4 18:19:27 2007
+++ src/common/lib/libc/string/strlcpy.c Fri Nov 1 21:11:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: strlcpy.c,v 1.3 2007/06/04 18:19:27 christos Exp $ */
+/* $NetBSD: strlcpy.c,v 1.4 2024/11/01 21:11:37 riastradh Exp $ */
/* $OpenBSD: strlcpy.c,v 1.7 2003/04/12 21:56:39 millert Exp $ */
/*
@@ -24,7 +24,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: strlcpy.c,v 1.3 2007/06/04 18:19:27 christos Exp $");
+__RCSID("$NetBSD: strlcpy.c,v 1.4 2024/11/01 21:11:37 riastradh Exp $");
#endif /* LIBC_SCCS and not lint */
#ifdef _LIBC
@@ -51,7 +51,7 @@ __weak_alias(strlcpy, _strlcpy)
* Returns strlen(src); if retval >= siz, truncation occurred.
*/
size_t
-strlcpy(char *dst, const char *src, size_t siz)
+strlcpy(char *__restrict dst, const char *__restrict src, size_t siz)
{
char *d = dst;
const char *s = src;
Index: src/include/string.h
diff -u src/include/string.h:1.55 src/include/string.h:1.56
--- src/include/string.h:1.55 Fri Nov 1 16:36:58 2024
+++ src/include/string.h Fri Nov 1 21:11:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: string.h,v 1.55 2024/11/01 16:36:58 nia Exp $ */
+/* $NetBSD: string.h,v 1.56 2024/11/01 21:11:37 riastradh Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -45,67 +45,85 @@ typedef _BSD_SIZE_T_ size_t;
#include <sys/cdefs.h>
#include <sys/featuretest.h>
+#if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
+# ifndef __LOCALE_T_DECLARED
+typedef struct _locale *locale_t;
+# define __LOCALE_T_DECLARED
+# endif
+#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
+
__BEGIN_DECLS
+#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
+void *memccpy(void *, const void *, int, size_t);
+#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
void *memchr(const void *, int, size_t);
int memcmp(const void *, const void *, size_t);
void *memcpy(void * __restrict, const void * __restrict, size_t);
+#if (_POSIX_C_SOURCE - 0 >= 202405L) || defined(_NETBSD_SOURCE)
+void *memmem(const void *, size_t, const void *, size_t);
+#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
void *memmove(void *, const void *, size_t);
void *memset(void *, int, size_t);
+#if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_NETBSD_SOURCE)
+char *stpcpy(char * __restrict, const char * __restrict);
+char *stpncpy(char * __restrict, const char * __restrict, size_t);
+#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
char *strcat(char * __restrict, const char * __restrict);
char *strchr(const char *, int);
int strcmp(const char *, const char *);
int strcoll(const char *, const char *);
+#if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
+int strcoll_l(const char *, const char *, locale_t);
+#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
char *strcpy(char * __restrict, const char * __restrict);
size_t strcspn(const char *, const char *);
+#if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_XOPEN_SOURCE) || \
+ defined(_NETBSD_SOURCE)
+char *strdup(const char *);
+#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
__aconst char *strerror(int);
+#if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
+__aconst char *strerror_l(int, locale_t);
+#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
+#if (_POSIX_C_SOURCE - 0 >= 200112L) || \
+ defined(_REENTRANT) || defined(_NETBSD_SOURCE)
+int strerror_r(int, char *, size_t);
+#endif /* _POSIX_C_SOURCE || _REENTRANT || _NETBSD_SOURCE */
+#if (_POSIX_C_SOURCE - 0 >= 202405L) || defined(_NETBSD_SOURCE)
+size_t strlcat(char * __restrict, const char * __restrict, size_t);
+size_t strlcpy(char * __restrict, const char * __restrict, size_t);
+#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
size_t strlen(const char *);
char *strncat(char * __restrict, const char * __restrict, size_t);
int strncmp(const char *, const char *, size_t);
char *strncpy(char * __restrict, const char * __restrict, size_t);
-char *strpbrk(const char *, const char *);
-char *strrchr(const char *, int);
-size_t strspn(const char *, const char *);
-char *strstr(const char *, const char *);
-char *strtok(char * __restrict, const char * __restrict);
-#if (_POSIX_C_SOURCE - 0 >= 199506L) || (_XOPEN_SOURCE - 0 >= 500) || \
- defined(_REENTRANT) || defined(_NETBSD_SOURCE)
-char *strtok_r(char *, const char *, char **);
-int strerror_r(int, char *, size_t);
-#endif /* _POSIX_C_SOURCE >= 199506 || XOPEN_SOURCE >= 500 || ... */
-size_t strxfrm(char * __restrict, const char * __restrict, size_t);
-
-#if (_POSIX_C_SOURCE - 0 >= 200112L) || defined(_XOPEN_SOURCE) || \
- defined(_NETBSD_SOURCE)
-void *memccpy(void *, const void *, int, size_t);
-char *strdup(const char *);
-#endif
-
-#if (_POSIX_C_SOURCE - 0 >= 200809L) || (_XOPEN_SOURCE - 0 >= 700) || \
- defined(_NETBSD_SOURCE)
-char *stpcpy(char * __restrict, const char * __restrict);
-char *stpncpy(char * __restrict, const char * __restrict, size_t);
+#if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_NETBSD_SOURCE)
char *strndup(const char *, size_t);
size_t strnlen(const char *, size_t);
+#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
+char *strpbrk(const char *, const char *);
+char *strrchr(const char *, int);
+#if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_NETBSD_SOURCE)
#ifndef __STRSIGNAL_DECLARED
#define __STRSIGNAL_DECLARED
/* also in unistd.h */
__aconst char *strsignal(int);
#endif /* __STRSIGNAL_DECLARED */
#endif
+size_t strspn(const char *, const char *);
+char *strstr(const char *, const char *);
+char *strtok(char * __restrict, const char * __restrict);
+#if (_POSIX_C_SOURCE - 0 >= 200112L) || \
+ defined(_REENTRANT) || defined(_NETBSD_SOURCE)
+char *strtok_r(char *, const char *, char **);
+#endif /* _POSIX_C_SOURCE || _REENTRANT || _NETBSD_SOURCE */
+size_t strxfrm(char * __restrict, const char * __restrict, size_t);
+#if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
+size_t strxfrm_l(char * __restrict, const char * __restrict, size_t,
+ locale_t);
+#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
__END_DECLS
-/*
- * IEEE Std 1003.1-2024 (POSIX.1-2024)
- */
-#if (_POSIX_C_SOURCE - 0) >= 202405L || (_XOPEN_SOURCE - 0 >= 800) || \
- defined(_NETBSD_SOURCE)
-__BEGIN_DECLS
-void *memmem(const void *, size_t, const void *, size_t);
-size_t strlcat(char *, const char *, size_t);
-size_t strlcpy(char *, const char *, size_t);
-__END_DECLS
-#endif
-
#if defined(_NETBSD_SOURCE)
#include <strings.h> /* for backwards-compatibility */
__BEGIN_DECLS
@@ -119,19 +137,7 @@ void *mempcpy(void * __restrict, const v
void *explicit_memset(void *, int, size_t);
int consttime_memequal(const void *, const void *, size_t);
__END_DECLS
-#endif
-
-#if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
-# ifndef __LOCALE_T_DECLARED
-typedef struct _locale *locale_t;
-# define __LOCALE_T_DECLARED
-# endif
-__BEGIN_DECLS
-int strcoll_l(const char *, const char *, locale_t);
-size_t strxfrm_l(char * __restrict, const char * __restrict, size_t, locale_t);
-__aconst char *strerror_l(int, locale_t);
-__END_DECLS
-#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
+#endif /* _NETBSD_SOURCE */
#if _FORTIFY_SOURCE > 0
#include <ssp/string.h>
Index: src/sys/lib/libkern/libkern.h
diff -u src/sys/lib/libkern/libkern.h:1.146 src/sys/lib/libkern/libkern.h:1.147
--- src/sys/lib/libkern/libkern.h:1.146 Wed Oct 9 13:59:09 2024
+++ src/sys/lib/libkern/libkern.h Fri Nov 1 21:11:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: libkern.h,v 1.146 2024/10/09 13:59:09 christos Exp $ */
+/* $NetBSD: libkern.h,v 1.147 2024/11/01 21:11:37 riastradh Exp $ */
/*-
* Copyright (c) 1992, 1993
@@ -458,8 +458,8 @@ void mi_vector_hash(const void * __rest
int scanc(u_int, const u_char *, const u_char *, int);
int skpc(int, size_t, u_char *);
int strcasecmp(const char *, const char *);
-size_t strlcpy(char *, const char *, size_t);
-size_t strlcat(char *, const char *, size_t);
+size_t strlcpy(char * __restrict, const char * __restrict, size_t);
+size_t strlcat(char * __restrict, const char * __restrict, size_t);
int strncasecmp(const char *, const char *, size_t);
u_long strtoul(const char *, char **, int);
long long strtoll(const char *, char **, int);