This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Rely on C89 strchr() and strrchr()
authorAaron Crane <arc@cpan.org>
Fri, 13 Oct 2017 08:35:44 +0000 (10:35 +0200)
committerAaron Crane <arc@cpan.org>
Sat, 21 Oct 2017 15:52:47 +0000 (16:52 +0100)
This needs a metaconfig change that defangs the standard unit for finding
strchr(), because that unit sees the uses of "index" and "rindex" (in files
like keywords.c and opcode.h) as indicators that it must be used instead.

14 files changed:
Configure
NetWare/config_H.wc
Porting/Glossary
Porting/config_H
config_h.SH
ext/SDBM_File/dbe.c
ext/SDBM_File/dbu.c
perl.h
plan9/config.plan9
plan9/config_h.sample
uconfig.h
win32/config_H.ce
win32/config_H.gc
win32/config_H.vc

index 6da1268..49c9000 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -856,8 +856,6 @@ stdio_bufsiz=''
 stdio_cnt=''
 stdio_filbuf=''
 stdio_ptr=''
 stdio_cnt=''
 stdio_filbuf=''
 stdio_ptr=''
-d_index=''
-d_strchr=''
 d_strcoll=''
 d_strerrm=''
 d_strerror=''
 d_strcoll=''
 d_strerrm=''
 d_strerror=''
@@ -15776,39 +15774,6 @@ eval $inlibc
 set ilogbl d_ilogbl
 eval $inlibc
 
 set ilogbl d_ilogbl
 eval $inlibc
 
-: index or strchr
-echo " "
-if set index val -f; eval $csym; $val; then
-       if set strchr val -f d_strchr; eval $csym; $val; then
-               if $contains strchr "$strings" >/dev/null 2>&1 ; then
-                       val="$define"
-                       vali="$undef"
-                       echo "strchr() found." >&4
-               else
-                       val="$undef"
-                       vali="$define"
-                       echo "index() found." >&4
-               fi
-       else
-               val="$undef"
-               vali="$define"
-               echo "index() found." >&4
-       fi
-else
-       if set strchr val -f d_strchr; eval $csym; $val; then
-               val="$define"
-               vali="$undef"
-               echo "strchr() found." >&4
-       else
-               echo "No index() or strchr() found!" >&4
-               val="$undef"
-               vali="$undef"
-       fi
-fi
-set d_strchr; eval $setvar
-val="$vali"
-set d_index; eval $setvar
-
 : check whether inet_aton exists
 set inet_aton d_inetaton
 eval $inlibc
 : check whether inet_aton exists
 set inet_aton d_inetaton
 eval $inlibc
@@ -24168,7 +24133,6 @@ d_hypot='$d_hypot'
 d_ilogb='$d_ilogb'
 d_ilogbl='$d_ilogbl'
 d_inc_version_list='$d_inc_version_list'
 d_ilogb='$d_ilogb'
 d_ilogbl='$d_ilogbl'
 d_inc_version_list='$d_inc_version_list'
-d_index='$d_index'
 d_inetaton='$d_inetaton'
 d_inetntop='$d_inetntop'
 d_inetpton='$d_inetpton'
 d_inetaton='$d_inetaton'
 d_inetntop='$d_inetntop'
 d_inetpton='$d_inetpton'
@@ -24416,7 +24380,6 @@ d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
 d_stdio_stream_array='$d_stdio_stream_array'
 d_stdiobase='$d_stdiobase'
 d_stdstdio='$d_stdstdio'
 d_stdio_stream_array='$d_stdio_stream_array'
 d_stdiobase='$d_stdiobase'
 d_stdstdio='$d_stdstdio'
-d_strchr='$d_strchr'
 d_strcoll='$d_strcoll'
 d_strerrm='$d_strerrm'
 d_strerror='$d_strerror'
 d_strcoll='$d_strcoll'
 d_strerrm='$d_strerrm'
 d_strerror='$d_strerror'
