X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fstrerror.c;h=7c17f1fbeff8533a0278f5d394a9734fc50dd5f1;hb=7acea197e2d653876ae7113d5538a4544ce60d84;hp=5dba4d975372c429a270e9a5e9aad9ab5b1d92f9;hpb=d3a50fbfd129be1326e8f163ee51f974407c0dbe;p=gnulib.git diff --git a/lib/strerror.c b/lib/strerror.c index 5dba4d975..7c17f1fbe 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]; }