Mercurial > hg > octave-nkf > gnulib-hg
changeset 4487:e9cc723f9777
Include config.h, limits.h. Declare sprintf.
(strerror): Don't assume that a printable int fits in 14 bytes.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Thu, 31 Jul 2003 07:28:59 +0000 |
parents | 3e3bafce6d9f |
children | 732c51f6278f |
files | lib/strerror.c |
diffstat | 1 files changed, 23 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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 <stdio.h> +#if HAVE_CONFIG_H +# include <config.h> #endif +#include <limits.h> + +/* Don't include <stdio.h>, 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]; + 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, "Unknown error (%d)", n); - return mesg; - } else - return sys_errlist[n]; + if (n < 0 || n >= sys_nerr) + { + sprintf (mesg, fmt, n); + return mesg; + } + else + return sys_errlist[n]; }