summaryrefslogtreecommitdiff
path: root/tests/strerror_r.c
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff.email>2026-03-10 13:24:07 +0100
committerJörg Frings-Fürst <debian@jff.email>2026-03-10 13:24:07 +0100
commitcfd1f17f1a85d95ea12bca8dae42add7dad1ad11 (patch)
tree8016486f8ee7157213f2d09ff2491bfa9c94638a /tests/strerror_r.c
parent14e4d584d0121031ec40e6c35869745f1747ff29 (diff)
parent1403307d6e2fb4e7b5d97a35f40d1e95134561ab (diff)
Merge branch 'release/debian/1.4.2-1'HEADdebian/1.4.2-1master
Diffstat (limited to 'tests/strerror_r.c')
-rw-r--r--tests/strerror_r.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/tests/strerror_r.c b/tests/strerror_r.c
index 87fc1142..ec7bfe6b 100644
--- a/tests/strerror_r.c
+++ b/tests/strerror_r.c
@@ -1,6 +1,6 @@
/* strerror_r.c --- POSIX compatible system error routine
- Copyright (C) 2010-2024 Free Software Foundation, Inc.
+ Copyright (C) 2010-2026 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
@@ -54,7 +54,7 @@ _GL_EXTERN_C int __xpg_strerror_r (int errnum, char *buf, size_t buflen);
strerror_r clobbers strerror. */
# undef strerror
-# if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__
+# if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || (defined __sun && !defined _LP64) || defined __CYGWIN__
/* No locking needed. */
@@ -67,9 +67,8 @@ _GL_EXTERN_C int __xpg_strerror_r (int errnum, char *buf, size_t buflen);
extern "C" {
#endif
-/* Get sys_nerr, sys_errlist on HP-UX (otherwise only declared in C++ mode).
- Get sys_nerr, sys_errlist on IRIX (otherwise only declared with _SGIAPI). */
-# if defined __hpux || defined __sgi
+/* Get sys_nerr, sys_errlist on HP-UX (otherwise only declared in C++ mode). */
+# if defined __hpux
extern int sys_nerr;
extern char *sys_errlist[];
# endif
@@ -104,10 +103,8 @@ static int
local_snprintf (char *buf, size_t buflen, const char *format, ...)
{
va_list args;
- int result;
-
va_start (args, format);
- result = _vsnprintf (buf, buflen, format, args);
+ int result = _vsnprintf (buf, buflen, format, args);
va_end (args);
if (buflen > 0 && (result < 0 || result >= buflen))
buf[buflen - 1] = '\0';
@@ -223,9 +220,8 @@ strerror_r (int errnum, char *buf, size_t buflen)
if (!ret && strlen (buf) == buflen - 1)
{
char stackbuf[STACKBUF_LEN];
- size_t len;
strerror_r (errnum, stackbuf, sizeof stackbuf);
- len = strlen (stackbuf);
+ size_t len = strlen (stackbuf);
/* STACKBUF_LEN should have been large enough. */
if (len + 1 == sizeof stackbuf)
abort ();
@@ -294,7 +290,7 @@ strerror_r (int errnum, char *buf, size_t buflen)
else
ret = EINVAL;
-# elif defined __sgi || (defined __sun && !defined _LP64) /* IRIX, Solaris <= 9 32-bit */
+# elif defined __sun && !defined _LP64 /* Solaris <= 9 32-bit */
/* For a valid error number, the system's strerror() function returns
a pointer to a not copied string, not to a buffer. */
@@ -317,10 +313,9 @@ strerror_r (int errnum, char *buf, size_t buflen)
{
char *errmsg = strerror (errnum);
- /* For invalid error numbers, strerror() on
- - IRIX 6.5 returns NULL,
- - HP-UX 11 returns an empty string. */
- if (errmsg == NULL || *errmsg == '\0')
+ /* For invalid error numbers, strerror() on HP-UX 11 returns an empty
+ string. */
+ if (*errmsg == '\0')
ret = EINVAL;
else
ret = safe_copy (buf, buflen, errmsg);
@@ -443,12 +438,20 @@ strerror_r (int errnum, char *buf, size_t buflen)
if (ret == EINVAL && !*buf)
{
+ /* gcc 14 produces a
+ "warning: 'Unknown error ' directive output truncated
+ writing 14 bytes into a region of size 2"
+ Thanks for the warning, but here the truncation is intentional. */
+#if _GL_GNUC_PREREQ (7, 1)
+# pragma GCC diagnostic ignored "-Wformat-truncation"
+#endif
#if defined __HAIKU__
/* For consistency with perror(). */
snprintf (buf, buflen, "Unknown Application Error (%d)", errnum);
#else
snprintf (buf, buflen, "Unknown error %d", errnum);
#endif
+ buf[buflen - 1] = '\0';
}
errno = saved_errno;