Add a probe for whether sprintf returns the length of the buffer.
Nicholas Clark [Mon, 24 Oct 2005 20:03:38 +0000 (20:03 +0000)]
Update all the canned config.sh files.
Assume that symbian and Win32 are all ANSI conformant, note that ARM
Linux (ie glibc) will be, don't assume that any other platform is.

p4raw-id: //depot/perl@25831

13 files changed:
Configure
Cross/config.sh-arm-linux
NetWare/config.wc
Porting/Glossary
configure.com
epoc/config.sh
symbian/config.sh
uconfig.sh
win32/config.bc
win32/config.gc
win32/config.vc
win32/config.vc64
wince/config.ce

index b282a16..72028b5 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -775,6 +775,7 @@ d_voidsig=''
 signal_t=''
 d_volatile=''
 d_charvspr=''
+d_sprintf_returns_strlen=''
 d_vprintf=''
 d_wait4=''
 d_waitpid=''
@@ -14185,6 +14186,68 @@ EOCP
 
     esac
 
+: see if sprintf returns the length of the string in the buffer as per ANSI
+$echo "Checking whether sprintf returns the length of the string..." >&4
+$cat <<EOP >try.c
+#include <stdio.h>
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#$i_string I_STRING
+#ifdef I_STRING
+#  include <string.h>
+#else
+#  include <strings.h>
+#endif
+#$i_math I_MATH
+#ifdef I_MATH
+#include <math.h>
+#endif
+
+char buffer[256];
+
+int check (size_t expect, int test) {
+  size_t got = strlen(buffer);
+  if (expect == got)
+    return 0;
+
+  printf("expected %ld, got %ld in test %d '%s'\n", (long) expect, (long) got,
+       test, buffer);
+  exit (test);
+}
+
+int main(int argc, char **argv) {
+  int test = 0;
+
+  check(sprintf(buffer, ""), ++test);
+  check(sprintf(buffer, "%s %s", "perl", "rules"), ++test);
+  check(sprintf(buffer, "I like %g", atan2(0,-1)), ++test);
+
+  return 0;
+}
+EOP
+set try
+
+d_sprintf_returns_strlen="$undef"
+if eval $compile; then
+    xxx="`$run ./try`"
+    case "$?" in
+       0) cat >&4 <<EOM
+sprintf returns the length of the string (as ANSI says it should)
+EOM
+       d_sprintf_returns_strlen="$define"
+       ;;
+       *) cat >&4 <<EOM
+sprintf does not return the length of the string (how old is this system?)
+EOM
+       d_sprintf_returns_strlen="$undef"
+        ;;
+    esac
+fi
+
+$rm -f try.* try
+
 : see if link exists
 set link d_link
 eval $inlibc
@@ -21347,6 +21410,7 @@ d_void_closedir='$d_void_closedir'
 d_voidsig='$d_voidsig'
 d_voidtty='$d_voidtty'
 d_volatile='$d_volatile'
+d_sprintf_returns_strlen='$d_sprintf_returns_strlen'
 d_vprintf='$d_vprintf'
 d_wait4='$d_wait4'
 d_waitpid='$d_waitpid'
index 94accb7..7851022 100644 (file)
@@ -419,6 +419,7 @@ d_socket='define'
 d_socklen_t='define'
 d_sockpair='define'
 d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
 d_sqrtl='define'
 d_srand48_r='undef'
 d_srandom_r='undef'
index 77fe849..b995b30 100644 (file)
@@ -384,6 +384,7 @@ d_sigsetjmp='undef'
 d_socket='define'
 d_socklen_t='undef'
 d_sockpair='undef'
+d_sprintf_returns_strlen='undef'
 d_sqrtl='undef'
 d_srand48_r='undef'
 d_srandom_r='undef'
index 12c7207..9691143 100644 (file)
@@ -1914,6 +1914,12 @@ d_socks5_init (d_socks5_init.U):
        This variable conditionally defines the HAS_SOCKS5_INIT symbol, which
        indicates to the C program that the socks5_init() routine is available.
 
+d_sprintf_returns_strlen (d_sprintf_returns_strlen.U):
+       This variable defines whether sprintf returns the length of the string
+       (as per the ANSI spec). Some C libraries retain compatibility with
+       pre-ANSI C and return a pointer to the passed in buffer; for these
+       this variable will be undef.
+
 d_sqrtl (d_sqrtl.U):
        This variable conditionally defines the HAS_SQRTL symbol, which
        indicates to the C program that the sqrtl() routine is available.
index f415c8e..f9a8469 100644 (file)
@@ -5906,6 +5906,7 @@ $ WC "d_socket='" + d_socket + "'"
 $ WC "d_socklen_t='" + d_socklen_t + "'"
 $ WC "d_sockpair='" + d_sockpair + "'"
 $ WC "d_socks5_init='undef'"
+$ WC "d_sprintf_returns_strlen='undef'"
 $ WC "d_sqrtl='define'"
 $ WC "d_sresgproto='undef'"
 $ WC "d_sresgproto='undef'"
index 489da5b..dfbf8b7 100644 (file)
@@ -926,6 +926,7 @@ u64size='8'
 d_fs_data_s='undef'
 d_fseeko='undef'
 d_ldbl_dig='undef'
+d_sprintf_returns_strlen='undef'
 d_sqrtl='undef'
 d_getmnt='undef'
 d_statfs_f_flags='undef'
index 313bc40..0d12989 100644 (file)
@@ -364,6 +364,7 @@ d_socket='define'
 d_socklen_t='undef'
 d_sockpair='undef'
 d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
 d_sqrtl='undef'
 d_srand48_r='undef'
 d_srandom_r='undef'
index 4ce7ec7..733f06f 100755 (executable)
@@ -352,6 +352,7 @@ d_socket='undef'
 d_socklen_t='undef'
 d_sockpair='undef'
 d_socks5_init='undef'
+d_sprintf_returns_strlen='undef'
 d_sqrtl='undef'
 d_srand48_r='undef'
 d_srandom_r='undef'
index 8e51333..549bedc 100644 (file)
@@ -411,6 +411,7 @@ d_socket='define'
 d_socklen_t='undef'
 d_sockpair='undef'
 d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
 d_sqrtl='undef'
 d_srand48_r='undef'
 d_srandom_r='undef'
index f054ba5..368901c 100644 (file)
@@ -411,6 +411,7 @@ d_socket='define'
 d_socklen_t='undef'
 d_sockpair='undef'
 d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
 d_sqrtl='undef'
 d_srand48_r='undef'
 d_srandom_r='undef'
index c744b26..40b3815 100644 (file)
@@ -411,6 +411,7 @@ d_socket='define'
 d_socklen_t='undef'
 d_sockpair='undef'
 d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
 d_sqrtl='undef'
 d_srand48_r='undef'
 d_srandom_r='undef'
index 2dd40fa..43cef8a 100644 (file)
@@ -411,6 +411,7 @@ d_socket='define'
 d_socklen_t='undef'
 d_sockpair='undef'
 d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
 d_sqrtl='undef'
 d_srand48_r='undef'
 d_srandom_r='undef'
index a20841d..5708091 100644 (file)
@@ -381,6 +381,7 @@ d_sigsetjmp='undef'
 d_socket='define'
 d_socklen_t='undef'
 d_sockpair='undef'
+d_sprintf_returns_strlen='undef'
 d_sqrtl='undef'
 d_srand48_r='undef'
 d_srandom_r='undef'