Rely on C89 strerror()
authorAaron Crane <arc@cpan.org>
Sat, 14 Oct 2017 09:57:51 +0000 (11:57 +0200)
committerAaron Crane <arc@cpan.org>
Sat, 21 Oct 2017 15:53:11 +0000 (16:53 +0100)
This requires a corresponding change to the metaconfig units.

24 files changed:
Configure
Cross/config.sh-arm-linux
Cross/config.sh-arm-linux-n770
NetWare/config.wc
NetWare/config_H.wc
Porting/Glossary
Porting/config.sh
Porting/config_H
config_h.SH
configure.com
perl.h
plan9/config.plan9
plan9/config_h.sample
plan9/config_sh.sample
symbian/config.sh
uconfig.h
uconfig.sh
uconfig64.sh
win32/config.ce
win32/config.gc
win32/config.vc
win32/config_H.ce
win32/config_H.gc
win32/config_H.vc

index 46da540..d0fd0cf 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -856,8 +856,6 @@ stdio_cnt=''
 stdio_filbuf=''
 stdio_ptr=''
 d_strcoll=''
-d_strerrm=''
-d_strerror=''
 d_sysernlst=''
 d_syserrlst=''
 d_strerror_l=''
@@ -18729,45 +18727,6 @@ esac
 set strcoll d_strcoll
 eval $inlibc
 
-: see if strerror and/or sys_errlist[] exist
-echo " "
-if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
-    if set strerror val -f d_strerror; eval $csym; $val; then
-               echo 'strerror() found.' >&4
-               d_strerror="$define"
-               d_strerrm='strerror(e)'
-               if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
-                       echo "(You also have sys_errlist[], so we could roll our own strerror.)"
-                       d_syserrlst="$define"
-               else
-                       echo "(Since you don't have sys_errlist[], strerror() is welcome.)"
-                       d_syserrlst="$undef"
-               fi
-    elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
-                       $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
-               echo 'strerror() found in string header.' >&4
-               d_strerror="$define"
-               d_strerrm='strerror(e)'
-               if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
-                       echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
-                               d_syserrlst="$define"
-               else
-                       echo "(You don't appear to have any sys_errlist[], how can this be?)"
-                       d_syserrlst="$undef"
-               fi
-    elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
-               echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
-               d_strerror="$undef"
-               d_syserrlst="$define"
-               d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
-    else
-               echo 'strerror() and sys_errlist[] NOT found.' >&4
-               d_strerror="$undef"
-               d_syserrlst="$undef"
-               d_strerrm='"unknown"'
-    fi
-fi
-
 : see if strerror_l exists
 set strerror_l d_strerror_l
 eval $inlibc
@@ -19129,6 +19088,18 @@ eval $hasproto
 set sysconf d_sysconf
 eval $inlibc
 
+: see if sys_errlist[] exists
+echo " "
+if test "X$d_syserrlst" = X; then
+       if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+               echo "You have sys_errlist[], so we could roll our own strerror."
+               d_syserrlst="$define"
+       else
+               echo "You don't have sys_errlist[], so strerror() is welcome."
+               d_syserrlst="$undef"
+       fi
+fi
+
 : see if system exists
 set system d_system
 eval $inlibc
@@ -24298,8 +24269,6 @@ d_stdio_stream_array='$d_stdio_stream_array'
 d_stdiobase='$d_stdiobase'
 d_stdstdio='$d_stdstdio'
 d_strcoll='$d_strcoll'
-d_strerrm='$d_strerrm'
-d_strerror='$d_strerror'
 d_strerror_l='$d_strerror_l'
 d_strerror_r='$d_strerror_r'
 d_strftime='$d_strftime'
index 935b64e..c172f93 100644 (file)
@@ -557,8 +557,6 @@ d_stdiobase='define'
 d_stdstdio='define'
 d_strchr='define'
 d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='define'
index 4f135ae..27f2901 100644 (file)
@@ -438,8 +438,6 @@ d_stdiobase='define'
 d_stdstdio='define'
 d_strchr='define'
 d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_r='undef'
 d_strftime='define'
 d_strlcat='undef'
index 35f3d8d..333bb88 100644 (file)
@@ -547,8 +547,6 @@ d_stdiobase='undef'
 d_stdstdio='undef'
 d_strchr='define'
 d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='define'
