diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-07-31 06:56:29 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-07-31 06:56:29 -0400 |
commit | 02cc38b5eeb613c6139bf03885a806270254b645 (patch) | |
tree | 69b90142f5eaa21d6b47fa13255b2fbb8abc5f8a | |
parent | 7106180777a64421e997bb928d8b639186b9b685 (diff) | |
download | gcc-02cc38b5eeb613c6139bf03885a806270254b645.zip gcc-02cc38b5eeb613c6139bf03885a806270254b645.tar.gz gcc-02cc38b5eeb613c6139bf03885a806270254b645.tar.bz2 |
(my_strerror): New function.
(error_from_errno, perror_with_name): Use it.
From-SVN: r7841
-rw-r--r-- | gcc/cccp.c | 52 |
1 files changed, 43 insertions, 9 deletions
@@ -93,7 +93,6 @@ typedef unsigned char U_CHAR; /* VMS-specific definitions */ #ifdef VMS #include <time.h> -#include <perror.h> /* This defines sys_errlist/sys_nerr properly */ #include <descrip.h> #define O_RDONLY 0 /* Open arg for Read/Only */ #define O_WRONLY 1 /* Open arg for Write/Only */ @@ -186,12 +185,20 @@ extern char *getenv (); extern FILE *fdopen (); extern char *version_string; extern struct tm *localtime (); +#ifndef VMS +#ifndef HAVE_STRERROR extern int sys_nerr; #if defined(bsd4_4) || defined(__NetBSD__) extern const char *const sys_errlist[]; #else extern char *sys_errlist[]; #endif +#else /* HAVE_STERRROR */ +char *strerror (); +#endif +#else /* VMS */ +char *strerror (int,...); +#endif extern int parse_escape (); #ifndef errno @@ -8387,6 +8394,39 @@ change_newlines (start, length) } /* + * my_strerror - return the descriptive text associated with an `errno' code. + */ + +char * +my_strerror (errnum) + int errnum; +{ + char *result; + +#ifndef VMS +#ifndef HAVE_STRERROR + result = (char *) ((errnum < sys_nerr) ? sys_errlist[errnum] : 0); +#else + result = strerror (errnum); +#endif +#else /* VMS */ + /* VAXCRTL's strerror() takes an optional second argument, which only + matters when the first argument is EVMSERR. However, it's simplest + just to pass it unconditionally. `vaxc$errno' is declared in + <errno.h>, and maintained by the library in parallel with `errno'. + We assume that caller's `errnum' either matches the last setting of + `errno' by the library or else does not have the value `EVMSERR'. */ + + result = strerror (errnum, vaxc$errno); +#endif + + if (!result) + result = "undocumented I/O error"; + + return result; +} + +/* * error - print error message and increment count of errors. */ @@ -8433,10 +8473,7 @@ error_from_errno (name) if (ip != NULL) fprintf (stderr, "%s:%d: ", ip->nominal_fname, ip->lineno); - if (errno < sys_nerr) - fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]); - else - fprintf (stderr, "%s: undocumented I/O error\n", name); + fprintf (stderr, "%s: %s\n", name, my_strerror (errno)); errors++; } @@ -9395,10 +9432,7 @@ perror_with_name (name) char *name; { fprintf (stderr, "%s: ", progname); - if (errno < sys_nerr) - fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]); - else - fprintf (stderr, "%s: undocumented I/O error\n", name); + fprintf (stderr, "%s: %s\n", name, my_strerror (errno)); errors++; } |