summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authortjr <tjr@FreeBSD.org>2002-12-19 09:50:10 +0000
committertjr <tjr@FreeBSD.org>2002-12-19 09:50:10 +0000
commit93b0a6ff838ddcf6424849b3b6f3516ba29e845a (patch)
tree0660e6ab0f351dc3799b487900503a75ef0786f3 /lib
parenta585a3e1d1a16e8dd6bfbe1b7a95b77940fcc20d (diff)
downloadFreeBSD-src-93b0a6ff838ddcf6424849b3b6f3516ba29e845a.zip
FreeBSD-src-93b0a6ff838ddcf6424849b3b6f3516ba29e845a.tar.gz
Use strerror_r() to format the error message so that strerror()'s static
buffer does not get clobbered. ISO/IEC 9899:1999 7.21.6.2 3: "The implementation shall behave as if no library function calls the strerror function."
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/stdio/perror.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/libc/stdio/perror.c b/lib/libc/stdio/perror.c
index 226c189..162d49e 100644
--- a/lib/libc/stdio/perror.c
+++ b/lib/libc/stdio/perror.c
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include <sys/uio.h>
#include <unistd.h>
#include <errno.h>
+#include <limits.h>
#include <stdio.h>
#include <string.h>
#include "un-namespace.h"
@@ -50,6 +51,7 @@ void
perror(s)
const char *s;
{
+ char msgbuf[NL_TEXTMAX];
struct iovec *v;
struct iovec iov[4];
@@ -62,7 +64,8 @@ perror(s)
v->iov_len = 2;
v++;
}
- v->iov_base = strerror(errno);
+ strerror_r(errno, msgbuf, sizeof(msgbuf));
+ v->iov_base = msgbuf;
v->iov_len = strlen(v->iov_base);
v++;
v->iov_base = "\n";
OpenPOWER on IntegriCloud