index 3a4eda6..2949061 100644 (file)
 #define FILE_bufsiz(fp)        ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#define HAS_STRERROR           /**/
 #define HAS_SYS_ERRLIST        /**/
-#define Strerror(e) strerror(e)
 
 /* HAS_STRTOLD:
  *     This symbol, if defined, indicates that the strtold routine is
index 5aaa2bb..27078ed 100644 (file)
@@ -2552,16 +2552,6 @@ d_strcoll (d_strcoll.U):
        This variable conditionally defines HAS_STRCOLL if strcoll() is
        available to compare strings using collating information.
 
-d_strerrm (d_strerror.U):
-       This variable holds what Strerror is defined as to translate an error
-       code condition into an error message string. It could be 'strerror'
-       or a more complex macro emulating strerror with sys_errlist[], or the
-       "unknown" string when both strerror and sys_errlist are missing.
-
-d_strerror (d_strerror.U):
-       This variable conditionally defines HAS_STRERROR if strerror() is
-       available to translate error numbers to strings.
-
 d_strerror_l (d_strerror_l.U):
        This variable conditionally defines the HAS_STRERROR_L symbol, which
        indicates to the C program that the strerror_l() routine is available
index 7f9a7b3..1187213 100644 (file)
@@ -570,8 +570,6 @@ d_stdiobase='define'
 d_stdstdio='define'
 d_strchr='define'
 d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='define'
index 98d23c1..ac4c541 100644 (file)
 #define USE_STAT_BLOCKS        /**/
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#define HAS_STRERROR           /**/
 #define HAS_SYS_ERRLIST        /**/
-#define Strerror(e) strerror(e)
 
 /* HAS_STRTOUL:
  *     This symbol, if defined, indicates that the strtoul routine is
index b1b9c8c..a774644 100755 (executable)
@@ -2012,24 +2012,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
 #$d_statblks USE_STAT_BLOCKS   /**/
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#$d_strerror HAS_STRERROR              /**/
 #$d_syserrlst HAS_SYS_ERRLIST  /**/
-#define Strerror(e) $d_strerrm
 
 /* HAS_STRTOUL:
  *     This symbol, if defined, indicates that the strtoul routine is
index 75ffbd0..137b06d 100644 (file)
@@ -6397,8 +6397,6 @@ $ WC "d_faststdio='" + d_faststdio + "'"
 $ WC "d_statvfs='" + d_statvfs + "'"
 $ WC "d_strchr='define'"
 $ WC "d_strcoll='" + d_strcoll + "'"
-$ WC "d_strerrm='strerror((e),vaxc$errno)'"
-$ WC "d_strerror='define'"
 $ WC "d_strftime='define'"
 $ WC "d_strlcat='undef'"
 $ WC "d_strlcpy='undef'"
diff --git a/perl.h b/perl.h
index 358da90..024b534 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -1028,10 +1028,6 @@ EXTERN_C int usleep(unsigned int);
 #    include <sys/times.h>
 #endif
 
-#if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
-#   undef HAS_STRERROR
-#endif
-
 #include <errno.h>
 
 #if defined(WIN32) && defined(PERL_IMPLICIT_SYS)
@@ -1214,24 +1210,10 @@ EXTERN_C char *crypt(const char *, const char *);
 
 #define UNKNOWN_ERRNO_MSG "(unknown)"
 
-#ifdef HAS_STRERROR
-#   ifndef DONT_DECLARE_STD
-#       ifdef VMS
-       char *strerror (int,...);
-#       else
-       char *strerror (int);
-#       endif
-#    endif
-#    ifndef Strerror
-#       define Strerror strerror
-#    endif
-#elif defined(HAS_SYS_ERRLIST)
-       extern int sys_nerr;
-       extern char *sys_errlist[];
-#       ifndef Strerror
-#           define Strerror(e) \
-               ((e) < 0 || (e) >= sys_nerr ? UNKNOWN_ERRNO_MSG : sys_errlist[e])
-#       endif
+#if VMS
+#define Strerror(e) strerror((e), vaxc$errno)
+#else
+#define Strerror(e) strerror(e)
 #endif
 
 #ifdef I_SYS_IOCTL
index 3ad7cc7..704a96d 100644 (file)
 #define FILE_bufsiz(fp)        ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#define HAS_STRERROR           /**/
 #define HAS_SYS_ERRLIST        /**/
