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."
This commit is contained in:
Tim J. Robbins 2002-12-19 09:50:10 +00:00
parent a932a3f4b5
commit a207a8e3f1

View File

@ -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";