source: branches/libc-0.6/src/binutils/libiberty/xstrerror.c

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 1.8 KB
Line 
1/* xstrerror.c -- jacket routine for more robust strerror() usage.
2 Fri Jun 16 18:30:00 1995 Pat Rankin <rankin@eql.caltech.edu>
3 This code is in the public domain. */
4
5/*
6
7@deftypefn Replacement char* xstrerror (int @var{errnum})
8
9Behaves exactly like the standard @code{strerror} function, but
10will never return a @code{NULL} pointer.
11
12@end deftypefn
13
14*/
15
16#include <stdio.h>
17
18#include "libiberty.h"
19#include "config.h"
20
21#ifdef VMS
22#include <errno.h>
23#if !defined (__STRICT_ANSI__) && !defined (__HIDE_FORBIDDEN_NAMES)
24extern char *strerror PARAMS ((int,...));
25#define DONT_DECLARE_STRERROR
26#endif
27#endif /* VMS */
28
29#ifndef DONT_DECLARE_STRERROR
30extern char *strerror PARAMS ((int));
31#endif
32
33/* If strerror returns NULL, we'll format the number into a static buffer. */
34
35#define ERRSTR_FMT "undocumented error #%d"
36static char xstrerror_buf[sizeof ERRSTR_FMT + 20];
37
38/* Like strerror, but result is never a null pointer. */
39
40char *
41xstrerror (errnum)
42 int errnum;
43{
44 char *errstr;
45#ifdef VMS
46 char *(*vmslib_strerror) PARAMS ((int,...));
47
48 /* Override any possibly-conflicting declaration from system header. */
49 vmslib_strerror = (char *(*) PARAMS ((int,...))) strerror;
50 /* Second argument matters iff first is EVMSERR, but it's simpler to
51 pass it unconditionally. `vaxc$errno' is declared in <errno.h>
52 and maintained by the run-time library in parallel to `errno'.
53 We assume that `errnum' corresponds to the last value assigned to
54 errno by the run-time library, hence vaxc$errno will be relevant. */
55 errstr = (*vmslib_strerror) (errnum, vaxc$errno);
56#else
57 errstr = strerror (errnum);
58#endif
59
60 /* If `errnum' is out of range, result might be NULL. We'll fix that. */
61 if (!errstr)
62 {
63 sprintf (xstrerror_buf, ERRSTR_FMT, errnum);
64 errstr = xstrerror_buf;
65 }
66 return errstr;
67}
Note: See TracBrowser for help on using the repository browser.