diff options
author | tjr <tjr@FreeBSD.org> | 2002-12-19 09:50:10 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2002-12-19 09:50:10 +0000 |
commit | 93b0a6ff838ddcf6424849b3b6f3516ba29e845a (patch) | |
tree | 0660e6ab0f351dc3799b487900503a75ef0786f3 /lib/libc/stdio/perror.c | |
parent | a585a3e1d1a16e8dd6bfbe1b7a95b77940fcc20d (diff) | |
download | FreeBSD-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/libc/stdio/perror.c')
-rw-r--r-- | lib/libc/stdio/perror.c | 5 |
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"; |