This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate with Sarathy.
authorJarkko Hietaniemi <jhi@iki.fi>
Sun, 5 Mar 2000 05:14:40 +0000 (05:14 +0000)
committerJarkko Hietaniemi <jhi@iki.fi>
Sun, 5 Mar 2000 05:14:40 +0000 (05:14 +0000)
p4raw-id: //depot/cfgperl@5535

Configure
config_h.SH
hints/hpux.sh
hints/sco.sh
perl.h
perlapi.c [changed mode: 0644->0755]
perlapi.h [changed mode: 0644->0755]
pod/perl.pod
t/op/filetest.t [changed mode: 0755->0644]
t/op/subst_amp.t [changed mode: 0755->0644]
toke.c

index 5842e8a..f283522 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Fri Mar  3 16:54:03 EET 2000 [metaconfig 3.0 PL70]
+# Generated on Sun Mar  5 02:50:05 EET 2000 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.com)
 
 cat >/tmp/c1$$ <<EOF
@@ -11456,6 +11456,54 @@ eval $inlibc
 set strtoll d_strtoll
 eval $inlibc
 
+case "$d_longlong-$d_strtoll" in
+"$define-$define")
+       $cat <<EOM
+Checking whether your strtoll() works okay...
+EOM
+       $cat >try.c <<'EOCP'
+#include <errno.h>
+#ifdef __hpux
+#define strtoll __strtoll
+#endif
+#include <stdio.h>
+extern long long int strtoll(char *s, char **, int); 
+static int bad = 0;
+int check(char *s, long long ell, int een) {
+       long long gll;
+       errno = 0;
+       gll = strtoll(s, 0, 10);
+       if (!((gll == ell) && (errno == een)))
+               bad++;
+}
+int main() {
+       check(" 1",                                      1LL, 0);
+       check(" 0",                                      0LL, 0);
+       check("-1",                                     -1LL, 0);
+       check("-9223372036854775808", -9223372036854775808LL, 0);
+       check("-9223372036854775808", -9223372036854775808LL, 0);
+       check(" 9223372036854775807",  9223372036854775807LL, 0);
+       check("-9223372036854775808", -9223372036854775808LL, 0);
+       check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
+       check("-9223372036854775809", -9223372036854775808LL, ERANGE);
+       if (!bad)
+               printf("ok\n");
+}
+EOCP
+       set try
+       if eval $compile; then
+               case "`./try`" in
+               ok) echo "Your strtoll() seems to be working okay." ;;
+               *) cat <<EOM >&4
+Your strtoll() doesn't seem to be working okay.
+EOM
+                  d_strtoll="$undef"
+                  ;;
+               esac
+       fi
+       ;;
+esac
+
 : see if strtoul exists
 set strtoul d_strtoul
 eval $inlibc
@@ -11464,6 +11512,49 @@ eval $inlibc
 set strtoull d_strtoull
 eval $inlibc
 
+case "$d_longlong-$d_strtoull" in
+"$define-$define")
+       $cat <<EOM
+Checking whether your strtoull() works okay...
+EOM
+       $cat >try.c <<'EOCP'
+#include <errno.h>
+#ifdef __hpux
+#define strtoull __strtoull
+#endif
+#include <stdio.h>
+extern unsigned long long int strtoull(char *s, char **, int); 
+static int bad = 0;
+int check(char *s, long long eull, int een) {
+       long long gull;
+       errno = 0;
+       gull = strtoull(s, 0, 10);
+       if (!((gull == eull) && (errno == een)))
+               bad++;
+}
+int main() {
+       check(" 1",                                       1LL, 0);
+       check(" 0",                                       0LL, 0);
+       check("18446744073709551615", 18446744073709551615ULL, 0);
+       check("18446744073709551616", 18446744073709551615ULL, ERANGE);
+       if (!bad)
+               printf("ok\n");
+}
+EOCP
+       set try
+       if eval $compile; then
+               case "`./try`" in
+               ok) echo "Your strtoull() seems to be working okay." ;;
+               *) cat <<EOM >&4
+Your strtoull() doesn't seem to be working okay.
+EOM
+                  d_strtoull="$undef"
+                  ;;
+               esac
+       fi
+       ;;
+esac
+
 : see if strtouq exists
 set strtouq d_strtouq
 eval $inlibc
index 40b5b84..30d9186 100644 (file)
@@ -1209,14 +1209,14 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
                /* If you can get stringification with catify, tell me how! */
 #endif
 #if $cpp_stuff == 42
-#  define PeRl_CaTiFy(a,b)     a ## b
+#  define PeRl_CaTiFy(a, b)    a ## b  
 #  define PeRl_StGiFy(a)       #a
