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 it under
8   the terms of the GNU General Public License as published by the Free
9   Software Foundation; either version 2, or (at your option) any later
10   version.
11
12   Bash is distributed in the hope that it will be useful, but WITHOUT ANY
13   WARRANTY; without even the implied warranty of MERCHANTABILITY or
14   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15   for more details.
16
17   You should have received a copy of the GNU General Public License along
18   with Bash; see the file COPYING.  If not, write to the Free Software
19   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA */
20
21#include <config.h>
22
23#if !defined (HAVE_STRERROR)
24
25#include <bashtypes.h>
26#ifndef _MINIX
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)
40extern 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
49static char *errbase = "Unknown system error ";
50
51char *
52strerror (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 */
75