From 08d9433c45f8d47462db40933f14e32b986202e0 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 31 Jul 2003 07:28:59 +0000 Subject: [PATCH] Include config.h, limits.h. Declare sprintf. (strerror): Don't assume that a printable int fits in 14 bytes. --- lib/strerror.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/lib/strerror.c b/lib/strerror.c index 5dba4d9753..7c17f1fbef 100644 --- a/lib/strerror.c +++ b/lib/strerror.c @@ -1,6 +1,7 @@ /* strerror.c --- ANSI C compatible system error routine - Copyright (C) 1986, 1988, 1989, 1991, 2002 Free Software Foundation, Inc. + Copyright (C) 1986, 1988, 1989, 1991, 2002, 2003 Free Software + Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,22 +17,33 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if 0 -# include +#if HAVE_CONFIG_H +# include #endif +#include + +/* Don't include , since it may or may not declare + sys_errlist and its declarations may collide with ours. Just + declare the stuff that we need directly. Standard hosted C89 + implementations define strerror and they don't need this strerror + function, so take some liberties with the standard to cater to + ancient or limited freestanding implementations. */ +int sprintf (char *, char const *, ...); extern int sys_nerr; extern char *sys_errlist[]; char * -strerror(n) -int n; +strerror (int n) { - static char mesg[30]; - - if (n < 0 || n >= sys_nerr) { - sprintf(mesg, "Unknown error (%d)", n); - return mesg; - } else - return sys_errlist[n]; + static char const fmt[] = "Unknown error (%d)"; + static char mesg[sizeof fmt + sizeof n * CHAR_BIT / 3]; + + if (n < 0 || n >= sys_nerr) + { + sprintf (mesg, fmt, n); + return mesg; + } + else + return sys_errlist[n]; } -- 2.30.2