index 95a42ce..b113957 100644 (file)
 #define Shmat_t void * /**/
 /*#define HAS_SHMAT_PROTOTYPE  /**/
 
 #define Shmat_t void * /**/
 /*#define HAS_SHMAT_PROTOTYPE  /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#define HAS_STRCHR     /**/
-/*#define HAS_INDEX    /**/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
index 97a5a8c..2bd7a0d 100644 (file)
@@ -1373,10 +1373,6 @@ d_inc_version_list (inc_version_list.U):
        This variable conditionally defines PERL_INC_VERSION_LIST.
        It is set to undef when PERL_INC_VERSION_LIST is empty.
 
        This variable conditionally defines PERL_INC_VERSION_LIST.
        It is set to undef when PERL_INC_VERSION_LIST is empty.
 
-d_index (d_strchr.U):
-       This variable conditionally defines HAS_INDEX if index() and
-       rindex() are available for string searching.
-
 d_inetaton (d_inetaton.U):
        This variable conditionally defines the HAS_INET_ATON symbol, which
        indicates to the C program that the inet_aton() function is available
 d_inetaton (d_inetaton.U):
        This variable conditionally defines the HAS_INET_ATON symbol, which
        indicates to the C program that the inet_aton() function is available
@@ -2552,10 +2548,6 @@ d_stdstdio (d_stdstdio.U):
        has a FILE structure declaring usable _ptr and _cnt fields (or
        equivalent) in stdio.h.
 
        has a FILE structure declaring usable _ptr and _cnt fields (or
        equivalent) in stdio.h.
 
-d_strchr (d_strchr.U):
-       This variable conditionally defines HAS_STRCHR if strchr() and
-       strrchr() are available for string searching.
-
 d_strcoll (d_strcoll.U):
        This variable conditionally defines HAS_STRCOLL if strcoll() is
        available to compare strings using collating information.
 d_strcoll (d_strcoll.U):
        This variable conditionally defines HAS_STRCOLL if strcoll() is
        available to compare strings using collating information.
index b3d74a9..846cd22 100644 (file)
  */
 #define HAS_SETSID     /**/
 
  */
 #define HAS_SETSID     /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#define HAS_STRCHR     /**/
-/*#define HAS_INDEX    / **/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
index bbd4261..35b656f 100755 (executable)
@@ -521,18 +521,6 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_stat HAS_STAT      /**/
 
  */
 #$d_stat HAS_STAT      /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#$d_strchr HAS_STRCHR  /**/
-#$d_index HAS_INDEX    /**/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
index 18ce546..d1e3bd5 100644 (file)
@@ -1,4 +1,5 @@
 #include <stdio.h>
 #include <stdio.h>
+#include <string.h>
 #ifndef VMS
 #include <sys/file.h>
 #include <ndbm.h>
 #ifndef VMS
 #include <sys/file.h>
 #include <ndbm.h>
 
 char *optarg;                         /* Global argument pointer. */
 
 
 char *optarg;                         /* Global argument pointer. */
 
-#ifdef VMS
-#define index  strchr
-#endif
-
 char
 getopt(int argc, char **argv, char *optstring)
 {
        int c;
        char *place;
 char
 getopt(int argc, char **argv, char *optstring)
 {
        int c;
        char *place;
-       extern char *index();
        static int optind = 0;
        static char *scan = NULL;
 
        static int optind = 0;
        static char *scan = NULL;
 
@@ -78,7 +74,7 @@ getopt(int argc, char **argv, char *optstring)
        }
 
        c = *scan++;
        }
 
        c = *scan++;