-       /* the additional level of indirection enables these macros to be
-        * used as arguments to other macros.  See K&R 2nd ed., page 231. */
-#  define CAT2(a,b)    PeRl_CaTiFy(a,b)
+/* the additional level of indirection enables these macros to be
+ * used as arguments to other macros.  See K&R 2nd ed., page 231. */
+#  define CAT2(a,b)    Perl_CaTiFy(a,b)
+#  define StGiFy(a)    PeRl_StGiFy(a)
 #  define STRINGIFY(a) PeRl_StGiFy(a)
 #endif
-
 #if $cpp_stuff != 1 && $cpp_stuff != 42
 #include "Bletch: How does this C preprocessor catenate tokens?"
 #endif
index bbb91f7..9a0d362 100644 (file)
@@ -140,6 +140,9 @@ else
 fi
 
 # Do this right now instead of the delayed callback unit approach.
+case "$use64bitall" in
+$define|true|[yY]*) use64bitint="$define" ;;
+esac
 case "$use64bitint" in
 $define|true|[yY]*)
     if [ "$xxOsRevMajor" -lt 11 ]; then
@@ -154,12 +157,13 @@ EOM
     fi
 
     # Without the 64-bit libc we cannot do much.
-    if [ ! -f /lib/pa20_64/libc.sl ]; then
+    libc='/lib/pa20_64/libc.sl'
+    if [ ! -f "$libc" ]; then
                cat <<EOM >&4
 
-You do not seem to have the 64-bit libraries in /lib/pa20_64.
-Most importantly, I cannot find /lib/pa20_64/libc.sl.
-Cannot continue, aborting.
+*** You do not seem to have the 64-bit libraries in /lib/pa20_64.
+*** Most importantly, I cannot find the $libc.
+*** Cannot continue, aborting.
 
 EOM
                exit 1
index 1c70a4d..079ab78 100644 (file)
@@ -181,6 +181,13 @@ shift
 libswanted="$*"
 
 ###############################################################
+# Remove libbind because it conflicts with libsocket.
+libswanted=`echo " $libswanted " | sed -e 's/ bind / /'`
+set X $libswanted
+shift
+libswanted="$*"
+
+###############################################################
 # Try to use libintl.a since it has strcoll and strxfrm
 libswanted="intl $libswanted"
 
diff --git a/perl.h b/perl.h
index aeaaa45..d9dcbba 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -3076,6 +3076,9 @@ typedef struct am_table_short AMTS;
 #endif /* !USE_LOCALE_NUMERIC */
 
 #if !defined(Atol) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
+#    ifdef __hpux
+#        define strtoll __strtoll      /* secret handshake */
+#    endif
 #   if !defined(Atol) && defined(HAS_STRTOLL)
 #       define Atol(s) strtoll(s, (char**)NULL, 10)
 #   endif
@@ -3089,6 +3092,9 @@ typedef struct am_table_short AMTS;
 #endif
 
 #if !defined(Strtoul) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
+#    ifdef __hpux
+#        define strtoull __strtoull    /* secret handshake */
+#    endif
 #    if !defined(Strtoul) && defined(HAS_STRTOULL)
 #       define Strtoul strtoull
 #    endif
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 474b416..120dc44 100644 (file)
@@ -229,7 +229,7 @@ platforms are able to build Perl from the standard source code
 distribution available at http://www.perl.com/CPAN/src/index.html
 
        AIX
-       DOS DJGPP 1)
+       DOS DJGPP       1)
        FreeBSD
        HP-UX
        IRIX
@@ -256,10 +256,11 @@ distribution available at http://www.perl.com/CPAN/src/index.html
         3) formerly known as Digital UNIX and before that DEC OSF/1
         4) compilers: Borland, Cygwin, Mingw32 EGCS/GCC, VC++
 
-The following platforms worked for the previous major release (5.005_03
-being the latest maintenance release of that, as of March 2000), but we
-did not manage to test these in time for the 5.6.0 release of Perl.
-There is a very good chance that these will work just fine with 5.6.0.
+The following platforms worked for the previous major release
+(5.005_03 being the latest maintenance release of that, as of early
+March 2000), but be did not manage to test these in time for the 5.6.0
+release of Perl.  There is a very good chance that these will work
+just fine with 5.6.0.
 
        A/UX
        BeOS
@@ -278,9 +279,9 @@ There is a very good chance that these will work just fine with 5.6.0.
        Ultrix
 
 The following platform worked for the previous major release (5.005_03
-being the latest maintenance release of that, as of March 2000).
+being the latest maintenance release of that, as of early March 2000).
 However, standardization on UTF-8 as the internal string representation
-in 5.6.0 has introduced incompatibilities with this EBCDIC platform.
+in 5.6.0 has introduced incompatibilities in this EBCDIC platform.
 Support for this platform may be enabled in a future release:
 
        OS390   1)
