Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / lib / sh / strerror.c
1 /* strerror.c - string corresponding to a particular value of errno. */
2
3 /* Copyright (C) 1995 Free Software Foundation, Inc.
4
5    This file is part of GNU Bash, the Bourne Again SHell.
6
7    Bash is free software: you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation, either version 3 of the License, or
10    (at your option) any later version.
11
12    Bash is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with Bash.  If not, see <http://www.gnu.org/licenses/>.
19 */
20    
21 #include <config.h>
22
23 #if !defined (HAVE_STRERROR)
24
25 #include <bashtypes.h>
26 #if defined (HAVE_SYS_PARAM_H)
27 #  include <sys/param.h>
28 #endif
29
30 #if defined (HAVE_UNISTD_H)
31 #  include <unistd.h>
32 #endif
33
34 #include <stdio.h>
35 #include <errno.h>
36
37 #include <shell.h>
38
39 #if !defined (errno)
40 extern int errno;
41 #endif /* !errno */
42
43 /* Return a string corresponding to the error number E.  From
44    the ANSI C spec. */
45 #if defined (strerror)
46 #  undef strerror
47 #endif
48
49 static char *errbase = "Unknown system error ";
50
51 char *
52 strerror (e)
53      int e;
54 {
55   static char emsg[40];
56 #if defined (HAVE_SYS_ERRLIST)
57   extern int sys_nerr;
58   extern char *sys_errlist[];
59
60   if (e > 0 && e < sys_nerr)
61     return (sys_errlist[e]);
62   else
63 #endif /* HAVE_SYS_ERRLIST */
64     {
65       char *z;
66
67       z = itos (e);
68       strcpy (emsg, errbase);
69       strcat (emsg, z);
70       free (z);
71       return (&emsg[0]);
72     }
73 }
74 #endif /* HAVE_STRERROR */