[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] strerror_r: simplify AIX code.
From: |
Eric Blake |
Subject: |
[PATCH] strerror_r: simplify AIX code. |
Date: |
Fri, 20 May 2011 15:20:03 -0600 |
* lib/strerror_r.c (strerror_r): Filter out buflen of 1 up front.
Signed-off-by: Eric Blake <address@hidden>
---
ChangeLog | 3 +++
lib/strerror_r.c | 30 +++++++++---------------------
2 files changed, 12 insertions(+), 21 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 598238f..bda43a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2011-05-20 Eric Blake <address@hidden>
+ strerror_r: simplify AIX code.
+ * lib/strerror_r.c (strerror_r): Filter out buflen of 1 up front.
+
test-perror: avoid spurious failure on FreeBSD
* modules/perror-tests (Depends-on): Add strerror, now that
strerror_r no longer pulls it in.
diff --git a/lib/strerror_r.c b/lib/strerror_r.c
index 30dcd44..2144fc6 100644
--- a/lib/strerror_r.c
+++ b/lib/strerror_r.c
@@ -95,6 +95,15 @@ int
strerror_r (int errnum, char *buf, size_t buflen)
#undef strerror_r
{
+ /* Filter this out now, so that rest of this replacement knows that
+ there is room for a non-empty message and trailing NUL. */
+ if (buflen <= 1)
+ {
+ if (buflen)
+ *buf = 0;
+ return ERANGE;
+ }
+
#if GNULIB_defined_ETXTBSY \
|| GNULIB_defined_ESOCK \
|| GNULIB_defined_ENOMSG \
@@ -492,27 +501,6 @@ strerror_r (int errnum, char *buf, size_t buflen)
ret = strerror_r (errnum, buf, buflen);
# endif
-# ifdef _AIX
- /* On AIX 6.1, strerror_r returns -1 and sets errno to EINVAL
- if buflen <= 1. */
- if (ret < 0 && errno == EINVAL && buflen <= 1)
- {
- /* Retry with a larger buffer. */
- char largerbuf[10];
- ret = strerror_r (errnum, largerbuf, sizeof (largerbuf));
- if (ret < 0 && errno == EINVAL)
- {
- /* errnum was out of range. */
- ret = EINVAL;
- }
- else
- {
- /* buf was too small. */
- ret = ERANGE;
- }
- }
-# endif
-
/* Some old implementations may return (-1, EINVAL) instead of EINVAL. */
if (ret < 0)
ret = errno;
--
1.7.4.4
- [PATCH] strerror_r: simplify AIX code.,
Eric Blake <=