-#define Strerror(e) strerror(e)
 
 /* HAS_STRERROR_R:
  *     This symbol, if defined, indicates that the strerror_r routine
index 0bccc9f..2759f37 100644 (file)
 #define FILE_bufsiz(fp)        ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#define HAS_STRERROR           /**/
 #define HAS_SYS_ERRLIST        /**/
-#define Strerror(e) strerror(e)
 
 /* HAS_STRERROR_R:
  *     This symbol, if defined, indicates that the strerror_r routine
index 0055e3d..2d30cf1 100644 (file)
@@ -557,8 +557,6 @@ d_stdiobase='undef'
 d_stdstdio='undef'
 d_strchr='define'
 d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='define'
index c0976f9..ce2c56e 100644 (file)
@@ -506,8 +506,6 @@ d_stdiobase='undef'
 d_stdstdio='undef'
 d_strchr='define'
 d_strcoll='undef'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='undef'
index 34664a0..09a7f10 100644 (file)
--- a/uconfig.h
+++ b/uconfig.h
 /*#define USE_STAT_BLOCKS      / **/
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-/*#define HAS_STRERROR         / **/
 /*#define HAS_SYS_ERRLIST      / **/
-#define Strerror(e) strerror(e)
 
 /* HAS_STRTOUL:
  *     This symbol, if defined, indicates that the strtoul routine is
 #endif
 
 /* Generated from:
- * e81265de883a5cc39311fc0d3a54c848f4222c64f8b0f805900f87d6cbf1c244 config_h.SH
- * faa4a2944bbf58412d06721da4266607432d610d9d2099beebd9c08eabdea983 uconfig.sh
+ * fde6b587c10bf240fba012827a4814925eb06869ee98bdba652e94b6c77e16e2 config_h.SH
+ * 31e7d5c0dd56393cf400a70fb22e332e63a472cb46a601b3903b54d2ece44df0 uconfig.sh
  * ex: set ro: */
index 7b44d8e..5dde050 100644 (file)
@@ -497,8 +497,6 @@ d_stdiobase='undef'
 d_stdstdio='undef'
 d_strchr='undef'
 d_strcoll='undef'
-d_strerrm='strerror(e)'
-d_strerror='undef'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='undef'
index 6ddb6c9..b36d71e 100644 (file)
@@ -497,8 +497,6 @@ d_stdiobase='undef'
 d_stdstdio='undef'
 d_strchr='undef'
 d_strcoll='undef'
-d_strerrm='strerror(e)'
-d_strerror='undef'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='undef'
index e706b24..c9711a4 100644 (file)
@@ -545,8 +545,6 @@ d_stdiobase='undef'
 d_stdstdio='undef'
 d_strchr='define'
 d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='undef'
index 4681f29..c62ffcf 100644 (file)
@@ -546,8 +546,6 @@ d_stdiobase='define'
 d_stdstdio='define'
 d_strchr='define'
 d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='define'
index efaec8d..0b0148c 100644 (file)
@@ -545,8 +545,6 @@ d_stdiobase='define'
 d_stdstdio='define'
 d_strchr='define'
 d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
 d_strerror_l='undef'
 d_strerror_r='undef'
 d_strftime='define'
index f61e9b4..9a06c82 100644 (file)
 #define FILE_bufsiz(fp)
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#define HAS_STRERROR           /**/
 #define HAS_SYS_ERRLIST        /**/
-#define Strerror(e) strerror(e)
 
 /* HAS_STRERROR_R:
  *     This symbol, if defined, indicates that the strerror_r routine
index e0bfcfd..dd7ea58 100644 (file)
 /*#define USE_STAT_BLOCKS      / **/
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#define HAS_STRERROR           /**/
 #define HAS_SYS_ERRLIST        /**/
-#define Strerror(e) strerror(e)
 
 /* HAS_STRTOUL:
  *     This symbol, if defined, indicates that the strtoul routine is
index 1d1aacd..664dda3 100644 (file)
 /*#define USE_STAT_BLOCKS      / **/
 #endif
 
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
 /* HAS_SYS_ERRLIST:
  *     This symbol, if defined, indicates that the sys_errlist array is
  *     available to translate error numbers to strings. The extern int
  *     sys_nerr gives the size of that table.
  */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#define HAS_STRERROR           /**/
 #define HAS_SYS_ERRLIST        /**/
-#define Strerror(e) strerror(e)
 
 /* HAS_STRTOUL:
  *     This symbol, if defined, indicates that the strtoul routine is