-       place = index(optstring, c);
+       place = strchr(optstring, c);
        if (place == NULL || c == ':' || c == ';') {
 
                (void) fprintf(stderr, "%s: unknown option %c\n", argv[0], c);
        if (place == NULL || c == ':' || c == ';') {
 
                (void) fprintf(stderr, "%s: unknown option %c\n", argv[0], c);
index 4631d40..ef1963d 100644 (file)
@@ -8,12 +8,7 @@
 #endif
 #include <string.h>
 
 #endif
 #include <string.h>
 
-#ifdef BSD42
-#define strchr index
-#endif
-
 extern int     getopt();
 extern int     getopt();
-extern char    *strchr();
 extern void    oops();
 
 char *progname;
 extern void    oops();
 
 char *progname;
diff --git a/perl.h b/perl.h
index b1e63e2..6f34934 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -975,11 +975,6 @@ EXTERN_C int usleep(unsigned int);
 #define MALLOC_TOO_LATE_FOR(ch)        TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}")
 #define MALLOC_CHECK_TAINT2(argc,argv) MALLOC_CHECK_TAINT(argc,argv,NULL)
 
 #define MALLOC_TOO_LATE_FOR(ch)        TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}")
 #define MALLOC_CHECK_TAINT2(argc,argv) MALLOC_CHECK_TAINT(argc,argv,NULL)
 
-#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
-#define strchr index
-#define strrchr rindex
-#endif
-
 #ifdef I_MEMORY
 #  include <memory.h>
 #endif
 #ifdef I_MEMORY
 #  include <memory.h>
 #endif
@@ -4365,10 +4360,8 @@ double atof (const char*);
 Time_t time();
 struct tm *gmtime(), *localtime();
 #if defined(OEMVS)
 Time_t time();
 struct tm *gmtime(), *localtime();
 #if defined(OEMVS)
-char *(strchr)(), *(strrchr)();
 char *(strcpy)(), *(strcat)();
 #else
 char *(strcpy)(), *(strcat)();
 #else
-char *strchr(), *strrchr();
 char *strcpy(), *strcat();
 #endif
 #endif /* ! STANDARD_C */
 char *strcpy(), *strcat();
 #endif
 #endif /* ! STANDARD_C */
index c9863b6..469094c 100644 (file)
  */
 #define HAS_SETSID     /**/
 
  */
 #define HAS_SETSID     /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#define HAS_STRCHR     /**/
-/*#define HAS_INDEX    / **/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
index ec8bafe..4285449 100644 (file)
  */
 #define HAS_SETSID     /**/
 
  */
 #define HAS_SETSID     /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#define HAS_STRCHR     /**/
-/*#define HAS_INDEX    / **/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
index 1dd837f..770f706 100644 (file)
--- a/uconfig.h
+++ b/uconfig.h
  */
 #define HAS_STAT       /**/
 
  */
 #define HAS_STAT       /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-/*#define HAS_STRCHR   / **/
-/*#define HAS_INDEX    / **/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 #endif
 
 /* Generated from:
 #endif
 
 /* Generated from:
- * a54380e85f5a0f9c6f5793c309854712008ac68f6370e6376c6a90edbecb6a7b config_h.SH
+ * 798105cde7e4037b267cd74a3ebf1895b212f333b5300ebdc1414825b2a210e1 config_h.SH
  * d40282b246b20f1f20a5febcae42b3ac44234c5a1c1a2df89e5ac77a54830cca uconfig.sh
  * ex: set ro: */
  * d40282b246b20f1f20a5febcae42b3ac44234c5a1c1a2df89e5ac77a54830cca uconfig.sh
  * ex: set ro: */
index 4fde9e6..4eeb176 100644 (file)
  */
 /*#define HAS_SETSID   /**/
 
  */
 /*#define HAS_SETSID   /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#define HAS_STRCHR     /**/
-/*#define HAS_INDEX    /**/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
index 7aaf192..7f6a2c5 100644 (file)
  */
 #define HAS_STAT       /**/
 
  */
 #define HAS_STAT       /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#define HAS_STRCHR     /**/
-/*#define HAS_INDEX    / **/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
index 795a6b1..80e486f 100644 (file)
  */
 #define HAS_STAT       /**/
 
  */
 #define HAS_STAT       /**/
 
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#define HAS_STRCHR     /**/
-/*#define HAS_INDEX    / **/
-
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.
 /* HAS_STRCOLL:
  *     This symbol, if defined, indicates that the strcoll routine is
  *     available to compare strings using collating information.