@@ -341,7 +342,7 @@ Support for the following platform is planned for a future Perl release:
        Netware
 
 The following platforms have their own source code distributions and
-binaries available via http://www.perl.com/CPAN/ports/index.html :
+binaries available via http://www.perl.com/CPAN/ports/index.html:
 
                                Perl release
 
@@ -350,7 +351,7 @@ binaries available via http://www.perl.com/CPAN/ports/index.html :
        Tandem Guardian         5.004
 
 The following platforms have only binaries available via
-http://www.perl.com/CPAN/ports/index.html :
+http://www.perl.com/CPAN/ports/index.html:
 
                                Perl release
 
@@ -358,6 +359,11 @@ http://www.perl.com/CPAN/ports/index.html :
        AOS                     5.002
        LynxOS                  5.004_02
 
+Although we do suggest that you always build your own Perl from
+the source code, both for maximal configurability and for security,
+in case you are in a hurry you can check
+http://www.perl.com/CPAN/ports/index.html for binary distributions.
+
 =head1 ENVIRONMENT
 
 See L<perlrun>.
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/toke.c b/toke.c
index a7be0a4..194766c 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -6683,7 +6683,13 @@ Perl_scan_num(pTHX_ char *start)
     register char *s = start;          /* current position in buffer */
     register char *d;                  /* destination in temp buffer */
     register char *e;                  /* end of temp buffer */
+    IV tryiv;                          /* used to see if it can be an IV */
     UV tryuv;                          /* used to see if it can be an UV */
+#if ( defined(USE_64_BIT_INT) && \
+       (!defined(HAS_STRTOLL)|| !defined(HAS_STRTOULL))) || \
+    (!defined(USE_64_BIT_INT) && \
+        (!defined(HAS_STRTOL) || !defined(HAS_STRTOUL)))
+#endif
     NV value;                          /* number read, as a double */
     SV *sv = Nullsv;                   /* place to put the converted number */
     bool floatit;                      /* boolean: int or float? */
@@ -6941,6 +6947,16 @@ Perl_scan_num(pTHX_ char *start)
        /* make an sv from the string */
        sv = NEWSV(92,0);
 
+#if ( defined(USE_64_BIT_INT) && \
+       (!defined(HAS_STRTOLL)|| !defined(HAS_STRTOULL))) || \
+    (!defined(USE_64_BIT_INT) && \
+       (!defined(HAS_STRTOL) || !defined(HAS_STRTOUL)))
+
+       /*
+          No working strto[u]l[l]. Since atoi() doesn't do range checks,
+          we need to do this the hard way.
+        */
+
        value = Atof(PL_tokenbuf);
 
        /* 
@@ -6962,12 +6978,57 @@ Perl_scan_num(pTHX_ char *start)
        }
        else
            sv_setnv(sv, value);
+#else
+       /*
+          strtol/strtoll sets errno to ERANGE if the number is too big
+          for an integer. We try to do an integer conversion first
+          if no characters indicating "float" have been found.
+        */
+
+       if (!floatit) {
+           char *tp;
+           IV iv;
+           UV uv;
+           errno = 0;
+#ifdef USE_64_BIT_INT
+           if (*PL_tokenbuf == '-')
+               iv = strtoll(PL_tokenbuf,&tp,10);
+           else
+               uv = strtoull(PL_tokenbuf,&tp,10);
+#else
+           if (*PL_tokenbuf == '-')
+               iv = strtol(PL_tokenbuf,&tp,10);
+           else
+               uv = strtoul(PL_tokenbuf,&tp,10);
+#endif
+           if (*tp || errno)
+               floatit = TRUE; /* probably just too large */
+           else if (*PL_tokenbuf == '-')
+               sv_setiv(sv, iv);
+           else
+               sv_setuv(sv, uv);
+       }
+       if (floatit) {
+           char *tp;
+           errno = 0;
+#ifdef USE_LONG_DOUBLE
+           value = strtold(PL_tokenbuf,&tp);
+#else
+           value = strtod(PL_tokenbuf,&tp);
+#endif
+           if (*tp || errno)
+               Perl_die(aTHX_ "unparseable float");
+           else
+               sv_setnv(sv, value);
+       } 
+#endif
        if ( floatit ? (PL_hints & HINT_NEW_FLOAT) :
                       (PL_hints & HINT_NEW_INTEGER) )
            sv = new_constant(PL_tokenbuf, d - PL_tokenbuf, 
                              (floatit ? "float" : "integer"),
                              sv, Nullsv, NULL);
        break;
+
     /* if it starts with a v, it could be a version number */
     case 'v':
 vstring: