summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcvs2hg <devnull@localhost>2007-11-07 22:25:26 +0000
committercvs2hg <devnull@localhost>2007-11-07 22:25:26 +0000
commit1a4cb6018996f2e004ad31e415d3bd5d5234fc8d (patch)
tree5d15212a7a9d7ba155977a7b79901209679b4f25
parent5813276c3e2c1796bcb3a72277e9190fa7f1f16a (diff)
downloadnspr-hg-GECKO181_20090605_RELBRANCH.tar.gz
fixup commit for branch 'GECKO181_20090605_RELBRANCH'GECKO181_20090605_RELBRANCH
-rw-r--r--Makefile.in1
-rwxr-xr-xadmin/repackage.sh52
-rw-r--r--config/autoconf.mk.in8
-rw-r--r--config/rules.mk1
-rwxr-xr-xconfigure396
-rw-r--r--configure.in309
-rw-r--r--lib/ds/Makefile.in5
-rw-r--r--lib/libc/src/Makefile.in5
-rw-r--r--lib/msgc/src/Makefile.in5
-rw-r--r--lib/prstreams/Makefile.in1
-rw-r--r--pkg/linux/Makefile.in6
-rwxr-xr-xpkg/solaris/SUNWprd/prototype1
-rw-r--r--pr/include/md/_beos.cfg63
-rw-r--r--pr/include/md/_darwin.cfg1
-rw-r--r--pr/include/md/_darwin.h19
-rw-r--r--pr/include/md/_hpux.h46
-rw-r--r--pr/include/md/_netbsd.h179
-rw-r--r--pr/include/md/_openvms.h1
-rw-r--r--pr/include/md/_pth.h7
-rw-r--r--pr/include/md/_win95.h5
-rw-r--r--pr/include/md/_winnt.h1
-rw-r--r--pr/include/obsolete/probslet.h9
-rw-r--r--pr/include/obsolete/protypes.h2
-rw-r--r--pr/include/prinet.h4
-rw-r--r--pr/include/prinit.h6
-rw-r--r--pr/include/private/primpl.h12
-rw-r--r--pr/include/prlink.h13
-rw-r--r--pr/include/prsystem.h7
-rw-r--r--pr/include/prtypes.h9
-rw-r--r--pr/src/Makefile.in9
-rw-r--r--pr/src/io/prfdcach.c8
-rw-r--r--pr/src/io/prfile.c11
-rw-r--r--pr/src/io/prlog.c8
-rw-r--r--pr/src/io/prprf.c19
-rw-r--r--pr/src/io/prsocket.c19
-rw-r--r--pr/src/linking/Makefile.in7
-rw-r--r--pr/src/linking/prlink.c298
-rw-r--r--pr/src/md/beos/bfile.c63
-rw-r--r--pr/src/md/beos/brng.c63
-rw-r--r--pr/src/md/os2/os2thred.c6
-rw-r--r--pr/src/md/unix/os_Darwin_x86.s105
-rw-r--r--pr/src/md/unix/os_HPUX_ia64.s108
-rw-r--r--pr/src/md/unix/unix.c63
-rw-r--r--pr/src/md/unix/unix_errors.c16
-rw-r--r--pr/src/md/windows/ntinrval.c68
-rw-r--r--pr/src/md/windows/ntio.c68
-rw-r--r--pr/src/md/windows/w95io.c99
-rw-r--r--pr/src/md/windows/w95sock.c112
-rw-r--r--pr/src/md/windows/w95thred.c2
-rw-r--r--pr/src/md/windows/win32_errors.c3
-rw-r--r--pr/src/misc/pratom.c2
-rw-r--r--pr/src/misc/prdtoa.c2
-rw-r--r--pr/src/misc/prinit.c2
-rw-r--r--pr/src/misc/prnetdb.c5
-rw-r--r--pr/src/misc/prsystem.c24
-rw-r--r--pr/src/misc/prtime.c162
-rw-r--r--pr/src/misc/prtrace.c16
-rw-r--r--pr/src/pthreads/Makefile.in5
-rw-r--r--pr/src/pthreads/ptio.c25
-rw-r--r--pr/src/pthreads/ptthread.c1
-rw-r--r--pr/tests/dll/Makefile.in5
-rw-r--r--pr/tests/testfile.c63
-rw-r--r--pr/tests/timetest.c128
-rw-r--r--pr/tests/tmocon.c63
-rw-r--r--pr/tests/vercheck.c12
65 files changed, 1840 insertions, 1004 deletions
diff --git a/Makefile.in b/Makefile.in
index 9273b16d..42f07dd7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -85,6 +85,7 @@ distclean::
@echo "cd pr/tests; $(MAKE) $@"
@$(MAKE) -C pr/tests $@
rm -f config/autoconf.mk
+ rm -f `cat unallmakefiles` unallmakefiles
release::
echo $(BUILD_NUMBER) > $(RELEASE_DIR)/$(BUILD_NUMBER)/version.df
diff --git a/admin/repackage.sh b/admin/repackage.sh
index fcdce44f..0a1c3734 100755
--- a/admin/repackage.sh
+++ b/admin/repackage.sh
@@ -64,36 +64,32 @@
#
# ------------------------------------------------------------------
-FROMTOP=/share/builds/components/nspr20/v4.6.1
-TOTOP=./v4.6.1
-NSPRDIR=nspr-4.6.1
-SOURCETAG=NSPR_4_6_1_RTM
+FROMTOP=/share/builds/components/nspr20/v4.6.8
+TOTOP=./v4.6.8
+NSPRDIR=nspr-4.6.8
+SOURCETAG=NSPR_4_6_8_RTM
#
# enumerate Unix object directories on /s/b/c
UNIX_OBJDIRS="
-AIX4.3_64_DBG.OBJ
-AIX4.3_64_OPT.OBJ
-AIX4.3_DBG.OBJ
-AIX4.3_OPT.OBJ
-HP-UXB.11.00_64_DBG.OBJ
-HP-UXB.11.00_64_OPT.OBJ
-HP-UXB.11.00_DBG.OBJ
-HP-UXB.11.00_OPT.OBJ
-IRIX6.5_n32_PTH_DBG.OBJ
-IRIX6.5_n32_PTH_OPT.OBJ
-Linux2.2_x86_glibc_PTH_DBG.OBJ
-Linux2.2_x86_glibc_PTH_OPT.OBJ
+HP-UXB.11.11_64_DBG.OBJ
+HP-UXB.11.11_64_OPT.OBJ
+HP-UXB.11.11_DBG.OBJ
+HP-UXB.11.11_OPT.OBJ
+HP-UXB.11.23_ia64_32_DBG.OBJ
+HP-UXB.11.23_ia64_32_OPT.OBJ
+HP-UXB.11.23_ia64_64_DBG.OBJ
+HP-UXB.11.23_ia64_64_OPT.OBJ
Linux2.4_x86_glibc_PTH_DBG.OBJ
Linux2.4_x86_glibc_PTH_OPT.OBJ
-OSF1V5.0_DBG.OBJ
-OSF1V5.0_OPT.OBJ
-SunOS5.6_DBG.OBJ
-SunOS5.6_OPT.OBJ
-SunOS5.8_64_DBG.OBJ
-SunOS5.8_64_OPT.OBJ
-SunOS5.8_DBG.OBJ
-SunOS5.8_OPT.OBJ
+Linux2.6_x86_64_glibc_PTH_DBG.OBJ
+Linux2.6_x86_64_glibc_PTH_OPT.OBJ
+Linux2.6_x86_glibc_PTH_DBG.OBJ
+Linux2.6_x86_glibc_PTH_OPT.OBJ
+SunOS5.9_64_DBG.OBJ
+SunOS5.9_64_OPT.OBJ
+SunOS5.9_DBG.OBJ
+SunOS5.9_OPT.OBJ
"
#
# enumerate Windows object directories on /s/b/c
@@ -101,9 +97,9 @@ WIN_OBJDIRS="
WIN954.0_DBG.OBJ
WIN954.0_DBG.OBJD
WIN954.0_OPT.OBJ
-WINNT4.0_DBG.OBJ
-WINNT4.0_DBG.OBJD
-WINNT4.0_OPT.OBJ
+WINNT5.0_DBG.OBJ
+WINNT5.0_DBG.OBJD
+WINNT5.0_OPT.OBJ
"
#
@@ -183,7 +179,7 @@ for OBJDIR in $WIN_OBJDIRS; do
cp -r $FROMTOP/$OBJDIR/bin $NSPRDIR
echo "creating directory $TOTOP/$OBJDIR"
- mkdir $TOTOP/$OBJDIR
+ mkdir -p $TOTOP/$OBJDIR
echo "creating $TOTOP/$OBJDIR/$NSPRDIR.zip"
zip -r $TOTOP/$OBJDIR/$NSPRDIR.zip $NSPRDIR
done
diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in
index a01a8e55..a90cb28f 100644
--- a/config/autoconf.mk.in
+++ b/config/autoconf.mk.in
@@ -88,6 +88,7 @@ RESOLVE_LINK_SYMBOLS = @RESOLVE_LINK_SYMBOLS@
HOST_CC = @HOST_CC@
HOST_CFLAGS = @HOST_CFLAGS@
+HOST_LDFLAGS = @HOST_LDFLAGS@
DEFINES = @DEFINES@ @DEFS@
@@ -119,3 +120,10 @@ MACOSX_DEPLOYMENT_TARGET = @MACOSX_DEPLOYMENT_TARGET@
ifdef MACOSX_DEPLOYMENT_TARGET
export MACOSX_DEPLOYMENT_TARGET
endif
+
+MACOS_SDK_DIR = @MACOS_SDK_DIR@
+
+NEXT_ROOT = @NEXT_ROOT@
+ifdef NEXT_ROOT
+export NEXT_ROOT
+endif
diff --git a/config/rules.mk b/config/rules.mk
index 492e0aeb..7dadc206 100644
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -87,6 +87,7 @@ CC=$(HOST_CC)
CCC=$(HOST_CXX)
CFLAGS=$(HOST_CFLAGS)
CXXFLAGS=$(HOST_CXXFLAGS)
+LDFLAGS=$(HOST_LDFLAGS)
endif
endif
endif
diff --git a/configure b/configure
index c15d109d..19353fa9 100755
--- a/configure
+++ b/configure
@@ -40,9 +40,11 @@ ac_help="$ac_help
ac_help="$ac_help
--enable-mdupdate Enable use of certain compilers' mdupdate feature"
ac_help="$ac_help
+ --with-macos-sdk=dir Location of platform SDK to use (Mac OS X only)"
+ac_help="$ac_help
--enable-macos-target=VER
Set the minimum MacOS version needed at runtime
- [10.1 for ppc, 10.4 for x86]"
+ [10.2 for ppc, 10.4 for x86]"
ac_help="$ac_help
--enable-strip Enable stripping of shared libs and programs"
ac_help="$ac_help
@@ -621,7 +623,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:625: checking host system type" >&5
+echo "configure:627: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -642,7 +644,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:646: checking target system type" >&5
+echo "configure:648: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@@ -660,7 +662,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:664: checking build system type" >&5
+echo "configure:666: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -685,7 +687,7 @@ test "$host_alias" != "$target_alias" &&
MOD_MAJOR_VERSION=4
MOD_MINOR_VERSION=6
-MOD_PATCH_VERSION=1
+MOD_PATCH_VERSION=8
NSPR_MODNAME=nspr20
_HAVE_PTHREADS=
USE_PTHREADS=
@@ -709,6 +711,8 @@ NOSUCHFILE=/no-such-file
LIBNSPR='-L$(dist_libdir) -lnspr$(MOD_MAJOR_VERSION)'
LIBPLC='-L$(dist_libdir) -lplc$(MOD_MAJOR_VERSION)'
CYGWIN_WRAPPER=
+MACOS_SDK_DIR=
+NEXT_ROOT=
RESOLVE_LINK_SYMBOLS=
@@ -727,7 +731,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:731: checking for $ac_word" >&5
+echo "configure:735: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -923,6 +927,13 @@ if test "${enable_mdupdate+set}" = set; then
fi
+# Check whether --with-macos-sdk or --without-macos-sdk was given.
+if test "${with_macos_sdk+set}" = set; then
+ withval="$with_macos_sdk"
+ MACOS_SDK_DIR=$withval
+fi
+
+
# Check whether --enable-macos-target or --disable-macos-target was given.
if test "${enable_macos_target+set}" = set; then
enableval="$enable_macos_target"
@@ -1027,7 +1038,7 @@ if test -z "$SKIP_PATH_CHECKS"; then
# Extract the first word of "$WHOAMI whoami", so it can be a program name with args.
set dummy $WHOAMI whoami; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1031: checking for $ac_word" >&5
+echo "configure:1042: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_WHOAMI'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1098,13 +1109,13 @@ if test "$target" != "$host"; then
_SAVE_LDFLAGS="$LDFLAGS"
echo $ac_n "checking for $host compiler""... $ac_c" 1>&6
-echo "configure:1102: checking for $host compiler" >&5
+echo "configure:1113: checking for $host compiler" >&5
for ac_prog in $HOST_CC gcc cc /usr/ucb/cc
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1108: checking for $ac_word" >&5
+echo "configure:1119: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_HOST_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1150,16 +1161,16 @@ test -n "$HOST_CC" || HOST_CC=""""
LDFLAGS="$HOST_LDFLAGS"
echo $ac_n "checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1154: checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5
+echo "configure:1165: checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5
cat > conftest.$ac_ext <<EOF
-#line 1156 "configure"
+#line 1167 "configure"
#include "confdefs.h"
int main() {
return(0);
; return 0; }
EOF
-if { (eval echo configure:1163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1174: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_prog_host_cc_works=1 echo "$ac_t""yes" 1>&6
else
@@ -1174,12 +1185,21 @@ rm -f conftest*
CFLAGS=$_SAVE_CFLAGS
LDFLAGS=$_SAVE_LDFLAGS
+ case "$build:$target" in
+ powerpc-apple-darwin8*:i?86-apple-darwin*)
+ _SAVE_CFLAGS=$CFLAGS
+ _SAVE_CXXFLAGS=$CXXLAGS
+ CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk $CFLAGS"
+ CXXFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk $CXXFLAGS"
+ ;;
+ esac
+
for ac_prog in $CC "${target_alias}-gcc" "${target}-gcc"
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1183: checking for $ac_word" >&5
+echo "configure:1203: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1213,7 +1233,7 @@ test -n "$CC" || CC="echo"
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1217: checking for $ac_word" >&5
+echo "configure:1237: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1243,7 +1263,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1247: checking for $ac_word" >&5
+echo "configure:1267: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1294,7 +1314,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1298: checking for $ac_word" >&5
+echo "configure:1318: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1326,7 +1346,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1330: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1350: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1337,12 +1357,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 1341 "configure"
+#line 1361 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1368,12 +1388,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1372: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1392: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1377: checking whether we are using GNU C" >&5
+echo "configure:1397: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1382,7 +1402,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1386: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1406: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -1401,7 +1421,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1405: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1425: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1437,7 +1457,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1441: checking for $ac_word" >&5
+echo "configure:1461: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1473,7 +1493,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1477: checking for $ac_word" >&5
+echo "configure:1497: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1505,7 +1525,7 @@ test -n "$CXX" || CXX="gcc"
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1509: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1529: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1516,12 +1536,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext << EOF
-#line 1520 "configure"
+#line 1540 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
-if { (eval echo configure:1525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cxx_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1547,12 +1567,12 @@ if test $ac_cv_prog_cxx_works = no; then
{ echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1551: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1571: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1556: checking whether we are using GNU C++" >&5
+echo "configure:1576: checking whether we are using GNU C++" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1561,7 +1581,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1565: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1585: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gxx=yes
else
ac_cv_prog_gxx=no
@@ -1580,7 +1600,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS=
echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1584: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1604: checking whether ${CXX-g++} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1611,12 +1631,20 @@ else
fi
fi
+
+ case "$build:$target" in
+ powerpc-apple-darwin8*:i?86-apple-darwin*)
+ CFLAGS=$_SAVE_CFLAGS
+ CXXFLAGS=$_SAVE_CXXFLAGS
+ ;;
+ esac
+
for ac_prog in $RANLIB "${target_alias}-ranlib" "${target}-ranlib"
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1620: checking for $ac_word" >&5
+echo "configure:1648: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1651,7 +1679,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1655: checking for $ac_word" >&5
+echo "configure:1683: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1686,7 +1714,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1690: checking for $ac_word" >&5
+echo "configure:1718: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1721,7 +1749,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1725: checking for $ac_word" >&5
+echo "configure:1753: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1756,7 +1784,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1760: checking for $ac_word" >&5
+echo "configure:1788: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1791,7 +1819,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1795: checking for $ac_word" >&5
+echo "configure:1823: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1828,7 +1856,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1832: checking for $ac_word" >&5
+echo "configure:1860: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1860,7 +1888,7 @@ test -n "$CXX" || CXX="gcc"
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1864: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1892: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1871,12 +1899,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext << EOF
-#line 1875 "configure"
+#line 1903 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
-if { (eval echo configure:1880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cxx_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1902,12 +1930,12 @@ if test $ac_cv_prog_cxx_works = no; then
{ echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1906: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1934: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1911: checking whether we are using GNU C++" >&5
+echo "configure:1939: checking whether we are using GNU C++" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1916,7 +1944,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1920: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1948: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gxx=yes
else
ac_cv_prog_gxx=no
@@ -1935,7 +1963,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS=
echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1939: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1967: checking whether ${CXX-g++} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1972,7 +2000,7 @@ fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1976: checking for $ac_word" >&5
+echo "configure:2004: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2002,7 +2030,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2006: checking for $ac_word" >&5
+echo "configure:2034: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2053,7 +2081,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2057: checking for $ac_word" >&5
+echo "configure:2085: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2085,7 +2113,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2089: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2117: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -2096,12 +2124,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 2100 "configure"
+#line 2128 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:2105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -2127,12 +2155,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2131: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2159: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:2136: checking whether we are using GNU C" >&5
+echo "configure:2164: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2141,7 +2169,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2173: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -2160,7 +2188,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2164: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2192: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2193,7 +2221,7 @@ fi
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2197: checking how to run the C preprocessor" >&5
+echo "configure:2225: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -2208,13 +2236,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 2212 "configure"
+#line 2240 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2246: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2225,13 +2253,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 2229 "configure"
+#line 2257 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2263: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2242,13 +2270,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 2246 "configure"
+#line 2274 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2275,7 +2303,7 @@ echo "$ac_t""$CPP" 1>&6
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2279: checking for $ac_word" >&5
+echo "configure:2307: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2307,7 +2335,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2311: checking for $ac_word" >&5
+echo "configure:2339: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2348,7 +2376,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2352: checking for $ac_word" >&5
+echo "configure:2380: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2389,7 +2417,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2393: checking for $ac_word" >&5
+echo "configure:2421: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2430,7 +2458,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2434: checking for $ac_word" >&5
+echo "configure:2462: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2471,7 +2499,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2475: checking for $ac_word" >&5
+echo "configure:2503: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2526,6 +2554,12 @@ if test "`echo | $AS -v 2>&1 | grep -c GNU`" != "0"; then
fi
rm -f a.out
+case "$build:$target" in
+ i?86-apple-darwin*:powerpc-apple-darwin*)
+ cross_compiling=yes
+ ;;
+esac
+
if test "$cross_compiling" = "yes"; then
CROSS_COMPILE=1
else
@@ -2533,7 +2567,7 @@ else
fi
echo $ac_n "checking for gcc -pipe support""... $ac_c" 1>&6
-echo "configure:2537: checking for gcc -pipe support" >&5
+echo "configure:2571: checking for gcc -pipe support" >&5
if test -n "$GNU_CC" && test -n "$GNU_CXX" && test -n "$GNU_AS"; then
echo '#include <stdio.h>' > dummy-hello.c
echo 'int main() { printf("Hello World\n"); return 0; }' >> dummy-hello.c
@@ -2548,14 +2582,14 @@ if test -n "$GNU_CC" && test -n "$GNU_CXX" && test -n "$GNU_AS"; then
_SAVE_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -pipe"
cat > conftest.$ac_ext <<EOF
-#line 2552 "configure"
+#line 2586 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
printf("Hello World\n");
; return 0; }
EOF
-if { (eval echo configure:2559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
_res_gcc_pipe="yes"
else
@@ -2582,7 +2616,7 @@ fi
if test "$GNU_CC"; then
echo $ac_n "checking for visibility(hidden) attribute""... $ac_c" 1>&6
-echo "configure:2586: checking for visibility(hidden) attribute" >&5
+echo "configure:2620: checking for visibility(hidden) attribute" >&5
if eval "test \"`echo '$''{'ac_cv_visibility_hidden'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2606,7 +2640,7 @@ echo "$ac_t""$ac_cv_visibility_hidden" 1>&6
EOF
echo $ac_n "checking for visibility pragma support""... $ac_c" 1>&6
-echo "configure:2610: checking for visibility pragma support" >&5
+echo "configure:2644: checking for visibility pragma support" >&5
if eval "test \"`echo '$''{'ac_cv_visibility_pragma'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2659,7 +2693,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2663: checking for $ac_word" >&5
+echo "configure:2697: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2719,6 +2753,7 @@ if test -n "$CROSS_COMPILE"; then
linux*) OS_ARCH=Linux ;;
solaris*) OS_ARCH=SunOS OS_RELEASE=5 ;;
mingw*) OS_ARCH=WINNT ;;
+ darwin*) OS_ARCH=Darwin ;;
esac
else
OS_ARCH=`uname -s | sed -e 's|/|_|g'`
@@ -2905,17 +2940,17 @@ EOF
DSO_LDOPTS='-brtl -bnortllib -bM:SRE -bnoentry -bexpall -blibpath:/usr/lib:/lib'
ac_safe=`echo "sys/atomic_op.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/atomic_op.h""... $ac_c" 1>&6
-echo "configure:2909: checking for sys/atomic_op.h" >&5
+echo "configure:2944: checking for sys/atomic_op.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2914 "configure"
+#line 2949 "configure"
#include "confdefs.h"
#include <sys/atomic_op.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2954: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3072,7 +3107,7 @@ EOF
_DEBUG_FLAGS='-gdwarf-2 -O0'
MKSHLIB='$(CCC) $(DSO_LDOPTS) -o $@'
echo $ac_n "checking for gethostbyaddr in -lbind""... $ac_c" 1>&6
-echo "configure:3076: checking for gethostbyaddr in -lbind" >&5
+echo "configure:3111: checking for gethostbyaddr in -lbind" >&5
ac_lib_var=`echo bind'_'gethostbyaddr | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3080,7 +3115,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lbind $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3084 "configure"
+#line 3119 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3091,7 +3126,7 @@ int main() {
gethostbyaddr()
; return 0; }
EOF
-if { (eval echo configure:3095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3272,32 +3307,34 @@ EOF
EOF
CFLAGS="$CFLAGS -Wmost -fno-common"
- if echo $OS_TEST | grep -c 86 2>/dev/null; then
- cat >> confdefs.h <<\EOF
+ case "${target_cpu}" in
+ i*86*)
+ cat >> confdefs.h <<\EOF
#define i386 1
EOF
- CPU_ARCH=i386
- else
- cat >> confdefs.h <<\EOF
+ CPU_ARCH=i386
+ PR_MD_ASFILES=os_Darwin_x86.s
+ ;;
+ *)
+ cat >> confdefs.h <<\EOF
#define ppc 1
EOF
- CPU_ARCH=ppc
- fi
+ CPU_ARCH=ppc
+ PR_MD_ASFILES=os_Darwin_ppc.s
+ ;;
+ esac
DSO_CFLAGS=-fPIC
DSO_LDOPTS='-dynamiclib -compatibility_version 1 -current_version 1 -all_load -install_name @executable_path/$@ -headerpad_max_install_names'
# Use the standard preprocessor (cpp)
CFLAGS="$CFLAGS -no-cpp-precomp"
- MKSHLIB='$(CC) -arch $(CPU_ARCH) $(DSO_LDOPTS) -o $@'
+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
STRIP="$STRIP -x -S"
DLL_SUFFIX=dylib
USE_PTHREADS=1
MDCPUCFG_H=_darwin.cfg
PR_MD_CSRCS=darwin.c
- if test "$CPU_ARCH" = "ppc"; then
- PR_MD_ASFILES=os_Darwin_ppc.s
- fi
# Add Mac OS X support for loading CFM & CFBundle plugins
if test -f /System/Library/Frameworks/Carbon.framework/Carbon; then
@@ -3312,45 +3349,72 @@ EOF
elif test -z "$MACOSX_DEPLOYMENT_TARGET" ; then
case "${target_cpu}" in
powerpc*)
- export MACOSX_DEPLOYMENT_TARGET=10.1
+ export MACOSX_DEPLOYMENT_TARGET=10.2
;;
i*86*)
export MACOSX_DEPLOYMENT_TARGET=10.4
;;
esac
fi
- fi
- # do the right thing for SDK support
- if test "$NEXT_ROOT"; then
-
-
-
- CC_VERSION=`$CC -v 2>&1 | grep 'gcc version'`
- GCC_VERSION_FULL=`echo $CC_VERSION | $PERL -pe 's/^.*gcc version ([^ ]*).*/$1/'`
- GCC_VERSION=`echo $GCC_VERSION_FULL | $PERL -pe '(split(/\./))[0]>=4&&s/(^\d*\.\d*).*/$1/;'`
-
- GCC_VERSION_MAJOR=`echo $GCC_VERSION_FULL | $PERL -pe 's/(^\d*).*/$1/;'`
+
+ if test "$MACOS_SDK_DIR"; then
+
+ if test ! -d "$MACOS_SDK_DIR"; then
+ { echo "configure: error: SDK not found. When using --with-macos-sdk, you must
+specify a valid SDK. SDKs are installed when the optional cross-development
+tools are selected during the Xcode/Developer Tools installation." 1>&2; exit 1; }
+ fi
- if test "$GCC_VERSION_MAJOR" -lt "4" ; then
- TARGET_ARCH_LIB="darwin"
- TARGET_ARCH_INCLUDE="ppc-darwin"
- SDK_C_INCLUDE="-isystem ${NEXT_ROOT}/usr/include/gcc/darwin/${GCC_VERSION} -isystem ${NEXT_ROOT}/usr/include -F${NEXT_ROOT}/System/Library/Frameworks"
- else
- TARGET_ARCH_LIB=${target_cpu}-${target_vendor}-darwin`echo $NEXT_ROOT | $PERL -pe 's/MacOSX10\.(\d*)//;if ($1) {$_=$1+4;} else {$_="'${target_os}'";s/(\d+)//;$_=$1;}'`
- TARGET_ARCH_INCLUDE=$TARGET_ARCH_LIB
- SDK_C_INCLUDE="-isystem ${NEXT_ROOT}/usr/lib/gcc/${TARGET_ARCH_LIB}/${GCC_VERSION_FULL}/include -isystem ${NEXT_ROOT}/usr/include -F${NEXT_ROOT}/System/Library/Frameworks"
- fi
+
+ CC_VERSION=`$CC -v 2>&1 | grep 'gcc version'`
+ GCC_VERSION_FULL=`echo $CC_VERSION | $PERL -pe 's/^.*gcc version ([^ ]*).*/$1/'`
+ GCC_VERSION=`echo $GCC_VERSION_FULL | $PERL -pe '(split(/\./))[0]>=4&&s/(^\d*\.\d*).*/$1/;'`
+
+ GCC_VERSION_MAJOR=`echo $GCC_VERSION_FULL | $PERL -pe 's/(^\d*).*/$1/;'`
+ if test "$GCC_VERSION_MAJOR" -lt "4" ; then
+ SDK_C_FRAMEWORK="-F${MACOS_SDK_DIR}/System/Library/Frameworks"
+ if test -d "${MACOS_SDK_DIR}/Library/Frameworks" ; then
+ SDK_C_FRAMEWORK="$SDK_C_FRAMEWORK -F${MACOS_SDK_DIR}/Library/Frameworks"
+ fi
- if test -d "${NEXT_ROOT}/Library/Frameworks" ; then
- SDK_C_INCLUDE="$SDK_C_INCLUDE -F${NEXT_ROOT}/Library/Frameworks"
- fi
+ SDK_C_INCLUDE="-isystem ${MACOS_SDK_DIR}/usr/include/gcc/darwin/${GCC_VERSION} -isystem ${MACOS_SDK_DIR}/usr/include ${SDK_C_FRAMEWORK}"
+
+ CFLAGS="$CFLAGS -nostdinc ${SDK_C_INCLUDE}"
+
+ CPP="$CPP -nostdinc ${SDK_C_INCLUDE}"
+
+
+ HOST_DARWIN_MAJOR=`echo "$build_os" | sed -E -e 's/^darwin([0-9]+).*$/\1/'`
+
+ if test "$HOST_DARWIN_MAJOR" -lt 9 ; then
+ MACOS_SDK_LIBS="-L${MACOS_SDK_DIR}/usr/lib/gcc/darwin -L${MACOS_SDK_DIR}/usr/lib/gcc/darwin/${GCC_VERSION_FULL} -L${MACOS_SDK_DIR}/usr/lib ${SDK_C_FRAMEWORK}"
+ else
+ MACOS_SDK_LIBS="-Wl,-syslibroot,${MACOS_SDK_DIR}"
+ fi
+
+ LDFLAGS="${MACOS_SDK_LIBS} $LDFLAGS"
+ DSO_LDOPTS="${MACOS_SDK_LIBS} $DSO_LDOPTS"
+ export NEXT_ROOT=$MACOS_SDK_DIR
- CFLAGS="$CFLAGS -nostdinc ${SDK_C_INCLUDE}"
+ if test -n "$CROSS_COMPILE" ; then
+ HOST_CC="NEXT_ROOT= $HOST_CC"
+ HOST_CXX="NEXT_ROOT= $HOST_CXX"
+ fi
+ else
+ CFLAGS="$CFLAGS -isysroot ${MACOS_SDK_DIR}"
- CPP="$CPP -nostdinc ${SDK_C_INCLUDE}"
+ CPP="$CPP -isysroot ${MACOS_SDK_DIR}"
- OS_LIBS="-L${NEXT_ROOT}/usr/lib/gcc/${TARGET_ARCH_LIB} -L${NEXT_ROOT}/usr/lib/gcc/${TARGET_ARCH_LIB}/${GCC_VERSION_FULL} -L${NEXT_ROOT}/usr/lib $OS_LIBS"
+ if test "$GCC_VERSION_FULL" != "4.0.0" ; then
+ LDFLAGS="$LDFLAGS -isysroot ${MACOS_SDK_DIR}"
+ DSO_LDOPTS="$DSO_LDOPTS -isysroot ${MACOS_SDK_DIR}"
+ else
+ LDFLAGS="$LDFLAGS -Wl,-syslibroot,${MACOS_SDK_DIR}"
+ DSO_LDOPTS="$DSO_LDOPTS -Wl,-syslibroot,${MACOS_SDK_DIR}"
+ fi
+ fi
+ fi
fi
;;
@@ -3437,10 +3501,6 @@ EOF
#define _HPUX_SOURCE 1
EOF
- cat >> confdefs.h <<\EOF
-#define hppa 1
-EOF
-
# OSF1 and HPUX report the POLLHUP event for a socket when the
# shutdown(SHUT_WR) operation is called for the remote end, even though
# the socket is still writeable. Use select(), instead of poll(), to
@@ -3453,10 +3513,22 @@ EOF
#define _USE_BIG_FDS 1
EOF
- DLL_SUFFIX=sl
DSO_LDOPTS='-b +h $(notdir $@)'
PR_MD_CSRCS=hpux.c
- if test "$OS_TEST" != "ia64"; then
+ if test "$OS_TEST" = "ia64"; then
+ DLL_SUFFIX=so
+ DSO_LDOPTS="$DSO_LDOPTS +b '\$\$ORIGIN'"
+ CPU_ARCH_TAG=_$OS_TEST
+ if test -z "$USE_64"; then
+ COMPILER_TAG=_32
+ fi
+ PR_MD_ASFILES=os_HPUX_ia64.s
+ else
+ cat >> confdefs.h <<\EOF
+#define hppa 1
+EOF
+
+ DLL_SUFFIX=sl
PR_MD_ASFILES=os_HPUX.s
fi
if test -n "$USE_64"; then
@@ -3517,10 +3589,10 @@ EOF
fi
- # HP-UX 11i (B.11.11) or higher
+ # HP-UX 11i v2 (B.11.23) or higher
case "$OS_RELEASE" in
- [C-Z]*|B.[2-9]*|B.1[2-9]*|B.11.[2-9]*|B.11.1[1-9]*)
+ [C-Z]*|B.[2-9]*|B.1[2-9]*|B.11.[3-9]*|B.11.2[3-9]*)
USE_IPV6=1
;;
esac
@@ -3774,19 +3846,7 @@ EOF
EOF
cat >> confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
-
- cat >> confdefs.h <<\EOF
-#define _BSD_SOURCE 1
-EOF
-
- cat >> confdefs.h <<\EOF
-#define _SVID_SOURCE 1
-EOF
-
- cat >> confdefs.h <<\EOF
-#define _LARGEFILE64_SOURCE 1
+#define _GNU_SOURCE 1
EOF
cat >> confdefs.h <<\EOF
@@ -3797,8 +3857,8 @@ EOF
#define LINUX 1
EOF
- CFLAGS="$CFLAGS -ansi -Wall"
- CXXFLAGS="$CXXFLAGS -ansi -Wall"
+ CFLAGS="$CFLAGS -Wall"
+ CXXFLAGS="$CXXFLAGS -Wall"
MDCPUCFG_H=_linux.cfg
PR_MD_CSRCS=linux.c
MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
@@ -4336,17 +4396,17 @@ EOF
_OPTIMIZE_FLAGS="$_OPTIMIZE_FLAGS -Olimit 4000"
ac_safe=`echo "machine/builtins.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for machine/builtins.h""... $ac_c" 1>&6
-echo "configure:4340: checking for machine/builtins.h" >&5
+echo "configure:4400: checking for machine/builtins.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4345 "configure"
+#line 4405 "configure"
#include "confdefs.h"
#include <machine/builtins.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4350: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4410: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4908,7 +4968,7 @@ case $target in
;;
*)
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:4912: checking for dlopen in -ldl" >&5
+echo "configure:4972: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4916,7 +4976,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4920 "configure"
+#line 4980 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4927,7 +4987,7 @@ int main() {
dlopen()
; return 0; }
EOF
-if { (eval echo configure:4931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4944,17 +5004,17 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
-echo "configure:4948: checking for dlfcn.h" >&5
+echo "configure:5008: checking for dlfcn.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4953 "configure"
+#line 5013 "configure"
#include "confdefs.h"
#include <dlfcn.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4958: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5018: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4987,13 +5047,13 @@ esac
if test $ac_cv_prog_gcc = yes; then
echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:4991: checking whether ${CC-cc} needs -traditional" >&5
+echo "configure:5051: checking whether ${CC-cc} needs -traditional" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_pattern="Autoconf.*'x'"
cat > conftest.$ac_ext <<EOF
-#line 4997 "configure"
+#line 5057 "configure"
#include "confdefs.h"
#include <sgtty.h>
Autoconf TIOCGETP
@@ -5011,7 +5071,7 @@ rm -f conftest*
if test $ac_cv_prog_gcc_traditional = no; then
cat > conftest.$ac_ext <<EOF
-#line 5015 "configure"
+#line 5075 "configure"
#include "confdefs.h"
#include <termio.h>
Autoconf TCGETA
@@ -5035,12 +5095,12 @@ fi
for ac_func in lchown strerror
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5039: checking for $ac_func" >&5
+echo "configure:5099: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5044 "configure"
+#line 5104 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5063,7 +5123,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5104,7 +5164,7 @@ hpux*)
if test -z "$GNU_CC"; then
echo $ac_n "checking for +Olit support""... $ac_c" 1>&6
-echo "configure:5108: checking for +Olit support" >&5
+echo "configure:5168: checking for +Olit support" >&5
if eval "test \"`echo '$''{'ac_cv_hpux_usable_olit_option'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5143,7 +5203,7 @@ darwin*)
*)
echo $ac_n "checking for pthread_create in -lpthreads""... $ac_c" 1>&6
-echo "configure:5147: checking for pthread_create in -lpthreads" >&5
+echo "configure:5207: checking for pthread_create in -lpthreads" >&5
echo "
#include <pthread.h>
void *foo(void *v) { return v; }
@@ -5165,7 +5225,7 @@ echo "
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:5169: checking for pthread_create in -lpthread" >&5
+echo "configure:5229: checking for pthread_create in -lpthread" >&5
echo "
#include <pthread.h>
void *foo(void *v) { return v; }
@@ -5187,7 +5247,7 @@ echo "
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6
-echo "configure:5191: checking for pthread_create in -lc_r" >&5
+echo "configure:5251: checking for pthread_create in -lc_r" >&5
echo "
#include <pthread.h>
void *foo(void *v) { return v; }
@@ -5209,7 +5269,7 @@ echo "
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6
-echo "configure:5213: checking for pthread_create in -lc" >&5
+echo "configure:5273: checking for pthread_create in -lc" >&5
echo "
#include <pthread.h>
void *foo(void *v) { return v; }
@@ -5363,7 +5423,7 @@ if test -n "$USE_PTHREADS"; then
rm -f conftest*
ac_cv_have_dash_pthread=no
echo $ac_n "checking whether ${CC-cc} accepts -pthread""... $ac_c" 1>&6
-echo "configure:5367: checking whether ${CC-cc} accepts -pthread" >&5
+echo "configure:5427: checking whether ${CC-cc} accepts -pthread" >&5
echo 'int main() { return 0; }' | cat > conftest.c
${CC-cc} -pthread -o conftest conftest.c > conftest.out 2>&1
if test $? -eq 0; then
@@ -5386,7 +5446,7 @@ echo "configure:5367: checking whether ${CC-cc} accepts -pthread" >&5
ac_cv_have_dash_pthreads=no
if test "$ac_cv_have_dash_pthread" = "no"; then
echo $ac_n "checking whether ${CC-cc} accepts -pthreads""... $ac_c" 1>&6
-echo "configure:5390: checking whether ${CC-cc} accepts -pthreads" >&5
+echo "configure:5450: checking whether ${CC-cc} accepts -pthreads" >&5
echo 'int main() { return 0; }' | cat > conftest.c
${CC-cc} -pthreads -o conftest conftest.c > conftest.out 2>&1
if test $? -eq 0; then
@@ -5802,6 +5862,9 @@ esac
+
+
+
MAKEFILES="
Makefile
config/Makefile
@@ -5851,6 +5914,8 @@ if test -n "$USE_CPLUS"; then
MAKEFILES="$MAKEFILES pr/src/cplus/Makefile pr/src/cplus/tests/Makefile"
fi
+echo $MAKEFILES > unallmakefiles
+
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
@@ -6029,6 +6094,7 @@ s%@PERL@%$PERL%g
s%@SHELL_OVERRIDE@%$SHELL_OVERRIDE%g
s%@MOZILLA_CLIENT@%$MOZILLA_CLIENT%g
s%@HOST_CFLAGS@%$HOST_CFLAGS%g
+s%@HOST_LDFLAGS@%$HOST_LDFLAGS%g
s%@GNU_CC@%$GNU_CC%g
s%@GCC_USE_GNU_LD@%$GCC_USE_GNU_LD%g
s%@MSC_VER@%$MSC_VER%g
@@ -6093,6 +6159,8 @@ s%@OS_DLLFLAGS@%$OS_DLLFLAGS%g
s%@CYGWIN_WRAPPER@%$CYGWIN_WRAPPER%g
s%@VISIBILITY_FLAGS@%$VISIBILITY_FLAGS%g
s%@WRAP_SYSTEM_INCLUDES@%$WRAP_SYSTEM_INCLUDES%g
+s%@MACOS_SDK_DIR@%$MACOS_SDK_DIR%g
+s%@NEXT_ROOT@%$NEXT_ROOT%g
CEOF
EOF
diff --git a/configure.in b/configure.in
index 3b2d9780..2c8e12b7 100644
--- a/configure.in
+++ b/configure.in
@@ -1,38 +1,43 @@
dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; -*-
dnl
-dnl The contents of this file are subject to the Mozilla Public
-dnl License Version 1.1 (the "License"); you may not use this file
-dnl except in compliance with the License. You may obtain a copy of
-dnl the License at http://www.mozilla.org/MPL/
-dnl
-dnl Software distributed under the License is distributed on an "AS
-dnl IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-dnl implied. See the License for the specific language governing
-dnl rights and limitations under the License.
-dnl
+dnl ***** BEGIN LICENSE BLOCK *****
+dnl Version: MPL 1.1/GPL 2.0/LGPL 2.1
+dnl
+dnl The contents of this file are subject to the Mozilla Public License Version
+dnl 1.1 (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
+dnl http://www.mozilla.org/MPL/
+dnl
+dnl Software distributed under the License is distributed on an "AS IS" basis,
+dnl WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+dnl for the specific language governing rights and limitations under the
+dnl License.
+dnl
dnl The Original Code is the Netscape Portable Runtime (NSPR).
-dnl
-dnl The Initial Developer of the Original Code is Netscape
-dnl Communications Corporation. Portions created by Netscape are
-dnl Copyright (C) 1998o-2000 Netscape Communications Corporation. All
-dnl Rights Reserved.
-dnl
+dnl
+dnl The Initial Developer of the Original Code is
+dnl Netscape Communications Corporation.
+dnl Portions created by the Initial Developer are Copyright (C) 1998
+dnl the Initial Developer. All Rights Reserved.
+dnl
dnl Contributor(s):
-dnl Christopher Seawood <cls@seawood.org>
-dnl Howard Chu <hyc@symas.com>
-dnl
-dnl Alternatively, the contents of this file may be used under the
-dnl terms of the GNU General Public License Version 2 or later (the
-dnl "GPL"), in which case the provisions of the GPL are applicable
-dnl instead of those above. If you wish to allow use of your
-dnl version of this file only under the terms of the GPL and not to
-dnl allow others to use your version of this file under the MPL,
-dnl indicate your decision by deleting the provisions above and
-dnl replace them with the notice and other provisions required by
-dnl the GPL. If you do not delete the provisions above, a recipient
-dnl may use your version of this file under either the MPL or the
-dnl GPL.
-dnl
+dnl Christopher Seawood <cls@seawood.org>
+dnl Howard Chu <hyc@symas.com>
+dnl Mark Mentovai <mark@moxienet.com>
+dnl
+dnl Alternatively, the contents of this file may be used under the terms of
+dnl either the GNU General Public License Version 2 or later (the "GPL"), or
+dnl the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+dnl in which case the provisions of the GPL or the LGPL are applicable instead
+dnl of those above. If you wish to allow use of your version of this file only
+dnl under the terms of either the GPL or the LGPL, and not to allow others to
+dnl use your version of this file under the terms of the MPL, indicate your
+dnl decision by deleting the provisions above and replace them with the notice
+dnl and other provisions required by the GPL or the LGPL. If you do not delete
+dnl the provisions above, a recipient may use your version of this file under
+dnl the terms of any one of the MPL, the GPL or the LGPL.
+dnl
+dnl ***** END LICENSE BLOCK *****
AC_PREREQ(2.12)
AC_INIT(config/libc_r.h)
@@ -45,7 +50,7 @@ dnl = Defaults
dnl ========================================================
MOD_MAJOR_VERSION=4
MOD_MINOR_VERSION=6
-MOD_PATCH_VERSION=1
+MOD_PATCH_VERSION=8
NSPR_MODNAME=nspr20
_HAVE_PTHREADS=
USE_PTHREADS=
@@ -69,6 +74,8 @@ NOSUCHFILE=/no-such-file
LIBNSPR='-L$(dist_libdir) -lnspr$(MOD_MAJOR_VERSION)'
LIBPLC='-L$(dist_libdir) -lplc$(MOD_MAJOR_VERSION)'
CYGWIN_WRAPPER=
+MACOS_SDK_DIR=
+NEXT_ROOT=
dnl Link in libraries necessary to resolve all symbols for shared libs
RESOLVE_LINK_SYMBOLS=
@@ -226,10 +233,17 @@ AC_ARG_ENABLE(mdupdate,
USE_MDUPDATE=1
fi ])
+dnl ========================================================
+dnl = Mac OS X SDK support
+dnl ========================================================
+AC_ARG_WITH(macos-sdk,
+ [ --with-macos-sdk=dir Location of platform SDK to use (Mac OS X only)],
+ MACOS_SDK_DIR=$withval)
+
AC_ARG_ENABLE(macos-target,
[ --enable-macos-target=VER
Set the minimum MacOS version needed at runtime
- [10.1 for ppc, 10.4 for x86]],
+ [10.2 for ppc, 10.4 for x86]],
[_MACOSX_DEPLOYMENT_TARGET=$enableval])
dnl ========================================================
@@ -402,12 +416,37 @@ if test "$target" != "$host"; then
CFLAGS=$_SAVE_CFLAGS
LDFLAGS=$_SAVE_LDFLAGS
+ case "$build:$target" in
+ powerpc-apple-darwin8*:i?86-apple-darwin*)
+ dnl The Darwin cross compiler doesn't necessarily point itself at a
+ dnl root that has libraries for the proper architecture, it defaults
+ dnl to the system root. The libraries in the system root on current
+ dnl versions of PPC OS X 10.4 aren't fat, so these target compiler
+ dnl checks will fail. Fake a working SDK in that case.
+ _SAVE_CFLAGS=$CFLAGS
+ _SAVE_CXXFLAGS=$CXXLAGS
+ CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk $CFLAGS"
+ CXXFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk $CXXFLAGS"
+ ;;
+ esac
+
AC_CHECK_PROGS(CC, $CC "${target_alias}-gcc" "${target}-gcc", echo)
unset ac_cv_prog_CC
AC_PROG_CC
AC_CHECK_PROGS(CXX, $CXX "${target_alias}-g++" "${target}-g++", echo)
unset ac_cv_prog_CXX
AC_PROG_CXX
+
+ case "$build:$target" in
+ powerpc-apple-darwin8*:i?86-apple-darwin*)
+ dnl Revert the changes made above. From this point on, the target
+ dnl compiler will never be used without applying the SDK to CFLAGS
+ dnl (see --with-macos-sdk below).
+ CFLAGS=$_SAVE_CFLAGS
+ CXXFLAGS=$_SAVE_CXXFLAGS
+ ;;
+ esac
+
AC_CHECK_PROGS(RANLIB, $RANLIB "${target_alias}-ranlib" "${target}-ranlib", echo)
AC_CHECK_PROGS(AR, $AR "${target_alias}-ar" "${target}-ar", echo)
AC_CHECK_PROGS(AS, $AS "${target_alias}-as" "${target}-as", echo)
@@ -448,6 +487,15 @@ if test "`echo | $AS -v 2>&1 | grep -c GNU`" != "0"; then
fi
rm -f a.out
+case "$build:$target" in
+ i?86-apple-darwin*:powerpc-apple-darwin*)
+ dnl cross_compiling will have erroneously been set to "no" in this
+ dnl case, because the x86 build host is able to run ppc code in a
+ dnl translated environment, making a cross compiler appear native.
+ cross_compiling=yes
+ ;;
+esac
+
if test "$cross_compiling" = "yes"; then
CROSS_COMPILE=1
else
@@ -581,6 +629,7 @@ if test -n "$CROSS_COMPILE"; then
linux*) OS_ARCH=Linux ;;
solaris*) OS_ARCH=SunOS OS_RELEASE=5 ;;
mingw*) OS_ARCH=WINNT ;;
+ darwin*) OS_ARCH=Darwin ;;
esac
else
OS_ARCH=`uname -s | sed -e 's|/|_|g'`
@@ -917,26 +966,28 @@ case "$target" in
AC_DEFINE(DARWIN)
AC_DEFINE(HAVE_BSD_FLOCK)
CFLAGS="$CFLAGS -Wmost -fno-common"
- if echo $OS_TEST | grep -c 86 2>/dev/null; then
- AC_DEFINE(i386)
- CPU_ARCH=i386
- else
- AC_DEFINE(ppc)
- CPU_ARCH=ppc
- fi
+ case "${target_cpu}" in
+ i*86*)
+ AC_DEFINE(i386)
+ CPU_ARCH=i386
+ PR_MD_ASFILES=os_Darwin_x86.s
+ ;;
+ *)
+ AC_DEFINE(ppc)
+ CPU_ARCH=ppc
+ PR_MD_ASFILES=os_Darwin_ppc.s
+ ;;
+ esac
DSO_CFLAGS=-fPIC
DSO_LDOPTS='-dynamiclib -compatibility_version 1 -current_version 1 -all_load -install_name @executable_path/$@ -headerpad_max_install_names'
# Use the standard preprocessor (cpp)
CFLAGS="$CFLAGS -no-cpp-precomp"
- MKSHLIB='$(CC) -arch $(CPU_ARCH) $(DSO_LDOPTS) -o $@'
+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
STRIP="$STRIP -x -S"
DLL_SUFFIX=dylib
USE_PTHREADS=1
MDCPUCFG_H=_darwin.cfg
PR_MD_CSRCS=darwin.c
- if test "$CPU_ARCH" = "ppc"; then
- PR_MD_ASFILES=os_Darwin_ppc.s
- fi
# Add Mac OS X support for loading CFM & CFBundle plugins
if test -f /System/Library/Frameworks/Carbon.framework/Carbon; then
@@ -952,8 +1003,8 @@ case "$target" in
dnl minimum.
case "${target_cpu}" in
powerpc*)
- dnl Architecture minimum 10.1
- export MACOSX_DEPLOYMENT_TARGET=10.1
+ dnl Architecture minimum 10.2
+ export MACOSX_DEPLOYMENT_TARGET=10.2
;;
i*86*)
dnl Architecture minimum 10.4
@@ -961,52 +1012,104 @@ case "$target" in
;;
esac
fi
- fi
- # do the right thing for SDK support
- if test "$NEXT_ROOT"; then
- dnl Synced to the MACOS_SDK_DIR block in Mozilla's top-level
- dnl configure.in
-
- dnl Current known valid versions for GCC_VERSION are 2.95.2 3.1 3.3 4.0.
- dnl 4.0 identifies itself as 4.0.x, so strip the decidecimal for
- dnl the environment and includedir purposes (when using an SDK, below),
- dnl but remember the full version number for the libdir (SDK).
-
- changequote(,)
- CC_VERSION=`$CC -v 2>&1 | grep 'gcc version'`
- GCC_VERSION_FULL=`echo $CC_VERSION | $PERL -pe 's/^.*gcc version ([^ ]*).*/$1/'`
- GCC_VERSION=`echo $GCC_VERSION_FULL | $PERL -pe '(split(/\./))[0]>=4&&s/(^\d*\.\d*).*/$1/;'`
- changequote([,])
- GCC_VERSION_MAJOR=`echo $GCC_VERSION_FULL | $PERL -pe 's/(^\d*).*/$1/;'`
-
- if test "$GCC_VERSION_MAJOR" -lt "4" ; then
- dnl gcc < 4.0 only supports PowerPC, OK to hard-code
- TARGET_ARCH_LIB="darwin"
- TARGET_ARCH_INCLUDE="ppc-darwin"
- SDK_C_INCLUDE="-isystem ${NEXT_ROOT}/usr/include/gcc/darwin/${GCC_VERSION} -isystem ${NEXT_ROOT}/usr/include -F${NEXT_ROOT}/System/Library/Frameworks"
- else
- dnl If gcc >= 4, use cpu-apple-darwin#, where # is the version
- dnl of the Darwin release corresponding to the target Mac OS X
- dnl release. For OS X >= 10.1.1, take the minor version number and
- dnl add 4 to get the Darwin major version number. If it can't be
- dnl determined, use current Darwin major version number and hope
- dnl that there's a symlink.
- TARGET_ARCH_LIB=${target_cpu}-${target_vendor}-darwin`echo $NEXT_ROOT | $PERL -pe 's/MacOSX10\.([\d]*)//;if ($1) {$_=$1+4;} else {$_="'${target_os}'";s/(\d+)//;$_=$1;}'`
- TARGET_ARCH_INCLUDE=$TARGET_ARCH_LIB
- SDK_C_INCLUDE="-isystem ${NEXT_ROOT}/usr/lib/gcc/${TARGET_ARCH_LIB}/${GCC_VERSION_FULL}/include -isystem ${NEXT_ROOT}/usr/include -F${NEXT_ROOT}/System/Library/Frameworks"
- fi
+ dnl MACOS_SDK_DIR will be set to the SDK location whenever one is
+ dnl in use. NEXT_ROOT will be set and exported if it's needed for
+ dnl ld.
- if test -d "${NEXT_ROOT}/Library/Frameworks" ; then
- SDK_C_INCLUDE="$SDK_C_INCLUDE -F${NEXT_ROOT}/Library/Frameworks"
- fi
+ if test "$MACOS_SDK_DIR"; then
+ dnl Sync this section with the one in Mozilla's top level.
+
+ if test ! -d "$MACOS_SDK_DIR"; then
+ AC_MSG_ERROR([SDK not found. When using --with-macos-sdk, you must
+specify a valid SDK. SDKs are installed when the optional cross-development
+tools are selected during the Xcode/Developer Tools installation.])
+ fi
+
+ changequote(,)
+ CC_VERSION=`$CC -v 2>&1 | grep 'gcc version'`
+ GCC_VERSION_FULL=`echo $CC_VERSION | $PERL -pe 's/^.*gcc version ([^ ]*).*/$1/'`
+ GCC_VERSION=`echo $GCC_VERSION_FULL | $PERL -pe '(split(/\./))[0]>=4&&s/(^\d*\.\d*).*/$1/;'`
+ changequote([,])
+ GCC_VERSION_MAJOR=`echo $GCC_VERSION_FULL | $PERL -pe 's/(^\d*).*/$1/;'`
+ if test "$GCC_VERSION_MAJOR" -lt "4" ; then
+ SDK_C_FRAMEWORK="-F${MACOS_SDK_DIR}/System/Library/Frameworks"
+ if test -d "${MACOS_SDK_DIR}/Library/Frameworks" ; then
+ SDK_C_FRAMEWORK="$SDK_C_FRAMEWORK -F${MACOS_SDK_DIR}/Library/Frameworks"
+ fi
+
+ SDK_C_INCLUDE="-isystem ${MACOS_SDK_DIR}/usr/include/gcc/darwin/${GCC_VERSION} -isystem ${MACOS_SDK_DIR}/usr/include ${SDK_C_FRAMEWORK}"
- CFLAGS="$CFLAGS -nostdinc ${SDK_C_INCLUDE}"
+ CFLAGS="$CFLAGS -nostdinc ${SDK_C_INCLUDE}"
- dnl CPP needs to be set for AC_CHECK_HEADER.
- CPP="$CPP -nostdinc ${SDK_C_INCLUDE}"
+ dnl CPP needs to be set for AC_CHECK_HEADER.
+ CPP="$CPP -nostdinc ${SDK_C_INCLUDE}"
- OS_LIBS="-L${NEXT_ROOT}/usr/lib/gcc/${TARGET_ARCH_LIB} -L${NEXT_ROOT}/usr/lib/gcc/${TARGET_ARCH_LIB}/${GCC_VERSION_FULL} -L${NEXT_ROOT}/usr/lib $OS_LIBS"
+ changequote(,)
+ HOST_DARWIN_MAJOR=`echo "$build_os" | sed -E -e 's/^darwin([0-9]+).*$/\1/'`
+ changequote([,])
+ if test "$HOST_DARWIN_MAJOR" -lt 9 ; then
+ dnl The build host is running Tiger (10.4) or earlier.
+ dnl ld support for -syslibroot is compiler-agnostic, but
+ dnl only available on Tiger and later. On Tiger and
+ dnl earlier build hosts, just rely on NEXT_ROOT, because
+ dnl it's not been shown to cause any problems.
+ MACOS_SDK_LIBS="-L${MACOS_SDK_DIR}/usr/lib/gcc/darwin -L${MACOS_SDK_DIR}/usr/lib/gcc/darwin/${GCC_VERSION_FULL} -L${MACOS_SDK_DIR}/usr/lib ${SDK_C_FRAMEWORK}"
+ else
+ dnl The build host is running Leopard (10.5) or later.
+ dnl With NEXT_ROOT set, the linker will still not apply
+ dnl it when resolving dependencies. This causes problems
+ dnl on Leopard, where an SDK depends on frameworks which
+ dnl were present in earlier OS releases (and the associated
+ dnl SDK) but not in Leopard. -syslibroot does not have
+ dnl this problem, but it results in harmless warnings when
+ dnl NEXT_ROOT is set. NEXT_ROOT needs to remain set even
+ dnl on Leopard because the compiler uses it too.
+ MACOS_SDK_LIBS="-Wl,-syslibroot,${MACOS_SDK_DIR}"
+ fi
+
+ dnl LDFLAGS is for the utilities built in config (now and
+ dnl nsinstall). DSO_LDOPTS is used when linking shared
+ dnl libraries.
+ LDFLAGS="${MACOS_SDK_LIBS} $LDFLAGS"
+ DSO_LDOPTS="${MACOS_SDK_LIBS} $DSO_LDOPTS"
+ export NEXT_ROOT=$MACOS_SDK_DIR
+
+ if test -n "$CROSS_COMPILE" ; then
+ dnl NEXT_ROOT will be in the environment, but it
+ dnl shouldn't be set for the build host. HOST_CXX is
+ dnl presently unused.
+ HOST_CC="NEXT_ROOT= $HOST_CC"
+ HOST_CXX="NEXT_ROOT= $HOST_CXX"
+ fi
+ else
+ dnl gcc >= 4.0 uses different paths than above, but knows
+ dnl how to find them itself.
+ CFLAGS="$CFLAGS -isysroot ${MACOS_SDK_DIR}"
+
+ dnl CPP needs to be set for AC_CHECK_HEADER.
+ CPP="$CPP -isysroot ${MACOS_SDK_DIR}"
+
+ dnl If gcc >= 4.0.0, we're guaranteed to be on Tiger, which
+ dnl has an ld that supports -syslibroot. Don't set
+ dnl NEXT_ROOT because it will be ignored and cause
+ dnl warnings when -syslibroot is specified.
+ dnl
+ dnl Both LDFLAGS and DSO_LDOPTS are set here, see the
+ dnl gcc < 4.0 case for the explanation.
+ if test "$GCC_VERSION_FULL" != "4.0.0" ; then
+ dnl gcc > 4.0.0 will pass -syslibroot to ld automatically
+ dnl based on the -isysroot it receives.
+ LDFLAGS="$LDFLAGS -isysroot ${MACOS_SDK_DIR}"
+ DSO_LDOPTS="$DSO_LDOPTS -isysroot ${MACOS_SDK_DIR}"
+ else
+ dnl gcc 4.0.0 doesn't pass -syslibroot to ld, it needs
+ dnl to be explicit.
+ LDFLAGS="$LDFLAGS -Wl,-syslibroot,${MACOS_SDK_DIR}"
+ DSO_LDOPTS="$DSO_LDOPTS -Wl,-syslibroot,${MACOS_SDK_DIR}"
+ fi
+ fi
+ fi
fi
;;
@@ -1051,17 +1154,25 @@ case "$target" in
AC_DEFINE(XP_UNIX)
AC_DEFINE(HPUX)
AC_DEFINE(_HPUX_SOURCE)
- AC_DEFINE(hppa)
# OSF1 and HPUX report the POLLHUP event for a socket when the
# shutdown(SHUT_WR) operation is called for the remote end, even though
# the socket is still writeable. Use select(), instead of poll(), to
# workaround this problem.
AC_DEFINE(_PR_POLL_WITH_SELECT)
AC_DEFINE(_USE_BIG_FDS)
- DLL_SUFFIX=sl
DSO_LDOPTS='-b +h $(notdir $@)'
PR_MD_CSRCS=hpux.c
- if test "$OS_TEST" != "ia64"; then
+ if test "$OS_TEST" = "ia64"; then
+ DLL_SUFFIX=so
+ DSO_LDOPTS="$DSO_LDOPTS +b '\$\$ORIGIN'"
+ CPU_ARCH_TAG=_$OS_TEST
+ if test -z "$USE_64"; then
+ COMPILER_TAG=_32
+ fi
+ PR_MD_ASFILES=os_HPUX_ia64.s
+ else
+ AC_DEFINE(hppa)
+ DLL_SUFFIX=sl
PR_MD_ASFILES=os_HPUX.s
fi
if test -n "$USE_64"; then
@@ -1104,10 +1215,10 @@ case "$target" in
AC_DEFINE(HAVE_POINTER_LOCALTIME_R)
fi
- # HP-UX 11i (B.11.11) or higher
+ # HP-UX 11i v2 (B.11.23) or higher
changequote(<<,>>)
case "$OS_RELEASE" in
- [C-Z]*|B.[2-9]*|B.1[2-9]*|B.11.[2-9]*|B.11.1[1-9]*)
+ [C-Z]*|B.[2-9]*|B.1[2-9]*|B.11.[3-9]*|B.11.2[3-9]*)
USE_IPV6=1
;;
esac
@@ -1292,14 +1403,11 @@ case "$target" in
IMPL_STRATEGY=_PTH
fi
AC_DEFINE(XP_UNIX)
- AC_DEFINE(_POSIX_SOURCE)
- AC_DEFINE(_BSD_SOURCE)
- AC_DEFINE(_SVID_SOURCE)
- AC_DEFINE(_LARGEFILE64_SOURCE)
+ AC_DEFINE(_GNU_SOURCE)
AC_DEFINE(HAVE_FCNTL_FILE_LOCKING)
AC_DEFINE(LINUX)
- CFLAGS="$CFLAGS -ansi -Wall"
- CXXFLAGS="$CXXFLAGS -ansi -Wall"
+ CFLAGS="$CFLAGS -Wall"
+ CXXFLAGS="$CXXFLAGS -Wall"
MDCPUCFG_H=_linux.cfg
PR_MD_CSRCS=linux.c
MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
@@ -2578,6 +2686,7 @@ AC_SUBST(CPPFLAGS)
AC_SUBST(HOST_CC)
AC_SUBST(HOST_CFLAGS)
AC_SUBST(LDFLAGS)
+AC_SUBST(HOST_LDFLAGS)
AC_SUBST(GNU_CC)
AC_SUBST(GCC_USE_GNU_LD)
AC_SUBST(MSC_VER)
@@ -2659,6 +2768,8 @@ AC_SUBST(OS_DLLFLAGS)
AC_SUBST(CYGWIN_WRAPPER)
AC_SUBST(VISIBILITY_FLAGS)
AC_SUBST(WRAP_SYSTEM_INCLUDES)
+AC_SUBST(MACOS_SDK_DIR)
+AC_SUBST(NEXT_ROOT)
dnl ========================================================
dnl Generate output files.
@@ -2715,4 +2826,6 @@ if test -n "$USE_CPLUS"; then
MAKEFILES="$MAKEFILES pr/src/cplus/Makefile pr/src/cplus/tests/Makefile"
fi
+echo $MAKEFILES > unallmakefiles
+
AC_OUTPUT([$MAKEFILES], [chmod +x config/nspr-config])
diff --git a/lib/ds/Makefile.in b/lib/ds/Makefile.in
index 2916ab70..5a2e0722 100644
--- a/lib/ds/Makefile.in
+++ b/lib/ds/Makefile.in
@@ -63,11 +63,6 @@ HEADERS = \
HEADERS := $(addprefix $(srcdir)/, $(HEADERS))
ifeq ($(OS_ARCH), WINNT)
-ifdef NS_USE_GCC
-DLLBASE=-Wl,--image-base -Wl,0x30000000
-else
-DLLBASE=-BASE:0x30000000
-endif # GCC
RES=$(OBJDIR)/plds.res
RESNAME=plds.rc
endif # WINNT
diff --git a/lib/libc/src/Makefile.in b/lib/libc/src/Makefile.in
index fcdbae60..a0f4295f 100644
--- a/lib/libc/src/Makefile.in
+++ b/lib/libc/src/Makefile.in
@@ -73,11 +73,6 @@ LIBRARY_VERSION = $(MOD_MAJOR_VERSION)
RELEASE_LIBS = $(TARGETS)
ifeq ($(OS_ARCH),WINNT)
-ifdef NS_USE_GCC
-DLLBASE=-Wl,--image-base -Wl,0x30000000
-else
-DLLBASE=-BASE:0x30000000
-endif
RES=$(OBJDIR)/plc.res
RESNAME=plc.rc
endif # WINNT
diff --git a/lib/msgc/src/Makefile.in b/lib/msgc/src/Makefile.in
index de834cc5..5d5a1146 100644
--- a/lib/msgc/src/Makefile.in
+++ b/lib/msgc/src/Makefile.in
@@ -69,11 +69,6 @@ EXTRA_LIBS += $(OS_LIBS)
endif
ifeq ($(OS_ARCH), WINNT)
-ifdef NS_USE_GCC
-DLLBASE=-Wl,--image-base -Wl,0x30000000
-else
-DLLBASE=-BASE:0x30000000
-endif # GCC
#RES=$(OBJDIR)/ds.res
#RESNAME=$(MOD_DEPTH)/pr/src/nspr.rc
#OS_LIBS = user32.lib
diff --git a/lib/prstreams/Makefile.in b/lib/prstreams/Makefile.in
index 679c03d9..a29af95d 100644
--- a/lib/prstreams/Makefile.in
+++ b/lib/prstreams/Makefile.in
@@ -88,7 +88,6 @@ CXXSRCS = \
OBJS = $(addprefix $(OBJDIR)/,$(CSRCS:.c=.$(OBJ_SUFFIX)) $(CXXSRCS:.cpp=.$(OBJ_SUFFIX)))
ifeq ($(OS_ARCH), WINNT)
- DLLBASE=-BASE:0x30000000
RES=$(OBJDIR)/prstrms.res
RESNAME=prstrms.rc
OS_LIBS = user32.lib
diff --git a/pkg/linux/Makefile.in b/pkg/linux/Makefile.in
index c2ef7e89..ebf62ea6 100644
--- a/pkg/linux/Makefile.in
+++ b/pkg/linux/Makefile.in
@@ -47,7 +47,9 @@ srcdir = @srcdir@
VPATH = @srcdir@
NAME = sun-nspr
-RELEASE = 1
+ifndef RPM_RELEASE
+RPM_RELEASE = 1
+endif
TOPDIR = /usr/src/redhat
VERSION = `grep PR_VERSION $(dist_includedir)/prinit.h \
| sed -e 's/"$$//' -e 's/.*"//' -e 's/ .*//'`
@@ -76,7 +78,7 @@ publish:
tar czvf SOURCES/$(NAME)-$(VERSION).tar.gz opt
echo "%define name $(NAME)" >$(SPECFILE)
echo "%define version $(VERSION)" >>$(SPECFILE)
- echo "%define release $(RELEASE)" >>$(SPECFILE)
+ echo "%define release $(RPM_RELEASE)" >>$(SPECFILE)
echo "%define buildroot `pwd`/$(NAME)-root" >>$(SPECFILE)
echo "%define _topdir `pwd`" >>$(SPECFILE)
echo "%define _unpackaged_files_terminate_build 0" >>$(SPECFILE)
diff --git a/pkg/solaris/SUNWprd/prototype b/pkg/solaris/SUNWprd/prototype
index d59914b4..fb57aa48 100755
--- a/pkg/solaris/SUNWprd/prototype
+++ b/pkg/solaris/SUNWprd/prototype
@@ -2,6 +2,7 @@
# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
+# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
diff --git a/pr/include/md/_beos.cfg b/pr/include/md/_beos.cfg
index d15cf044..e1a4d313 100644
--- a/pr/include/md/_beos.cfg
+++ b/pr/include/md/_beos.cfg
@@ -1,36 +1,39 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
* The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
* Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
#ifndef nspr_cpucfg___
#define nspr_cpucfg___
diff --git a/pr/include/md/_darwin.cfg b/pr/include/md/_darwin.cfg
index 349ef3ba..dc7e0e0c 100644
--- a/pr/include/md/_darwin.cfg
+++ b/pr/include/md/_darwin.cfg
@@ -94,6 +94,7 @@
#define PR_ALIGN_OF_FLOAT 4
#define PR_ALIGN_OF_DOUBLE 4
#define PR_ALIGN_OF_POINTER 4
+#define PR_ALIGN_OF_WORD 4
#ifndef NO_NSPR_10_SUPPORT
diff --git a/pr/include/md/_darwin.h b/pr/include/md/_darwin.h
index 6f409e36..3c599fa7 100644
--- a/pr/include/md/_darwin.h
+++ b/pr/include/md/_darwin.h
@@ -48,9 +48,9 @@
#define PR_LINKER_ARCH "darwin"
#define _PR_SI_SYSNAME "DARWIN"
-#ifdef i386
+#ifdef __i386__
#define _PR_SI_ARCHITECTURE "x86"
-#else
+#elif defined(__ppc__)
#define _PR_SI_ARCHITECTURE "ppc"
#endif
#define PR_DLL_SUFFIX ".dylib"
@@ -65,7 +65,7 @@
#define USE_MACH_DYLD
#define _PR_HAVE_SOCKADDR_LEN
#define _PR_STAT_HAS_ST_ATIMESPEC
-#define _PR_NO_LARGE_FILES
+#define _PR_HAVE_LARGE_OFF_T
#define PR_HAVE_SYSV_NAMED_SHARED_MEMORY
#define _PR_INET6
@@ -113,7 +113,18 @@ extern PRInt32 _PR_DarwinPPC_AtomicSet(PRInt32 *val, PRInt32 newval);
#define _MD_ATOMIC_SET(val, newval) _PR_DarwinPPC_AtomicSet(val, newval)
extern PRInt32 _PR_DarwinPPC_AtomicAdd(PRInt32 *ptr, PRInt32 val);
#define _MD_ATOMIC_ADD(ptr, val) _PR_DarwinPPC_AtomicAdd(ptr, val)
-#endif /* __ppc__ */
+#elif defined(__i386__)
+#define _PR_HAVE_ATOMIC_OPS
+#define _MD_INIT_ATOMIC()
+extern PRInt32 _PR_Darwin_x86_AtomicIncrement(PRInt32 *val);
+#define _MD_ATOMIC_INCREMENT(val) _PR_Darwin_x86_AtomicIncrement(val)
+extern PRInt32 _PR_Darwin_x86_AtomicDecrement(PRInt32 *val);
+#define _MD_ATOMIC_DECREMENT(val) _PR_Darwin_x86_AtomicDecrement(val)
+extern PRInt32 _PR_Darwin_x86_AtomicSet(PRInt32 *val, PRInt32 newval);
+#define _MD_ATOMIC_SET(val, newval) _PR_Darwin_x86_AtomicSet(val, newval)
+extern PRInt32 _PR_Darwin_x86_AtomicAdd(PRInt32 *ptr, PRInt32 val);
+#define _MD_ATOMIC_ADD(ptr, val) _PR_Darwin_x86_AtomicAdd(ptr, val)
+#endif /* __i386__ */
#define USE_SETJMP
diff --git a/pr/include/md/_hpux.h b/pr/include/md/_hpux.h
index 73928313..2a6f177f 100644
--- a/pr/include/md/_hpux.h
+++ b/pr/include/md/_hpux.h
@@ -44,8 +44,18 @@
#define PR_LINKER_ARCH "hpux"
#define _PR_SI_SYSNAME "HPUX"
+#ifdef __ia64
+#define _PR_SI_ARCHITECTURE "ia64"
+#define PR_DLL_SUFFIX ".so"
+#else
+/*
+ * _PR_SI_ARCHITECTURE must be "hppa1.1" for backward compatibility.
+ * It was changed to "hppa" in NSPR 4.6.2, but was changed back in
+ * NSPR 4.6.4.
+ */
#define _PR_SI_ARCHITECTURE "hppa1.1"
#define PR_DLL_SUFFIX ".sl"
+#endif
#define _PR_VMBASE 0x30000000
#define _PR_STACK_VMBASE 0x50000000
@@ -80,14 +90,44 @@
#define PR_HAVE_POSIX_NAMED_SHARED_MEMORY
#define _PR_ACCEPT_INHERIT_NONBLOCK
-#undef _PR_HAVE_ATOMIC_OPS
+#if defined(__ia64)
+#define _PR_HAVE_ATOMIC_OPS
+#define _MD_INIT_ATOMIC()
+extern PRInt32 _PR_ia64_AtomicIncrement(PRInt32 *val);
+#define _MD_ATOMIC_INCREMENT _PR_ia64_AtomicIncrement
+extern PRInt32 _PR_ia64_AtomicDecrement(PRInt32 *val);
+#define _MD_ATOMIC_DECREMENT _PR_ia64_AtomicDecrement
+extern PRInt32 _PR_ia64_AtomicAdd(PRInt32 *ptr, PRInt32 val);
+#define _MD_ATOMIC_ADD _PR_ia64_AtomicAdd
+extern PRInt32 _PR_ia64_AtomicSet(PRInt32 *val, PRInt32 newval);
+#define _MD_ATOMIC_SET _PR_ia64_AtomicSet
+#endif
-#ifdef _PR_INET6
-#define _PR_HAVE_INET_NTOP
#define _PR_HAVE_GETIPNODEBYNAME
#define _PR_HAVE_GETIPNODEBYADDR
#define _PR_HAVE_GETADDRINFO
+#ifdef _PR_INET6
+#define _PR_HAVE_INET_NTOP
+#else
#define _PR_INET6_PROBE
+#define _PR_HAVE_MD_SOCKADDR_IN6
+/* isomorphic to struct in6_addr on HP-UX B.11.23 */
+struct _md_in6_addr {
+ union {
+ PRUint8 _S6_u8[16];
+ PRUint16 _S6_u16[8];
+ PRUint32 _S6_u32[4];
+ PRUint32 __S6_align;
+ } _s6_un;
+};
+/* isomorphic to struct sockaddr_in6 on HP-UX B.11.23 */
+struct _md_sockaddr_in6 {
+ PRUint16 sin6_family;
+ PRUint16 sin6_port;
+ PRUint32 sin6_flowinfo;
+ struct _md_in6_addr sin6_addr;
+ PRUint32 sin6_scope_id;
+};
#endif
#if !defined(_PR_PTHREADS)
diff --git a/pr/include/md/_netbsd.h b/pr/include/md/_netbsd.h
index cc16f105..db25bd89 100644
--- a/pr/include/md/_netbsd.h
+++ b/pr/include/md/_netbsd.h
@@ -1,36 +1,39 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
* The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
* Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
#ifndef nspr_netbsd_defs_h___
#define nspr_netbsd_defs_h___
@@ -104,100 +107,40 @@
#define CONTEXT(_th) ((_th)->md.context)
+#if defined(__i386__) || defined(__sparc__) || defined(__m68k__) || defined(__powerpc__)
+#define JB_SP_INDEX 2
+#elif defined(__mips__)
+#define JB_SP_INDEX 4
+#elif defined(__alpha__)
+#define JB_SP_INDEX 34
+#elif defined(__arm32__)
/*
-** Initialize a thread context to run "_main()" when started
-*/
-#ifdef __i386__
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
-{ \
- sigsetjmp(CONTEXT(_thread), 1); \
- CONTEXT(_thread)[2] = (unsigned char*) ((_sp) - 128); \
- CONTEXT(_thread)[0] = (int) _main; \
- *status = PR_TRUE; \
-}
-#define _MD_GET_SP(_thread) CONTEXT(_thread)[2]
-#endif
-#ifdef __sparc_v9__
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
-{ \
- sigsetjmp(CONTEXT(_thread), 1); \
- CONTEXT(_thread)[1] = (unsigned char*) ((_sp) - 176 - 0x7ff); \
- CONTEXT(_thread)[2] = (long) _main; \
- CONTEXT(_thread)[3] = (long) _main + 4; \
- *status = PR_TRUE; \
-}
-#define _MD_GET_SP(_thread) (CONTEXT(_thread)[2]+0x7ff)
-#elif defined(__sparc__)
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
-{ \
- sigsetjmp(CONTEXT(_thread), 1); \
- CONTEXT(_thread)[2] = (unsigned char*) ((_sp) - 128); \
- CONTEXT(_thread)[3] = (int) _main; \
- CONTEXT(_thread)[4] = (int) _main + 4; \
- *status = PR_TRUE; \
-}
-#define _MD_GET_SP(_thread) CONTEXT(_thread)[2]
-#endif
-#ifdef __powerpc__
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
-{ \
- sigsetjmp(CONTEXT(_thread), 1); \
- CONTEXT(_thread)[3] = (unsigned char*) ((_sp) - 128); \
- CONTEXT(_thread)[4] = (int) _main; \
- *status = PR_TRUE; \
-}
-#define _MD_GET_SP(_thread) CONTEXT(_thread)[3]
-#endif
-#ifdef __m68k__
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
-{ \
- sigsetjmp(CONTEXT(_thread), 1); \
- CONTEXT(_thread)[2] = (unsigned char*) ((_sp) - 128); \
- CONTEXT(_thread)[5] = (int) _main; \
- *status = PR_TRUE; \
-}
-#define _MD_GET_SP(_thread) CONTEXT(_thread)[2]
-#endif
-#ifdef __mips__
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
-{ \
- sigsetjmp(CONTEXT(_thread), 1); \
- CONTEXT(_thread)[32] = (unsigned char*) ((_sp) - 128); \
- CONTEXT(_thread)[2] = (int) _main; \
- CONTEXT(_thread)[28] = (int) _main; \
- *status = PR_TRUE; \
-}
-#define _MD_GET_SP(_thread) CONTEXT(_thread)[32]
-#endif
-#if defined(__arm32__) || defined(__arm__) || defined(__armel__) \
- || defined(__armeb__)
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
-{ \
- sigsetjmp(CONTEXT(_thread), 1); \
- CONTEXT(_thread)[23] = (unsigned char*) ((_sp) - 128); \
- CONTEXT(_thread)[24] = (int) _main; \
- *status = PR_TRUE; \
-}
-#define _MD_GET_SP(_thread) CONTEXT(_thread)[23]
-#endif
-#ifdef __alpha__
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
-{ \
- sigsetjmp(CONTEXT(_thread), 1); \
- CONTEXT(_thread)[34] = (unsigned char*) ((_sp) - 128); \
- CONTEXT(_thread)[2] = (long) _main; \
- CONTEXT(_thread)[30] = (long) _main; \
- CONTEXT(_thread)[31] = (long) _main; \
- *status = PR_TRUE; \
-}
-#define _MD_GET_SP(_thread) CONTEXT(_thread)[34]
+ * On the arm32, the jmpbuf regs underwent a name change after NetBSD 1.3.
+ */
+#ifdef JMPBUF_REG_R13
+#define JB_SP_INDEX JMPBUF_REG_R13
+#else
+#define JB_SP_INDEX _JB_REG_R13
#endif
-#ifndef _MD_INIT_CONTEXT
-#error "Need to define _MD_INIT_CONTEXT for this platform"
+#else
+#error "Need to define SP index in jmp_buf here"
#endif
+#define _MD_GET_SP(_th) (_th)->md.context[JB_SP_INDEX]
#define PR_NUM_GCREGS _JBLEN
+/*
+** Initialize a thread context to run "_main()" when started
+*/
+#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
+{ \
+ *status = PR_TRUE; \
+ if (sigsetjmp(CONTEXT(_thread), 1)) { \
+ _main(); \
+ } \
+ _MD_GET_SP(_thread) = (unsigned char*) ((_sp) - 64); \
+}
+
#define _MD_SWITCH_CONTEXT(_thread) \
if (!sigsetjmp(CONTEXT(_thread), 1)) { \
(_thread)->md.errcode = errno; \
diff --git a/pr/include/md/_openvms.h b/pr/include/md/_openvms.h
index 1ee7e428..c2f3dc68 100644
--- a/pr/include/md/_openvms.h
+++ b/pr/include/md/_openvms.h
@@ -101,6 +101,7 @@ struct ip_mreq {
#define _PR_STAT_HAS_ONLY_ST_ATIME
#define _PR_NO_LARGE_FILES
#define _PR_STRICT_ADDR_LEN
+#define _PR_NEED_SECRET_AF
/* IPv6 support */
#ifdef _SOCKADDR_LEN
diff --git a/pr/include/md/_pth.h b/pr/include/md/_pth.h
index aadb45e0..c1e428c8 100644
--- a/pr/include/md/_pth.h
+++ b/pr/include/md/_pth.h
@@ -202,13 +202,6 @@
#define PT_NO_SIGTIMEDWAIT
#endif
-/*
- * These platforms don't have pthread_kill()
- */
-#if defined(DARWIN)
-#define pthread_kill(thread, sig) ENOSYS
-#endif
-
#if defined(OSF1) || defined(VMS)
#define PT_PRIO_MIN PRI_OTHER_MIN
#define PT_PRIO_MAX PRI_OTHER_MAX
diff --git a/pr/include/md/_win95.h b/pr/include/md/_win95.h
index cd26bd63..4569a2a3 100644
--- a/pr/include/md/_win95.h
+++ b/pr/include/md/_win95.h
@@ -265,8 +265,9 @@ extern PRInt32 _MD_CloseFile(PRInt32 osfd);
#define _MD_TLOCKFILE _PR_MD_TLOCKFILE
#define _MD_UNLOCKFILE _PR_MD_UNLOCKFILE
-#ifdef MOZ_UNICODE
/* --- UTF16 IO stuff --- */
+extern PRBool _pr_useUnicode;
+#ifdef MOZ_UNICODE
#define _MD_OPEN_FILE_UTF16 _PR_MD_OPEN_FILE_UTF16
#define _MD_OPEN_DIR_UTF16 _PR_MD_OPEN_DIR_UTF16
#define _MD_READ_DIR_UTF16 _PR_MD_READ_DIR_UTF16
@@ -275,6 +276,8 @@ extern PRInt32 _MD_CloseFile(PRInt32 osfd);
#endif /* MOZ_UNICODE */
/* --- Socket IO stuff --- */
+extern void _PR_MD_InitSockets(void);
+extern void _PR_MD_CleanupSockets(void);
#define _MD_EACCES WSAEACCES
#define _MD_EADDRINUSE WSAEADDRINUSE
#define _MD_EADDRNOTAVAIL WSAEADDRNOTAVAIL
diff --git a/pr/include/md/_winnt.h b/pr/include/md/_winnt.h
index 0e6ce819..6757b88a 100644
--- a/pr/include/md/_winnt.h
+++ b/pr/include/md/_winnt.h
@@ -112,6 +112,7 @@ struct _md_sockaddr_in6 {
#define _PR_PEEK_BUFFER_MAX (32 * 1024)
#define _PR_FD_NEED_EMULATE_MSG_PEEK(fd) \
(!(fd)->secret->nonblocking && (fd)->secret->inheritable != _PR_TRI_TRUE)
+#define _PR_NEED_SECRET_AF
/* --- Common User-Thread/Native-Thread Definitions --------------------- */
diff --git a/pr/include/obsolete/probslet.h b/pr/include/obsolete/probslet.h
index 374e696c..fffd1ed8 100644
--- a/pr/include/obsolete/probslet.h
+++ b/pr/include/obsolete/probslet.h
@@ -158,6 +158,15 @@ NSPR_API(void) PR_FD_NSET(PRInt32 osfd, PR_fd_set *set);
NSPR_API(void) PR_FD_NCLR(PRInt32 osfd, PR_fd_set *set);
NSPR_API(PRInt32) PR_FD_NISSET(PRInt32 osfd, PR_fd_set *set);
+/*
+** The next two entry points should not be in the API, but they are
+** declared here for historical reasons.
+*/
+
+NSPR_API(PRInt32) PR_GetSysfdTableMax(void);
+
+NSPR_API(PRInt32) PR_SetSysfdTableSize(PRIntn table_size);
+
#ifndef NO_NSPR_10_SUPPORT
#ifdef XP_MAC
#include <stat.h>
diff --git a/pr/include/obsolete/protypes.h b/pr/include/obsolete/protypes.h
index c2a3c9b3..4405bfce 100644
--- a/pr/include/obsolete/protypes.h
+++ b/pr/include/obsolete/protypes.h
@@ -152,14 +152,12 @@ typedef PRInt64 int64;
#if !defined(XP_BEOS) && !defined(VMS) \
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
&& !defined(HPUX)
-#if !defined(WIN32) || !defined(_WINSOCK2API_) /* defines its own "int32" */
#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
typedef PRInt32 int32;
#else
typedef long int32;
#endif
#endif
-#endif
/*
* int16
diff --git a/pr/include/prinet.h b/pr/include/prinet.h
index 2c733b0b..02dfef6f 100644
--- a/pr/include/prinet.h
+++ b/pr/include/prinet.h
@@ -60,10 +60,6 @@
#define prinet_h__
#if defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS)
-#ifdef LINUX
-#undef __STRICT_ANSI__
-#define __STRICT_ANSI__
-#endif
#include <sys/types.h>
#include <sys/socket.h> /* AF_INET */
#include <netinet/in.h> /* INADDR_ANY, ..., ntohl(), ... */
diff --git a/pr/include/prinit.h b/pr/include/prinit.h
index e7ca7bce..f88ecbde 100644
--- a/pr/include/prinit.h
+++ b/pr/include/prinit.h
@@ -63,11 +63,11 @@ PR_BEGIN_EXTERN_C
** The format of the version string is
** "<major version>.<minor version>[.<patch level>] [<Beta>]"
*/
-#define PR_VERSION "4.6.1 Beta"
+#define PR_VERSION "4.6.8"
#define PR_VMAJOR 4
#define PR_VMINOR 6
-#define PR_VPATCH 1
-#define PR_BETA PR_TRUE
+#define PR_VPATCH 8
+#define PR_BETA PR_FALSE
/*
** PRVersionCheck
diff --git a/pr/include/private/primpl.h b/pr/include/private/primpl.h
index eebcb841..e2e3e606 100644
--- a/pr/include/private/primpl.h
+++ b/pr/include/private/primpl.h
@@ -1745,12 +1745,10 @@ struct PRFilePrivate {
* append mode. See Bugzilla 4090, 276330. */
#endif
_MDFileDesc md;
-#ifdef _PR_STRICT_ADDR_LEN
- PRUint16 af; /* If the platform requires passing the exact
- * length of the sockaddr structure for the
- * address family of the socket to socket
- * functions like accept(), we need to save
- * the address family of the socket. */
+#ifdef _PR_NEED_SECRET_AF
+ PRUint16 af; /* If the platform's implementation of accept()
+ * requires knowing the address family of the
+ * socket, we save the address family here. */
#endif
};
@@ -1780,12 +1778,14 @@ extern void _PR_InitLinker(void);
extern void _PR_InitAtomic(void);
extern void _PR_InitCPUs(void);
extern void _PR_InitDtoa(void);
+extern void _PR_InitTime(void);
extern void _PR_InitMW(void);
extern void _PR_InitRWLocks(void);
extern void _PR_NotifyCondVar(PRCondVar *cvar, PRThread *me);
extern void _PR_CleanupThread(PRThread *thread);
extern void _PR_CleanupCallOnce(void);
extern void _PR_CleanupMW(void);
+extern void _PR_CleanupTime(void);
extern void _PR_CleanupDtoa(void);
extern void _PR_ShutdownLinker(void);
extern void _PR_CleanupEnv(void);
diff --git a/pr/include/prlink.h b/pr/include/prlink.h
index b2eb5141..f0cea829 100644
--- a/pr/include/prlink.h
+++ b/pr/include/prlink.h
@@ -118,15 +118,16 @@ NSPR_API(PRLibrary*) PR_LoadLibrary(const char *name);
** in a library, if code fragments are supported by the OS.
** A code fragment can be specified by name or by an integer index.
**
-** Right now PRLibSpec supports three types of library specification:
-** a pathname, a Mac code fragment by name, and a Mac code fragment
-** by index.
+** Right now PRLibSpec supports four types of library specification:
+** a pathname in the native character encoding, a Mac code fragment
+** by name, a Mac code fragment by index, and a UTF-16 pathname.
*/
typedef enum PRLibSpecType {
PR_LibSpec_Pathname,
PR_LibSpec_MacNamedFragment, /* obsolete (for Mac OS Classic) */
- PR_LibSpec_MacIndexedFragment /* obsolete (for Mac OS Classic) */
+ PR_LibSpec_MacIndexedFragment, /* obsolete (for Mac OS Classic) */
+ PR_LibSpec_PathnameU /* supported only on Win32 */
} PRLibSpecType;
struct FSSpec; /* Mac OS FSSpec */
@@ -148,6 +149,9 @@ typedef struct PRLibSpec {
const struct FSSpec *fsspec;
PRUint32 index;
} mac_indexed_fragment; /* obsolete (for Mac OS Classic) */
+
+ /* if type is PR_LibSpec_PathnameU */
+ const PRUnichar *pathname_u; /* supported only on Win32 */
} value;
} PRLibSpec;
@@ -161,6 +165,7 @@ typedef struct PRLibSpec {
#define PR_LD_NOW 0x2 /* equivalent to RTLD_NOW on Unix */
#define PR_LD_GLOBAL 0x4 /* equivalent to RTLD_GLOBAL on Unix */
#define PR_LD_LOCAL 0x8 /* equivalent to RTLD_LOCAL on Unix */
+/* 0x8000 reserved for NSPR internal use */
/*
** Load the specified library, in the manner specified by 'flags'.
diff --git a/pr/include/prsystem.h b/pr/include/prsystem.h
index b0dfcf9e..13cf8bab 100644
--- a/pr/include/prsystem.h
+++ b/pr/include/prsystem.h
@@ -70,10 +70,13 @@ NSPR_API(char) PR_GetPathSeparator(void);
/* Types of information available via PR_GetSystemInfo(...) */
typedef enum {
- PR_SI_HOSTNAME,
+ PR_SI_HOSTNAME, /* the hostname with the domain name (if any)
+ * removed */
PR_SI_SYSNAME,
PR_SI_RELEASE,
- PR_SI_ARCHITECTURE
+ PR_SI_ARCHITECTURE,
+ PR_SI_HOSTNAME_UNTRUNCATED /* the hostname exactly as configured
+ * on the system */
} PRSysInfo;
diff --git a/pr/include/prtypes.h b/pr/include/prtypes.h
index 3eb15548..09fe032a 100644
--- a/pr/include/prtypes.h
+++ b/pr/include/prtypes.h
@@ -178,7 +178,9 @@
#else /* Unix */
-#ifdef HAVE_VISIBILITY_PRAGMA
+/* GCC 3.3 and later support the visibility attribute. */
+#if (__GNUC__ >= 4) || \
+ (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
#define PR_VISIBILITY_DEFAULT __attribute__((visibility("default")))
#else
#define PR_VISIBILITY_DEFAULT
@@ -468,10 +470,6 @@ typedef PRUint8 PRPackedBool;
*/
typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
-#ifdef MOZ_UNICODE
-/*
- * EXPERIMENTAL: This type may be removed in a future release.
- */
#ifndef __PRUNICHAR__
#define __PRUNICHAR__
#if defined(WIN32) || defined(XP_MAC)
@@ -480,7 +478,6 @@ typedef wchar_t PRUnichar;
typedef PRUint16 PRUnichar;
#endif
#endif
-#endif /* MOZ_UNICODE */
/*
** WARNING: The undocumented data types PRWord and PRUword are
diff --git a/pr/src/Makefile.in b/pr/src/Makefile.in
index cf2f5229..2d785bdc 100644
--- a/pr/src/Makefile.in
+++ b/pr/src/Makefile.in
@@ -198,9 +198,9 @@ endif
ifeq ($(OS_ARCH),WINNT)
ifdef NS_USE_GCC
-OS_LIBS = -ladvapi32 -lwsock32
+OS_LIBS = -ladvapi32 -lwsock32 -lwinmm
else
-OS_LIBS = advapi32.lib wsock32.lib
+OS_LIBS = advapi32.lib wsock32.lib winmm.lib
endif
endif
@@ -316,11 +316,6 @@ OBJS += memory/$(OBJDIR)/prgcleak.$(OBJ_SUFFIX)
endif
ifeq ($(OS_ARCH), WINNT)
-ifdef NS_USE_GCC
-DLLBASE=-Wl,--image-base -Wl,0x30000000
-else
-DLLBASE=-BASE:0x30000000
-endif # GCC
RES=$(OBJDIR)/nspr.res
RESNAME=nspr.rc
endif # WINNT
diff --git a/pr/src/io/prfdcach.c b/pr/src/io/prfdcach.c
index aea19dff..d1277fcd 100644
--- a/pr/src/io/prfdcach.c
+++ b/pr/src/io/prfdcach.c
@@ -277,6 +277,14 @@ void _PR_InitFdCache(void)
if (NULL != low) _pr_fd_cache.limit_low = atoi(low);
if (NULL != high) _pr_fd_cache.limit_high = atoi(high);
+ if (_pr_fd_cache.limit_low < 0)
+ _pr_fd_cache.limit_low = 0;
+ if (_pr_fd_cache.limit_low > FD_SETSIZE)
+ _pr_fd_cache.limit_low = FD_SETSIZE;
+
+ if (_pr_fd_cache.limit_high > FD_SETSIZE)
+ _pr_fd_cache.limit_high = FD_SETSIZE;
+
if (_pr_fd_cache.limit_high < _pr_fd_cache.limit_low)
_pr_fd_cache.limit_high = _pr_fd_cache.limit_low;
diff --git a/pr/src/io/prfile.c b/pr/src/io/prfile.c
index d91bffa2..d5610bf2 100644
--- a/pr/src/io/prfile.c
+++ b/pr/src/io/prfile.c
@@ -99,10 +99,9 @@ static PRInt32 PR_CALLBACK FileWrite(PRFileDesc *fd, const void *buf, PRInt32 am
count = 0;
#if !defined(_PR_HAVE_O_APPEND) /* Bugzilla: 4090, 276330 */
- if ( PR_TRUE == fd->secret->appendMode ) {
- rv = PR_Seek(fd, 0, PR_SEEK_END );
- if ( -1 == rv ) {
- return rv;
+ if (fd->secret->appendMode) {
+ if (PR_Seek64(fd, 0, PR_SEEK_END) == -1) {
+ return -1;
}
} /* if (fd->secret->appendMode...) */
#endif /* _PR_HAVE_O_APPEND */
@@ -412,7 +411,7 @@ PR_IMPLEMENT(PRFileDesc*) PR_OpenFile(
return fd;
}
-PRInt32 PR_GetSysfdTableMax(void)
+PR_IMPLEMENT(PRInt32) PR_GetSysfdTableMax(void)
{
#if defined(XP_UNIX) && !defined(AIX) && !defined(NEXTSTEP) && !defined(QNX)
struct rlimit rlim;
@@ -445,7 +444,7 @@ PRInt32 PR_GetSysfdTableMax(void)
#endif
}
-PRInt32 PR_SetSysfdTableSize(int table_size)
+PR_IMPLEMENT(PRInt32) PR_SetSysfdTableSize(int table_size)
{
#if defined(XP_UNIX) && !defined(AIX) && !defined(NEXTSTEP) && !defined(QNX)
struct rlimit rlim;
diff --git a/pr/src/io/prlog.c b/pr/src/io/prlog.c
index ab348d4f..d6c6e6c5 100644
--- a/pr/src/io/prlog.c
+++ b/pr/src/io/prlog.c
@@ -255,6 +255,12 @@ void _PR_InitLog(void)
}
PR_SetLogBuffering(isSync ? bufSize : 0);
+#ifdef XP_UNIX
+ if ((getuid() != geteuid()) || (getgid() != getegid())) {
+ return;
+ }
+#endif /* XP_UNIX */
+
ev = PR_GetEnv("NSPR_LOG_FILE");
if (ev && ev[0]) {
if (!PR_SetLogFile(ev)) {
@@ -293,10 +299,12 @@ void _PR_LogCleanup(void)
#endif
) {
fclose(logFile);
+ logFile = NULL;
}
#else
if (logFile && logFile != _pr_stdout && logFile != _pr_stderr) {
PR_Close(logFile);
+ logFile = NULL;
}
#endif
diff --git a/pr/src/io/prprf.c b/pr/src/io/prprf.c
index cd5760a9..fa444e2c 100644
--- a/pr/src/io/prprf.c
+++ b/pr/src/io/prprf.c
@@ -373,7 +373,7 @@ static int cvt_f(SprintfState *ss, double d, const char *fmt0, const char *fmt1)
** width. "prec" is the maximum number of characters of "s" to output,
** where -1 means until NUL.
*/
-static int cvt_s(SprintfState *ss, const char *s, int width, int prec,
+static int cvt_s(SprintfState *ss, const char *str, int width, int prec,
int flags)
{
int slen;
@@ -382,15 +382,22 @@ static int cvt_s(SprintfState *ss, const char *s, int width, int prec,
return 0;
/* Limit string length by precision value */
- slen = s ? strlen(s) : 6;
+ if (!str) {
+ str = "(null)";
+ }
if (prec > 0) {
- if (prec < slen) {
- slen = prec;
- }
+ /* this is: slen = strnlen(str, prec); */
+ register const char *s;
+
+ for(s = str; prec && *s; s++, prec-- )
+ ;
+ slen = s - str;
+ } else {
+ slen = strlen(str);
}
/* and away we go */
- return fill2(ss, s ? s : "(null)", slen, width, flags);
+ return fill2(ss, str, slen, width, flags);
}
/*
diff --git a/pr/src/io/prsocket.c b/pr/src/io/prsocket.c
index 8be198fa..629106db 100644
--- a/pr/src/io/prsocket.c
+++ b/pr/src/io/prsocket.c
@@ -199,6 +199,13 @@ PRFileDesc *fd;
if (fd != NULL) {
_PR_MD_MAKE_NONBLOCK(fd);
_PR_MD_INIT_FD_INHERITABLE(fd, PR_TRUE);
+#ifdef _PR_NEED_SECRET_AF
+ /* this means we can only import IPv4 sockets here.
+ * but this is what the function in ptio.c does.
+ * We need a way to import IPv6 sockets, too.
+ */
+ fd->secret->af = AF_INET;
+#endif
} else
_PR_MD_CLOSE_SOCKET(osfd);
return(fd);
@@ -514,6 +521,9 @@ PRIntervalTime timeout)
if (AF_INET6 == addr->raw.family)
addr->raw.family = PR_AF_INET6;
#endif
+#ifdef _PR_NEED_SECRET_AF
+ fd2->secret->af = fd->secret->af;
+#endif
}
return fd2;
}
@@ -943,6 +953,9 @@ PRIntervalTime timeout)
if (AF_INET6 == *raddr->raw.family)
*raddr->raw.family = PR_AF_INET6;
#endif
+#ifdef _PR_NEED_SECRET_AF
+ (*nd)->secret->af = sd->secret->af;
+#endif
}
}
return rv;
@@ -994,6 +1007,9 @@ void *callbackArg)
if (AF_INET6 == *raddr->raw.family)
*raddr->raw.family = PR_AF_INET6;
#endif
+#ifdef _PR_NEED_SECRET_AF
+ (*nd)->secret->af = sd->secret->af;
+#endif
}
}
return rv;
@@ -1312,6 +1328,9 @@ PR_IMPLEMENT(PRFileDesc*) PR_Socket(PRInt32 domain, PRInt32 type, PRInt32 proto)
if (fd != NULL) {
_PR_MD_MAKE_NONBLOCK(fd);
_PR_MD_INIT_FD_INHERITABLE(fd, PR_FALSE);
+#ifdef _PR_NEED_SECRET_AF
+ fd->secret->af = domain;
+#endif
#if defined(_PR_INET6_PROBE) || !defined(_PR_INET6)
/*
* For platforms with no support for IPv6
diff --git a/pr/src/linking/Makefile.in b/pr/src/linking/Makefile.in
index 71fbf571..9b82aca2 100644
--- a/pr/src/linking/Makefile.in
+++ b/pr/src/linking/Makefile.in
@@ -62,14 +62,9 @@ TARGETS = $(OBJS)
INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private
-# For Dl_info and dladdr.
-ifeq ($(OS_TARGET),Linux)
-DEFINES += -D_GNU_SOURCE
-endif
-
# On Mac OS X use flat #includes.
ifeq ($(OS_TARGET),MacOSX)
-INCLUDES += -I$(NEXT_ROOT)/Developer/Headers/FlatCarbon
+INCLUDES += -I$(MACOS_SDK_DIR)/Developer/Headers/FlatCarbon
endif
DEFINES += -D_NSPR_BUILD_
diff --git a/pr/src/linking/prlink.c b/pr/src/linking/prlink.c
index 55831bf7..5f83f257 100644
--- a/pr/src/linking/prlink.c
+++ b/pr/src/linking/prlink.c
@@ -1,36 +1,40 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
* The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
- * Contributor(s): Steve Streeter (Hewlett-Packard Company)
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Steve Streeter (Hewlett-Packard Company)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
#include "primpl.h"
@@ -157,6 +161,8 @@ struct _imcb *IAC$GL_IMAGE_LIST = NULL;
#define NEED_LEADING_UNDERSCORE
#endif
+#define PR_LD_PATHW 0x8000 /* for PR_LibSpec_PathnameU */
+
/************************************************************************/
struct PRLibrary {
@@ -204,6 +210,16 @@ static char* _pr_currentLibPath = NULL;
static PRLibrary *pr_LoadLibraryByPathname(const char *name, PRIntn flags);
+#ifdef WIN95
+typedef HMODULE (WINAPI *LoadLibraryWFn)(LPCWSTR);
+static HMODULE WINAPI EmulateLoadLibraryW(LPCWSTR);
+static LoadLibraryWFn loadLibraryW = LoadLibraryW;
+#endif
+
+#ifdef WIN32
+static int pr_ConvertUTF16toUTF8(LPCWSTR wname, LPSTR name, int len);
+#endif
+
/************************************************************************/
#if !defined(USE_DLFCN) && !defined(HAVE_STRERROR)
@@ -244,6 +260,12 @@ void _PR_InitLinker(void)
void *h;
#endif
+#ifdef WIN95
+ if (!_pr_useUnicode) {
+ loadLibraryW = EmulateLoadLibraryW;
+ }
+#endif
+
if (!pr_linker_lock) {
pr_linker_lock = PR_NewNamedMonitor("linker-lock");
}
@@ -556,6 +578,16 @@ PR_LoadLibraryWithFlags(PRLibSpec libSpec, PRIntn flags)
switch (libSpec.type) {
case PR_LibSpec_Pathname:
return pr_LoadLibraryByPathname(libSpec.value.pathname, flags);
+#ifdef WIN32
+ case PR_LibSpec_PathnameU:
+ /*
+ * cast to |char *| and set PR_LD_PATHW flag so that
+ * it can be cast back to PRUnichar* in the callee.
+ */
+ return pr_LoadLibraryByPathname((const char*)
+ libSpec.value.pathname_u,
+ flags | PR_LD_PATHW);
+#endif
default:
PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
return NULL;
@@ -744,6 +776,25 @@ pr_LoadViaDyld(const char *name, PRLibrary *lm)
#endif /* XP_MACOSX */
+#ifdef WIN95
+static HMODULE WINAPI
+EmulateLoadLibraryW(LPCWSTR lpLibFileName)
+{
+ HMODULE h;
+ char nameA[MAX_PATH];
+
+ if (!WideCharToMultiByte(CP_ACP, 0, lpLibFileName, -1,
+ nameA, sizeof nameA, NULL, NULL)) {
+ return NULL;
+ }
+ /* Perhaps it's better to add a check for characters
+ * not representable in CP_ACP.
+ */
+ h = LoadLibraryA(nameA);
+ return h;
+}
+#endif /* WIN95 */
+
/*
** Dynamically load a library. Only load libraries once, so scan the load
** map first.
@@ -752,15 +803,52 @@ static PRLibrary*
pr_LoadLibraryByPathname(const char *name, PRIntn flags)
{
PRLibrary *lm;
- PRLibrary* result;
+ PRLibrary* result = NULL;
PRInt32 oserr;
+#ifdef WIN32
+ char utf8name_stack[MAX_PATH];
+ char *utf8name_malloc = NULL;
+ char *utf8name = utf8name_stack;
+ PRUnichar wname_stack[MAX_PATH];
+ PRUnichar *wname_malloc = NULL;
+ PRUnichar *wname = wname_stack;
+ int len;
+#endif
if (!_pr_initialized) _PR_ImplicitInitialization();
/* See if library is already loaded */
PR_EnterMonitor(pr_linker_lock);
+#ifdef WIN32
+ if (flags & PR_LD_PATHW) {
+ /* cast back what's cast to |char *| for the argument passing. */
+ wname = (LPWSTR) name;
+ } else {
+ int wlen = MultiByteToWideChar(CP_ACP, 0, name, -1, NULL, 0);
+ if (wlen > MAX_PATH)
+ wname = wname_malloc = PR_Malloc(wlen * sizeof(PRUnichar));
+ if (wname == NULL ||
+ !MultiByteToWideChar(CP_ACP, 0, name, -1, wname, wlen)) {
+ oserr = _MD_ERRNO();
+ goto unlock;
+ }
+ }
+ len = pr_ConvertUTF16toUTF8(wname, NULL, 0);
+ if (len > MAX_PATH)
+ utf8name = utf8name_malloc = PR_Malloc(len);
+ if (utf8name == NULL ||
+ !pr_ConvertUTF16toUTF8(wname, utf8name, len)) {
+ oserr = _MD_ERRNO();
+ goto unlock;
+ }
+ /* the list of loaded library names are always kept in UTF-8
+ * on Win32 platforms */
+ result = pr_UnlockedFindLibrary(utf8name);
+#else
result = pr_UnlockedFindLibrary(name);
+#endif
+
if (result != NULL) goto unlock;
lm = PR_NEWZAP(PRLibrary);
@@ -793,13 +881,31 @@ pr_LoadLibraryByPathname(const char *name, PRIntn flags)
{
HINSTANCE h;
+#ifdef WIN32
+#ifdef WIN95
+ if (flags & PR_LD_PATHW)
+ h = loadLibraryW(wname);
+ else
+ h = LoadLibraryA(name);
+#else
+ if (flags & PR_LD_PATHW)
+ h = LoadLibraryW(wname);
+ else
+ h = LoadLibraryA(name);
+#endif /* WIN95 */
+#else
h = LoadLibrary(name);
+#endif
if (h < (HINSTANCE)HINSTANCE_ERROR) {
oserr = _MD_ERRNO();
PR_DELETE(lm);
goto unlock;
}
+#ifdef WIN32
+ lm->name = strdup(utf8name);
+#else
lm->name = strdup(name);
+#endif
lm->dlh = h;
lm->next = pr_loadmap;
pr_loadmap = lm;
@@ -996,10 +1102,135 @@ pr_LoadLibraryByPathname(const char *name, PRIntn flags)
PR_SetError(PR_LOAD_LIBRARY_ERROR, oserr);
DLLErrorInternal(oserr); /* sets error text */
}
+#ifdef WIN32
+ if (utf8name_malloc)
+ PR_Free(utf8name_malloc);
+ if (wname_malloc)
+ PR_Free(wname_malloc);
+#endif
PR_ExitMonitor(pr_linker_lock);
return result;
}
+#ifdef WIN32
+#ifdef WIN95
+/*
+ * CP_UTF8 is not supported by WideCharToMultiByte on Windows 95 so that
+ * we have to emulate it
+ */
+static PRStatus
+pr_ConvertSingleCharToUTF8(PRUint32 usv, PRUint16 offset, int bufLen,
+ int *utf8Len, char * *buf)
+{
+ char* p = *buf;
+ PR_ASSERT(!bufLen || *buf);
+ if (!bufLen) {
+ *utf8Len += offset;
+ return PR_SUCCESS;
+ }
+
+ if (*utf8Len + offset >= bufLen)
+ return PR_FAILURE;
+
+ *utf8Len += offset;
+ if (offset == 1) {
+ *p++ = (char) usv;
+ } else if (offset == 2) {
+ *p++ = (char)0xc0 | (usv >> 6);
+ *p++ = (char)0x80 | (usv & 0x003f);
+ } else if (offset == 3) {
+ *p++ = (char)0xe0 | (usv >> 12);
+ *p++ = (char)0x80 | ((usv >> 6) & 0x003f);
+ *p++ = (char)0x80 | (usv & 0x003f);
+ } else { /* offset = 4 */
+ *p++ = (char)0xf0 | (usv >> 18);
+ *p++ = (char)0x80 | ((usv >> 12) & 0x003f);
+ *p++ = (char)0x80 | ((usv >> 6) & 0x003f);
+ *p++ = (char)0x80 | (usv & 0x003f);
+ }
+
+ *buf = p;
+ return PR_SUCCESS;
+}
+
+static int pr_ConvertUTF16toUTF8(LPCWSTR wname, LPSTR name, int len)
+{
+ LPCWSTR pw = wname;
+ LPSTR p = name;
+ int utf8Len = 0;
+ PRBool highSurrogate = PR_FALSE;
+
+ utf8Len = WideCharToMultiByte(CP_UTF8, 0, wname, -1, name, len,
+ NULL, NULL);
+ /*
+ * Windows 95 and NT 3.51 don't support CP_UTF8.
+ * WideCharToMultiByte(CP_UTF8, ...) fails with the error code
+ * ERROR_INVALID_PARAMETER on Windows 95 and NT 3.51.
+ */
+ if (utf8Len || GetLastError() != ERROR_INVALID_PARAMETER)
+ return utf8Len;
+
+ if (!wname || len < 0 || (len > 0 && !name)) {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+ }
+
+ while (*pw) {
+ PRStatus status = PR_SUCCESS;
+ if (highSurrogate) {
+ if (*pw >= (PRUnichar) 0xDC00 && *pw < (PRUnichar) 0xE000) {
+ /* found a matching low surrogate */
+ /* convert a surrogate pair to UCS4 */
+ PRUint32 usv = ((*(pw-1) - (PRUnichar)0xD800) << 10) +
+ (*pw - (PRUnichar)0xDC00) + (PRUint32)0x10000;
+ if (pr_ConvertSingleCharToUTF8(usv, 4, len, &utf8Len, &p) ==
+ PR_FAILURE)
+ return 0;
+ highSurrogate = PR_FALSE;
+ ++pw;
+ continue;
+ } else {
+ /*
+ * silently ignore a lone high surrogate
+ * as is done by WideCharToMultiByte by default
+ */
+ highSurrogate = PR_FALSE;
+ }
+ }
+ if (*pw <= 0x7f)
+ status = pr_ConvertSingleCharToUTF8(*pw, 1, len, &utf8Len, &p);
+ else if (*pw <= 0x07ff)
+ status = pr_ConvertSingleCharToUTF8(*pw, 2, len, &utf8Len, &p);
+ else if (*pw < (PRUnichar) 0xD800 || *pw >= (PRUnichar) 0xE000)
+ status = pr_ConvertSingleCharToUTF8(*pw, 3, len, &utf8Len, &p);
+ else if (*pw < (PRUnichar) 0xDC00)
+ highSurrogate = PR_TRUE;
+ /* else */
+ /* silently ignore a lone low surrogate as is done by
+ * WideCharToMultiByte by default */
+
+ if (status == PR_FAILURE) {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return 0;
+ }
+ ++pw;
+ }
+
+ /* if we're concerned with a lone high surrogate,
+ * we have to take care of it here, but we just drop it
+ */
+ if (len > 0)
+ *p = '\0';
+ return utf8Len + 1;
+}
+#else
+static int pr_ConvertUTF16toUTF8(LPCWSTR wname, LPSTR name, int len)
+{
+ return WideCharToMultiByte(CP_UTF8, 0, wname, -1, name, len, NULL, NULL);
+}
+#endif /* WIN95 */
+#endif /* WIN32 */
+
/*
** Unload a shared library which was loaded via PR_LoadLibrary
*/
@@ -1036,7 +1267,8 @@ PR_UnloadLibrary(PRLibrary *lib)
#elif defined(USE_HPSHL)
result = shl_unload(lib->dlh);
#elif defined(USE_MACH_DYLD)
- result = NSUnLinkModule(lib->dlh, NSUNLINKMODULE_OPTION_NONE) ? 0 : -1;
+ if (lib->dlh)
+ result = NSUnLinkModule(lib->dlh, NSUNLINKMODULE_OPTION_NONE) ? 0 : -1;
#else
#error Configuration error
#endif
diff --git a/pr/src/md/beos/bfile.c b/pr/src/md/beos/bfile.c
index 103fb8ef..4ab02d06 100644
--- a/pr/src/md/beos/bfile.c
+++ b/pr/src/md/beos/bfile.c
@@ -1,36 +1,39 @@
/* -*- Mode: C++; tab-width: 8; c-basic-offset: 8 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
* The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
* Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
#include "primpl.h"
diff --git a/pr/src/md/beos/brng.c b/pr/src/md/beos/brng.c
index 0aba8da3..f1bed4f3 100644
--- a/pr/src/md/beos/brng.c
+++ b/pr/src/md/beos/brng.c
@@ -1,36 +1,39 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
* The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1999-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1999-2000
+ * the Initial Developer. All Rights Reserved.
+ *
* Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
#include <stdio.h>
diff --git a/pr/src/md/os2/os2thred.c b/pr/src/md/os2/os2thred.c
index 69f06aa0..48aab74b 100644
--- a/pr/src/md/os2/os2thred.c
+++ b/pr/src/md/os2/os2thred.c
@@ -261,7 +261,7 @@ _PR_MD_YIELD(void)
void
_PR_MD_SET_PRIORITY(_MDThread *thread, PRThreadPriority newPri)
{
- int nativePri;
+ int nativePri = PRTYC_NOCHANGE;
BOOL rv;
if (newPri < PR_PRIORITY_FIRST) {
@@ -271,8 +271,6 @@ _PR_MD_SET_PRIORITY(_MDThread *thread, PRThreadPriority newPri)
}
switch (newPri) {
case PR_PRIORITY_LOW:
- nativePri = PRTYC_IDLETIME;
- break;
case PR_PRIORITY_NORMAL:
nativePri = PRTYC_REGULAR;
break;
@@ -285,7 +283,7 @@ _PR_MD_SET_PRIORITY(_MDThread *thread, PRThreadPriority newPri)
rv = DosSetPriority(PRTYS_THREAD, nativePri, 0, thread->handle);
PR_ASSERT(rv == NO_ERROR);
if (rv != NO_ERROR) {
- PR_LOG(_pr_thread_lm, PR_LOG_MIN,
+ PR_LOG(_pr_thread_lm, PR_LOG_MIN,
("PR_SetThreadPriority: can't set thread priority\n"));
}
return;
diff --git a/pr/src/md/unix/os_Darwin_x86.s b/pr/src/md/unix/os_Darwin_x86.s
new file mode 100644
index 00000000..d0042613
--- /dev/null
+++ b/pr/src/md/unix/os_Darwin_x86.s
@@ -0,0 +1,105 @@
+# -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Netscape Portable Runtime (NSPR).
+#
+# The Initial Developer of the Original Code is Netscape
+# Communications Corporation. Portions created by Netscape are
+# Copyright (C) 2003 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s):
+# Josh Aas <josh@mozilla.com>
+#
+# Alternatively, the contents of this file may be used under the
+# terms of the GNU General Public License Version 2 or later (the
+# "GPL"), in which case the provisions of the GPL are applicable
+# instead of those above. If you wish to allow use of your
+# version of this file only under the terms of the GPL and not to
+# allow others to use your version of this file under the MPL,
+# indicate your decision by deleting the provisions above and
+# replace them with the notice and other provisions required by
+# the GPL. If you do not delete the provisions above, a recipient
+# may use your version of this file under either the MPL or the
+# GPL.
+#
+
+#
+# Based on os_Linux_x86.s
+#
+
+#
+# PRInt32 __PR_Darwin_x86_AtomicIncrement(PRInt32 *val);
+#
+# Atomically increment the integer pointed to by 'val' and return
+# the result of the increment.
+#
+ .text
+ .globl __PR_Darwin_x86_AtomicIncrement
+ .align 4
+__PR_Darwin_x86_AtomicIncrement:
+ movl 4(%esp), %ecx
+ movl $1, %eax
+ lock
+ xaddl %eax, (%ecx)
+ incl %eax
+ ret
+
+#
+# PRInt32 __PR_Darwin_x86_AtomicDecrement(PRInt32 *val);
+#
+# Atomically decrement the integer pointed to by 'val' and return
+# the result of the decrement.
+#
+ .text
+ .globl __PR_Darwin_x86_AtomicDecrement
+ .align 4
+__PR_Darwin_x86_AtomicDecrement:
+ movl 4(%esp), %ecx
+ movl $-1, %eax
+ lock
+ xaddl %eax, (%ecx)
+ decl %eax
+ ret
+
+#
+# PRInt32 __PR_Darwin_x86_AtomicSet(PRInt32 *val, PRInt32 newval);
+#
+# Atomically set the integer pointed to by 'val' to the new
+# value 'newval' and return the old value.
+#
+ .text
+ .globl __PR_Darwin_x86_AtomicSet
+ .align 4
+__PR_Darwin_x86_AtomicSet:
+ movl 4(%esp), %ecx
+ movl 8(%esp), %eax
+ xchgl %eax, (%ecx)
+ ret
+
+#
+# PRInt32 __PR_Darwin_x86_AtomicAdd(PRInt32 *ptr, PRInt32 val);
+#
+# Atomically add 'val' to the integer pointed to by 'ptr'
+# and return the result of the addition.
+#
+ .text
+ .globl __PR_Darwin_x86_AtomicAdd
+ .align 4
+__PR_Darwin_x86_AtomicAdd:
+ movl 4(%esp), %ecx
+ movl 8(%esp), %eax
+ movl %eax, %edx
+ lock
+ xaddl %eax, (%ecx)
+ addl %edx, %eax
+ ret
diff --git a/pr/src/md/unix/os_HPUX_ia64.s b/pr/src/md/unix/os_HPUX_ia64.s
new file mode 100644
index 00000000..d433f4fe
--- /dev/null
+++ b/pr/src/md/unix/os_HPUX_ia64.s
@@ -0,0 +1,108 @@
+// -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+//
+// The contents of this file are subject to the Mozilla Public
+// License Version 1.1 (the "License"); you may not use this file
+// except in compliance with the License. You may obtain a copy of
+// the License at http://www.mozilla.org/MPL/
+//
+// Software distributed under the License is distributed on an "AS
+// IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+// implied. See the License for the specific language governing
+// rights and limitations under the License.
+//
+// The Original Code is the Netscape Portable Runtime (NSPR).
+//
+// The Initial Developer of the Original Code is Netscape
+// Communications Corporation. Portions created by Netscape are
+// Copyright (C) 2000 Netscape Communications Corporation. All
+// Rights Reserved.
+//
+// Contributor(s):
+//
+// Alternatively, the contents of this file may be used under the
+// terms of the GNU General Public License Version 2 or later (the
+// "GPL"), in which case the provisions of the GPL are applicable
+// instead of those above. If you wish to allow use of your
+// version of this file only under the terms of the GPL and not to
+// allow others to use your version of this file under the MPL,
+// indicate your decision by deleting the provisions above and
+// replace them with the notice and other provisions required by
+// the GPL. If you do not delete the provisions above, a recipient
+// may use your version of this file under either the MPL or the
+// GPL.
+//
+
+.text
+
+// PRInt32 _PR_ia64_AtomicIncrement(PRInt32 *val)
+//
+// Atomically increment the integer pointed to by 'val' and return
+// the result of the increment.
+//
+ .align 16
+ .global _PR_ia64_AtomicIncrement#
+ .proc _PR_ia64_AtomicIncrement#
+_PR_ia64_AtomicIncrement:
+#ifndef _LP64
+ addp4 r32 = 0, r32 ;;
+#endif
+ fetchadd4.acq r8 = [r32], 1 ;;
+ adds r8 = 1, r8
+ br.ret.sptk.many b0
+ .endp _PR_ia64_AtomicIncrement#
+
+// PRInt32 _PR_ia64_AtomicDecrement(PRInt32 *val)
+//
+// Atomically decrement the integer pointed to by 'val' and return
+// the result of the decrement.
+//
+ .align 16
+ .global _PR_ia64_AtomicDecrement#
+ .proc _PR_ia64_AtomicDecrement#
+_PR_ia64_AtomicDecrement:
+#ifndef _LP64
+ addp4 r32 = 0, r32 ;;
+#endif
+ fetchadd4.rel r8 = [r32], -1 ;;
+ adds r8 = -1, r8
+ br.ret.sptk.many b0
+ .endp _PR_ia64_AtomicDecrement#
+
+// PRInt32 _PR_ia64_AtomicAdd(PRInt32 *ptr, PRInt32 val)
+//
+// Atomically add 'val' to the integer pointed to by 'ptr'
+// and return the result of the addition.
+//
+ .align 16
+ .global _PR_ia64_AtomicAdd#
+ .proc _PR_ia64_AtomicAdd#
+_PR_ia64_AtomicAdd:
+#ifndef _LP64
+ addp4 r32 = 0, r32 ;;
+#endif
+ ld4 r15 = [r32] ;;
+.L3:
+ mov r14 = r15
+ mov ar.ccv = r15
+ add r8 = r15, r33 ;;
+ cmpxchg4.acq r15 = [r32], r8, ar.ccv ;;
+ cmp4.ne p6, p7 = r15, r14
+ (p6) br.cond.dptk .L3
+ br.ret.sptk.many b0
+ .endp _PR_ia64_AtomicAdd#
+
+// PRInt32 _PR_ia64_AtomicSet(PRInt32 *val, PRInt32 newval)
+//
+// Atomically set the integer pointed to by 'val' to the new
+// value 'newval' and return the old value.
+//
+ .align 16
+ .global _PR_ia64_AtomicSet#
+ .proc _PR_ia64_AtomicSet#
+_PR_ia64_AtomicSet:
+#ifndef _LP64
+ addp4 r32 = 0, r32 ;;
+#endif
+ xchg4 r8 = [r32], r33
+ br.ret.sptk.many b0
+ .endp _PR_ia64_AtomicSet#
diff --git a/pr/src/md/unix/unix.c b/pr/src/md/unix/unix.c
index 0776bf1a..c41a275f 100644
--- a/pr/src/md/unix/unix.c
+++ b/pr/src/md/unix/unix.c
@@ -1,36 +1,39 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
* The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
* Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
#include "primpl.h"
diff --git a/pr/src/md/unix/unix_errors.c b/pr/src/md/unix/unix_errors.c
index 4fbcd821..90ebe7de 100644
--- a/pr/src/md/unix/unix_errors.c
+++ b/pr/src/md/unix/unix_errors.c
@@ -851,7 +851,21 @@ void _MD_hpux_map_sendfile_error(int err)
#ifdef SOLARIS
void _MD_solaris_map_sendfile_error(int err)
{
- _MD_unix_map_default_error(err) ;
+ PRErrorCode prError;
+
+ switch (err) {
+ /*
+ * Solaris defines a 0 return value for sendfile to mean end-of-file.
+ */
+ case 0:
+ prError = PR_END_OF_FILE_ERROR;
+ break;
+
+ default:
+ _MD_unix_map_default_error(err) ;
+ return;
+ }
+ PR_SetError(prError, err);
}
#endif /* SOLARIS */
diff --git a/pr/src/md/windows/ntinrval.c b/pr/src/md/windows/ntinrval.c
index 494f6e83..b8d85831 100644
--- a/pr/src/md/windows/ntinrval.c
+++ b/pr/src/md/windows/ntinrval.c
@@ -42,83 +42,19 @@
#include "primpl.h"
-#if defined(WIN16)
-#include <win/compobj.h>
-#define QueryPerformanceFrequency(x) FALSE
-#define QueryPerformanceCounter(x) FALSE
-#endif
-
-static PRIntn _nt_bitShift = 0;
-static PRInt32 _nt_ticksPerSec = -1;
-
void
_PR_MD_INTERVAL_INIT()
{
- LARGE_INTEGER count;
-
- if (QueryPerformanceFrequency(&count)) {
- /*
- * HighPart is signed (LONG). Assert that its sign bit is 0
- * because we will be right shifting it. LowPart is unsigned
- * (DWORD).
- */
- PR_ASSERT(count.HighPart >= 0);
- while(count.HighPart) {
- count.LowPart = (count.HighPart << 31) + (count.LowPart >> 1);
- count.HighPart >>= 1;
- _nt_bitShift++;
- }
- while(count.LowPart > PR_INTERVAL_MAX) {
- count.LowPart >>= 1;
- _nt_bitShift++;
- }
-
- /*
- * We can't use the performance counter if after
- * normalization we are left with fewer than 32 bits.
- */
- if (_nt_bitShift <= 32) {
- _nt_ticksPerSec = count.LowPart;
- PR_ASSERT(_nt_ticksPerSec > PR_INTERVAL_MIN);
- return;
- }
- }
- _nt_ticksPerSec = -1;
}
PRIntervalTime
_PR_MD_GET_INTERVAL()
{
- LARGE_INTEGER count;
-
- /* Sadly; nspr requires the interval to range from 1000 ticks per second
- * to only 100000 ticks per second; QueryPerformanceCounter is too high
- * resolution...
- */
- if (_nt_ticksPerSec != -1) {
- (void)QueryPerformanceCounter(&count);
- PR_ASSERT(_nt_bitShift <= 32);
- if (_nt_bitShift == 32) {
- return (PRUint32)count.HighPart;
- } else {
- return (PRUint32)((count.HighPart << (32 - _nt_bitShift))
- + (count.LowPart >> _nt_bitShift));
- }
- } else
-#if defined(__MINGW32__)
- return time();
-#elif defined(WIN16)
- return clock(); /* milliseconds since application start */
-#else
- return GetTickCount(); /* milliseconds since system start */
-#endif
+ return timeGetTime(); /* milliseconds since system start */
}
PRIntervalTime
_PR_MD_INTERVAL_PER_SEC()
{
- if (_nt_ticksPerSec != -1)
- return _nt_ticksPerSec;
- else
- return 1000;
+ return 1000;
}
diff --git a/pr/src/md/windows/ntio.c b/pr/src/md/windows/ntio.c
index defaae4d..03000203 100644
--- a/pr/src/md/windows/ntio.c
+++ b/pr/src/md/windows/ntio.c
@@ -20,6 +20,7 @@
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
+ * Masayuki Nakano <masayuki@d-toybox.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -63,8 +64,10 @@ static PRThread *_pr_io_completion_thread;
#define RECYCLE_SIZE 512
static struct _MDLock _pr_recycle_lock;
-static PRInt32 _pr_recycle_array[RECYCLE_SIZE];
-static PRInt32 _pr_recycle_tail = 0;
+static PRInt32 _pr_recycle_INET_array[RECYCLE_SIZE];
+static PRInt32 _pr_recycle_INET_tail = 0;
+static PRInt32 _pr_recycle_INET6_array[RECYCLE_SIZE];
+static PRInt32 _pr_recycle_INET6_tail = 0;
__declspec(thread) PRThread *_pr_io_restarted_io = NULL;
DWORD _pr_io_restartedIOIndex; /* The thread local storage slot for each
@@ -108,6 +111,8 @@ static const PRTime _pr_filetime_offset = 116444736000000000LL;
static const PRTime _pr_filetime_offset = 116444736000000000i64;
#endif
+static PRBool IsPrevCharSlash(const char *str, const char *current);
+
#define _NEED_351_FILE_LOCKING_HACK
#ifdef _NEED_351_FILE_LOCKING_HACK
#define _PR_LOCAL_FILE 1
@@ -960,15 +965,20 @@ _PR_MD_INIT_IO()
* second argument.
*/
static SOCKET
-_md_get_recycled_socket()
+_md_get_recycled_socket(int af)
{
SOCKET rv;
- int af = AF_INET;
_MD_LOCK(&_pr_recycle_lock);
- if (_pr_recycle_tail) {
- _pr_recycle_tail--;
- rv = _pr_recycle_array[_pr_recycle_tail];
+ if (af == AF_INET && _pr_recycle_INET_tail) {
+ _pr_recycle_INET_tail--;
+ rv = _pr_recycle_INET_array[_pr_recycle_INET_tail];
+ _MD_UNLOCK(&_pr_recycle_lock);
+ return rv;
+ }
+ if (af == AF_INET6 && _pr_recycle_INET6_tail) {
+ _pr_recycle_INET6_tail--;
+ rv = _pr_recycle_INET6_array[_pr_recycle_INET6_tail];
_MD_UNLOCK(&_pr_recycle_lock);
return rv;
}
@@ -986,14 +996,19 @@ _md_get_recycled_socket()
* Add a socket to the recycle bin.
*/
static void
-_md_put_recycled_socket(SOCKET newsock)
+_md_put_recycled_socket(SOCKET newsock, int af)
{
- PR_ASSERT(_pr_recycle_tail >= 0);
+ PR_ASSERT(_pr_recycle_INET_tail >= 0);
+ PR_ASSERT(_pr_recycle_INET6_tail >= 0);
_MD_LOCK(&_pr_recycle_lock);
- if (_pr_recycle_tail < RECYCLE_SIZE) {
- _pr_recycle_array[_pr_recycle_tail] = newsock;
- _pr_recycle_tail++;
+ if (af == AF_INET && _pr_recycle_INET_tail < RECYCLE_SIZE) {
+ _pr_recycle_INET_array[_pr_recycle_INET_tail] = newsock;
+ _pr_recycle_INET_tail++;
+ _MD_UNLOCK(&_pr_recycle_lock);
+ } else if (af == AF_INET6 && _pr_recycle_INET6_tail < RECYCLE_SIZE) {
+ _pr_recycle_INET6_array[_pr_recycle_INET6_tail] = newsock;
+ _pr_recycle_INET6_tail++;
_MD_UNLOCK(&_pr_recycle_lock);
} else {
_MD_UNLOCK(&_pr_recycle_lock);
@@ -1322,7 +1337,7 @@ _PR_MD_FAST_ACCEPT(PRFileDesc *fd, PRNetAddr *raddr, PRUint32 *rlen,
}
}
- accept_sock = _md_get_recycled_socket();
+ accept_sock = _md_get_recycled_socket(fd->secret->af);
if (accept_sock == INVALID_SOCKET)
return -1;
@@ -1352,7 +1367,7 @@ _PR_MD_FAST_ACCEPT(PRFileDesc *fd, PRNetAddr *raddr, PRUint32 *rlen,
&bytes,
&(me->md.overlapped.overlapped));
- if ( (rv == 0) && ((err = GetLastError()) != ERROR_IO_PENDING)) {
+ if ( (rv == 0) && ((err = WSAGetLastError()) != ERROR_IO_PENDING)) {
/* Argh! The IO failed */
closesocket(accept_sock);
_PR_THREAD_LOCK(me);
@@ -1445,7 +1460,7 @@ _PR_MD_FAST_ACCEPT_READ(PRFileDesc *sd, PRInt32 *newSock, PRNetAddr **raddr,
sd->secret->md.io_model_committed = PR_TRUE;
}
- *newSock = _md_get_recycled_socket();
+ *newSock = _md_get_recycled_socket(sd->secret->af);
if (*newSock == INVALID_SOCKET)
return -1;
@@ -1695,7 +1710,7 @@ _PR_MD_SENDFILE(PRFileDesc *sock, PRSendFileData *sfd,
}
if (flags & PR_TRANSMITFILE_CLOSE_SOCKET) {
- _md_put_recycled_socket(sock->secret->md.osfd);
+ _md_put_recycled_socket(sock->secret->md.osfd, sock->secret->af);
}
PR_ASSERT(me->io_pending == PR_FALSE);
@@ -2769,7 +2784,7 @@ _PR_MD_OPEN_DIR(_MDDir *d, const char *name)
* If 'name' ends in a slash or backslash, do not append
* another backslash.
*/
- if (filename[len - 1] == '/' || filename[len - 1] == '\\') {
+ if (IsPrevCharSlash(filename, filename + len)) {
len--;
}
strcpy(&filename[len], "\\*.*");
@@ -2907,7 +2922,7 @@ _PR_MD_STAT(const char *fn, struct stat *info)
int len = strlen(fn);
if (len > 0 && len <= _MAX_PATH
- && (fn[len - 1] == '\\' || fn[len - 1] == '/')) {
+ && IsPrevCharSlash(fn, fn + len)) {
char newfn[_MAX_PATH + 1];
strcpy(newfn, fn);
@@ -2924,6 +2939,17 @@ _PR_MD_STAT(const char *fn, struct stat *info)
#define _PR_IS_SLASH(ch) ((ch) == '/' || (ch) == '\\')
+static PRBool
+IsPrevCharSlash(const char *str, const char *current)
+{
+ const char *prev;
+
+ if (str >= current)
+ return PR_FALSE;
+ prev = _mbsdec(str, current);
+ return (prev == current - 1) && _PR_IS_SLASH(*prev);
+}
+
/*
* IsRootDirectory --
*
@@ -2970,7 +2996,7 @@ IsRootDirectory(char *fn, size_t buflen)
/* look for the next slash */
do {
- p++;
+ p = _mbsinc(p);
} while (*p != '\0' && !_PR_IS_SLASH(*p));
if (*p == '\0') {
return PR_FALSE;
@@ -2984,7 +3010,7 @@ IsRootDirectory(char *fn, size_t buflen)
/* look for the final slash */
do {
- p++;
+ p = _mbsinc(p);
} while (*p != '\0' && !_PR_IS_SLASH(*p));
if (_PR_IS_SLASH(*p) && p[1] != '\0') {
return PR_FALSE;
@@ -3074,7 +3100,7 @@ _PR_MD_GETFILEINFO64(const char *fn, PRFileInfo64 *info)
info->creationTime = 0;
return 0;
}
- if (!_PR_IS_SLASH(pathbuf[len - 1])) {
+ if (!IsPrevCharSlash(pathbuf, pathbuf + len)) {
_PR_MD_MAP_OPENDIR_ERROR(GetLastError());
return -1;
} else {
diff --git a/pr/src/md/windows/w95io.c b/pr/src/md/windows/w95io.c
index 5d483cea..f418fce7 100644
--- a/pr/src/md/windows/w95io.c
+++ b/pr/src/md/windows/w95io.c
@@ -20,6 +20,7 @@
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
+ * Masayuki Nakano <masayuki@d-toybox.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -80,9 +81,9 @@ static const PRTime _pr_filetime_offset = 116444736000000000LL;
static const PRTime _pr_filetime_offset = 116444736000000000i64;
#endif
-#ifdef MOZ_UNICODE
static void InitUnicodeSupport(void);
-#endif
+
+static PRBool IsPrevCharSlash(const char *str, const char *current);
void
_PR_MD_INIT_IO()
@@ -121,9 +122,9 @@ _PR_MD_INIT_IO()
_PR_NT_InitSids();
-#ifdef MOZ_UNICODE
InitUnicodeSupport();
-#endif
+
+ _PR_MD_InitSockets();
}
PRStatus
@@ -516,7 +517,7 @@ _PR_MD_OPEN_DIR(_MDDir *d, const char *name)
* If 'name' ends in a slash or backslash, do not append
* another backslash.
*/
- if (filename[len - 1] == '/' || filename[len - 1] == '\\') {
+ if (IsPrevCharSlash(filename, filename + len)) {
len--;
}
strcpy(&filename[len], "\\*.*");
@@ -654,7 +655,7 @@ _PR_MD_STAT(const char *fn, struct stat *info)
int len = strlen(fn);
if (len > 0 && len <= _MAX_PATH
- && (fn[len - 1] == '\\' || fn[len - 1] == '/')) {
+ && IsPrevCharSlash(fn, fn + len)) {
char newfn[_MAX_PATH + 1];
strcpy(newfn, fn);
@@ -671,6 +672,17 @@ _PR_MD_STAT(const char *fn, struct stat *info)
#define _PR_IS_SLASH(ch) ((ch) == '/' || (ch) == '\\')
+static PRBool
+IsPrevCharSlash(const char *str, const char *current)
+{
+ const char *prev;
+
+ if (str >= current)
+ return PR_FALSE;
+ prev = _mbsdec(str, current);
+ return (prev == current - 1) && _PR_IS_SLASH(*prev);
+}
+
/*
* IsRootDirectory --
*
@@ -717,7 +729,7 @@ IsRootDirectory(char *fn, size_t buflen)
/* look for the next slash */
do {
- p++;
+ p = _mbsinc(p);
} while (*p != '\0' && !_PR_IS_SLASH(*p));
if (*p == '\0') {
return PR_FALSE;
@@ -731,7 +743,7 @@ IsRootDirectory(char *fn, size_t buflen)
/* look for the final slash */
do {
- p++;
+ p = _mbsinc(p);
} while (*p != '\0' && !_PR_IS_SLASH(*p));
if (_PR_IS_SLASH(*p) && p[1] != '\0') {
return PR_FALSE;
@@ -821,7 +833,7 @@ _PR_MD_GETFILEINFO64(const char *fn, PRFileInfo64 *info)
info->creationTime = 0;
return 0;
}
- if (!_PR_IS_SLASH(pathbuf[len - 1])) {
+ if (!IsPrevCharSlash(pathbuf, pathbuf + len)) {
_PR_MD_MAP_OPENDIR_ERROR(GetLastError());
return -1;
} else {
@@ -1106,38 +1118,49 @@ _PR_MD_PIPEAVAILABLE(PRFileDesc *fd)
#ifdef MOZ_UNICODE
typedef HANDLE (WINAPI *CreateFileWFn) (LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);
-static CreateFileWFn createFileW = NULL;
+static CreateFileWFn createFileW = CreateFileW;
typedef HANDLE (WINAPI *FindFirstFileWFn) (LPCWSTR, LPWIN32_FIND_DATAW);
-static FindFirstFileWFn findFirstFileW = NULL;
+static FindFirstFileWFn findFirstFileW = FindFirstFileW;
typedef BOOL (WINAPI *FindNextFileWFn) (HANDLE, LPWIN32_FIND_DATAW);
-static FindNextFileWFn findNextFileW = NULL;
+static FindNextFileWFn findNextFileW = FindNextFileW;
typedef DWORD (WINAPI *GetFullPathNameWFn) (LPCWSTR, DWORD, LPWSTR, LPWSTR *);
-static GetFullPathNameWFn getFullPathNameW = NULL;
+static GetFullPathNameWFn getFullPathNameW = GetFullPathNameW;
typedef UINT (WINAPI *GetDriveTypeWFn) (LPCWSTR);
-static GetDriveTypeWFn getDriveTypeW = NULL;
+static GetDriveTypeWFn getDriveTypeW = GetDriveTypeW;
+
+#endif /* MOZ_UNICODE */
+
+PRBool _pr_useUnicode = PR_FALSE;
static void InitUnicodeSupport(void)
{
- HMODULE module;
-
/*
- * The W functions do not exist on Win9x. NSPR won't run on Win9x
- * if we call the W functions directly. Use GetProcAddress() to
- * look up their addresses at run time.
+ * The W functions exist on Win9x as stubs that fail with the
+ * ERROR_CALL_NOT_IMPLEMENTED error. We plan to emulate the
+ * MSLU W functions on Win9x in the future.
*/
- module = GetModuleHandle("Kernel32.dll");
- if (!module) {
- return;
- }
+ /* Find out if we are running on a Unicode enabled version of Windows */
+ OSVERSIONINFOA osvi = {0};
- createFileW = (CreateFileWFn)GetProcAddress(module, "CreateFileW");
- findFirstFileW = (FindFirstFileWFn)GetProcAddress(module, "FindFirstFileW");
- findNextFileW = (FindNextFileWFn)GetProcAddress(module, "FindNextFileW");
- getDriveTypeW = (GetDriveTypeWFn)GetProcAddress(module, "GetDriveTypeW");
- getFullPathNameW = (GetFullPathNameWFn)GetProcAddress(module, "GetFullPathNameW");
+ osvi.dwOSVersionInfoSize = sizeof(osvi);
+ if (GetVersionExA(&osvi)) {
+ _pr_useUnicode = (osvi.dwPlatformId >= VER_PLATFORM_WIN32_NT);
+ } else {
+ _pr_useUnicode = PR_FALSE;
+ }
+#ifdef DEBUG
+ /*
+ * In debug builds, allow explicit use of ANSI methods to simulate
+ * a Win9x environment for testing purposes.
+ */
+ if (getenv("WINAPI_USE_ANSI"))
+ _pr_useUnicode = PR_FALSE;
+#endif
}
+#ifdef MOZ_UNICODE
+
/* ================ UTF16 Interfaces ================================ */
void FlipSlashesW(PRUnichar *cp, int len)
{
@@ -1161,11 +1184,6 @@ _PR_MD_OPEN_FILE_UTF16(const PRUnichar *name, PRIntn osflags, int mode)
PSECURITY_DESCRIPTOR pSD = NULL;
PACL pACL = NULL;
- if (!createFileW) {
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return -1;
- }
-
if (osflags & PR_CREATE_FILE) {
if (_PR_NT_MakeSecurityDescriptorACL(mode, fileAccessTable,
&pSD, &pACL) == PR_SUCCESS) {
@@ -1221,11 +1239,6 @@ _PR_MD_OPEN_DIR_UTF16(_MDDirUTF16 *d, const PRUnichar *name)
PRUnichar filename[ MAX_PATH ];
int len;
- if (!findFirstFileW) {
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return PR_FAILURE;
- }
-
len = wcslen(name);
/* Need 5 bytes for \*.* and the trailing null byte. */
if (len + 5 > MAX_PATH) {
@@ -1261,11 +1274,6 @@ _PR_MD_READ_DIR_UTF16(_MDDirUTF16 *d, PRIntn flags)
BOOL rv;
PRUnichar *fileName;
- if (!findNextFileW) {
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return NULL;
- }
-
if ( d ) {
while (1) {
if (d->firstEntry) {
@@ -1411,11 +1419,6 @@ _PR_MD_GETFILEINFO64_UTF16(const PRUnichar *fn, PRFileInfo64 *info)
WIN32_FIND_DATAW findFileData;
PRUnichar pathbuf[MAX_PATH + 1];
- if (!findFirstFileW || !getFullPathNameW || !getDriveTypeW) {
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return -1;
- }
-
if (NULL == fn || L'\0' == *fn) {
PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
return -1;
diff --git a/pr/src/md/windows/w95sock.c b/pr/src/md/windows/w95sock.c
index 01c25258..1bcbaf21 100644
--- a/pr/src/md/windows/w95sock.c
+++ b/pr/src/md/windows/w95sock.c
@@ -53,6 +53,95 @@ static PRInt32 socket_io_wait(
/* --- SOCKET IO --------------------------------------------------------- */
+/*
+ * we only want to call WSAIoctl() on Vista and later
+ * so don't pay for it at build time (and avoid including winsock2.h)
+ */
+
+/* from ws2def.h */
+#define IOC_IN 0x80000000 /* copy in parameters */
+#define IOC_VENDOR 0x18000000
+#define _WSAIOW(x,y) (IOC_IN|(x)|(y))
+/* from MSWSockDef.h */
+#define SIO_SET_COMPATIBILITY_MODE _WSAIOW(IOC_VENDOR,300)
+
+typedef enum _WSA_COMPATIBILITY_BEHAVIOR_ID {
+ WsaBehaviorAll = 0,
+ WsaBehaviorReceiveBuffering,
+ WsaBehaviorAutoTuning
+} WSA_COMPATIBILITY_BEHAVIOR_ID, *PWSA_COMPATIBILITY_BEHAVIOR_ID;
+
+/* from sdkddkver.h */
+#define NTDDI_LONGHORN 0x06000000
+
+/* from winsock2.h */
+#define WSAEVENT HANDLE
+
+#define WSAOVERLAPPED OVERLAPPED
+typedef struct _OVERLAPPED * LPWSAOVERLAPPED;
+
+typedef void (CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)(
+ IN DWORD dwError,
+ IN DWORD cbTransferred,
+ IN LPWSAOVERLAPPED lpOverlapped,
+ IN DWORD dwFlags
+);
+
+typedef int (__stdcall * WSAIOCTLPROC) (
+ SOCKET s,
+ DWORD dwIoControlCode,
+ LPVOID lpvInBuffer,
+ DWORD cbInBuffer,
+ LPVOID lpvOutBuffer,
+ DWORD cbOutBuffer,
+ LPDWORD lpcbBytesReturned,
+ LPWSAOVERLAPPED lpOverlapped,
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
+);
+
+typedef struct _WSA_COMPATIBILITY_MODE {
+ WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
+ ULONG TargetOsVersion;
+} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;
+
+static HMODULE libWinsock2 = NULL;
+static WSAIOCTLPROC wsaioctlProc = NULL;
+static PRBool socketSetCompatMode = PR_FALSE;
+
+void _PR_MD_InitSockets(void)
+{
+ OSVERSIONINFO osvi;
+
+ memset(&osvi, 0, sizeof(osvi));
+ osvi.dwOSVersionInfoSize = sizeof(osvi);
+ GetVersionEx(&osvi);
+
+ /* if Vista or later... */
+ if (osvi.dwMajorVersion >= 6)
+ {
+ libWinsock2 = LoadLibrary("Ws2_32.dll");
+ if (libWinsock2)
+ {
+ wsaioctlProc = (WSAIOCTLPROC)GetProcAddress(libWinsock2,
+ "WSAIoctl");
+ if (wsaioctlProc)
+ {
+ socketSetCompatMode = PR_TRUE;
+ }
+ }
+ }
+}
+
+void _PR_MD_CleanupSockets(void)
+{
+ socketSetCompatMode = PR_FALSE;
+ wsaioctlProc = NULL;
+ if (libWinsock2)
+ {
+ FreeLibrary(libWinsock2);
+ libWinsock2 = NULL;
+ }
+}
PRInt32
_PR_MD_SOCKET(int af, int type, int flags)
@@ -78,6 +167,29 @@ _PR_MD_SOCKET(int af, int type, int flags)
return -1;
}
+ if ((af == AF_INET || af == AF_INET6) &&
+ type == SOCK_STREAM && socketSetCompatMode)
+ {
+ WSA_COMPATIBILITY_MODE mode;
+ char dummy[4];
+ int ret_dummy;
+
+ mode.BehaviorId = WsaBehaviorAutoTuning;
+ mode.TargetOsVersion = NTDDI_LONGHORN;
+ if (wsaioctlProc(sock, SIO_SET_COMPATIBILITY_MODE,
+ (char *)&mode, sizeof(mode),
+ dummy, 4, &ret_dummy, 0, NULL) == SOCKET_ERROR)
+ {
+ int err = WSAGetLastError();
+ PR_LOG(_pr_io_lm, PR_LOG_DEBUG, ("WSAIoctl() failed with %d", err));
+
+ /* SIO_SET_COMPATIBILITY_MODE may not be supported.
+ ** If the call to WSAIoctl() fails with WSAEOPNOTSUPP,
+ ** don't close the socket.
+ */
+ }
+ }
+
return (PRInt32)sock;
}
diff --git a/pr/src/md/windows/w95thred.c b/pr/src/md/windows/w95thred.c
index a8d5f068..a8d64200 100644
--- a/pr/src/md/windows/w95thred.c
+++ b/pr/src/md/windows/w95thred.c
@@ -65,6 +65,8 @@ void _PR_MD_CLEANUP_BEFORE_EXIT(void)
{
_PR_NT_FreeSids();
+ _PR_MD_CleanupSockets();
+
WSACleanup();
#ifndef _PR_USE_STATIC_TLS
diff --git a/pr/src/md/windows/win32_errors.c b/pr/src/md/windows/win32_errors.c
index 0cf1bb58..ced1b7aa 100644
--- a/pr/src/md/windows/win32_errors.c
+++ b/pr/src/md/windows/win32_errors.c
@@ -89,6 +89,9 @@ void _MD_win32_map_default_error(PRInt32 err)
case ERROR_ALREADY_EXISTS:
prError = PR_FILE_EXISTS_ERROR;
break;
+ case ERROR_CALL_NOT_IMPLEMENTED:
+ prError = PR_NOT_IMPLEMENTED_ERROR;
+ break;
case ERROR_DISK_CORRUPT:
prError = PR_IO_ERROR;
break;
diff --git a/pr/src/misc/pratom.c b/pr/src/misc/pratom.c
index 24028e56..35b86c0d 100644
--- a/pr/src/misc/pratom.c
+++ b/pr/src/misc/pratom.c
@@ -120,6 +120,8 @@ int index;
if (num_atomic_locks > MAX_ATOMIC_LOCKS)
num_atomic_locks = MAX_ATOMIC_LOCKS;
+ else if (num_atomic_locks < 1)
+ num_atomic_locks = 1;
else {
num_atomic_locks = PR_FloorLog2(num_atomic_locks);
num_atomic_locks = 1L << num_atomic_locks;
diff --git a/pr/src/misc/prdtoa.c b/pr/src/misc/prdtoa.c
index b7432a2f..07853967 100644
--- a/pr/src/misc/prdtoa.c
+++ b/pr/src/misc/prdtoa.c
@@ -3067,7 +3067,7 @@ dtoa
goto no_digits;
goto one_digit;
}
- for(i = 1;; i++, dval(d) *= 10.) {
+ for(i = 1; i <= k+1; i++, dval(d) *= 10.) {
L = (Long)(dval(d) / ds);
dval(d) -= L*ds;
#ifdef Check_FLT_ROUNDS
diff --git a/pr/src/misc/prinit.c b/pr/src/misc/prinit.c
index 1ecfb3d1..db36b212 100644
--- a/pr/src/misc/prinit.c
+++ b/pr/src/misc/prinit.c
@@ -241,6 +241,7 @@ static void _PR_InitStuff(void)
_PR_InitLinker();
_PR_InitCallOnce();
_PR_InitDtoa();
+ _PR_InitTime();
_PR_InitMW();
_PR_InitRWLocks();
@@ -420,6 +421,7 @@ PR_IMPLEMENT(PRStatus) PR_Cleanup()
#endif
_PR_CleanupMW();
+ _PR_CleanupTime();
_PR_CleanupDtoa();
_PR_CleanupCallOnce();
_PR_ShutdownLinker();
diff --git a/pr/src/misc/prnetdb.c b/pr/src/misc/prnetdb.c
index 63b21070..515d9601 100644
--- a/pr/src/misc/prnetdb.c
+++ b/pr/src/misc/prnetdb.c
@@ -108,6 +108,11 @@ PRLock *_pr_dnsLock = NULL;
#define _PR_HAVE_GETPROTO_R_INT
#endif
+#if __FreeBSD_version >= 602000
+#define _PR_HAVE_GETPROTO_R
+#define _PR_HAVE_5_ARG_GETPROTO_R
+#endif
+
#if (defined(LINUX) && defined(__GLIBC__) && __GLIBC__ >= 2)
#define _PR_HAVE_GETPROTO_R
#define _PR_HAVE_5_ARG_GETPROTO_R
diff --git a/pr/src/misc/prsystem.c b/pr/src/misc/prsystem.c
index f931e3af..1c6c2825 100644
--- a/pr/src/misc/prsystem.c
+++ b/pr/src/misc/prsystem.c
@@ -134,8 +134,12 @@ PR_IMPLEMENT(PRStatus) PR_GetSystemInfo(PRSysInfo cmd, char *buf, PRUint32 bufle
switch(cmd)
{
case PR_SI_HOSTNAME:
+ case PR_SI_HOSTNAME_UNTRUNCATED:
if (PR_FAILURE == _PR_MD_GETHOSTNAME(buf, (PRUintn)buflen))
return PR_FAILURE;
+
+ if (cmd == PR_SI_HOSTNAME_UNTRUNCATED)
+ break;
/*
* On some platforms a system does not have a hostname and
* its IP address is returned instead. The following code
@@ -278,20 +282,20 @@ PR_IMPLEMENT(PRInt32) PR_GetNumberOfProcessors( void )
*/
PR_IMPLEMENT(PRUint64) PR_GetPhysicalMemorySize(void)
{
- PRUint64 bytes = LL_ZERO;
+ PRUint64 bytes = 0;
#if defined(LINUX) || defined(SOLARIS)
long pageSize = sysconf(_SC_PAGESIZE);
long pageCount = sysconf(_SC_PHYS_PAGES);
- LL_I2L(bytes, pageSize * pageCount);
+ bytes = (PRUint64) pageSize * pageCount;
#elif defined(HPUX)
struct pst_static info;
int result = pstat_getstatic(&info, sizeof(info), 1, 0);
if (result == 1)
- LL_I2L(bytes, info.physical_memory * info.page_size);
+ bytes = (PRUint64) info.physical_memory * info.page_size;
#elif defined(DARWIN)
@@ -303,7 +307,7 @@ PR_IMPLEMENT(PRUint64) PR_GetPhysicalMemorySize(void)
(host_info_t) &hInfo,
&count);
if (result == KERN_SUCCESS)
- LL_I2L(bytes, hInfo.memory_size);
+ bytes = hInfo.memory_size;
#elif defined(WIN32)
@@ -319,16 +323,16 @@ PR_IMPLEMENT(PRUint64) PR_GetPhysicalMemorySize(void)
memStat.dwLength = sizeof(memStat);
if (globalMemory(&memStat))
- LL_UI2L(bytes, memStat.ullTotalPhys);
+ bytes = memStat.ullTotalPhys;
}
}
- if (LL_EQ(bytes, LL_ZERO)) {
+ if (!bytes) {
/* Fall back to the older API. */
MEMORYSTATUS memStat;
memset(&memStat, 0, sizeof(memStat));
GlobalMemoryStatus(&memStat);
- LL_I2L(bytes, memStat.dwTotalPhys);
+ bytes = memStat.dwTotalPhys;
}
#elif defined(OS2)
@@ -338,7 +342,7 @@ PR_IMPLEMENT(PRUint64) PR_GetPhysicalMemorySize(void)
QSV_TOTPHYSMEM,
&ulPhysMem,
sizeof(ulPhysMem));
- LL_I2L(bytes, ulPhysMem);
+ bytes = ulPhysMem;
#elif defined(AIX)
@@ -346,9 +350,7 @@ PR_IMPLEMENT(PRUint64) PR_GetPhysicalMemorySize(void)
int how_many;
struct CuAt *obj = getattr("sys0", "realmem", 0, &how_many);
if (obj != NULL) {
- PRUint64 kbytes;
- LL_I2L(kbytes, atoi(obj->value));
- LL_MUL(bytes, kbytes, 1024);
+ bytes = (PRUint64) atoi(obj->value) * 1024;
free(obj);
}
odm_terminate();
diff --git a/pr/src/misc/prtime.c b/pr/src/misc/prtime.c
index a3cd1c6e..3736d699 100644
--- a/pr/src/misc/prtime.c
+++ b/pr/src/misc/prtime.c
@@ -569,6 +569,8 @@ PR_NormalizeTime(PRExplodedTime *time, PRTimeParamFn params)
extern struct tm *Maclocaltime(const time_t * t);
#endif
+#define HAVE_LOCALTIME_MONITOR 1 /* We use 'monitor' to serialize our calls
+ * to localtime(). */
static PRLock *monitor = NULL;
static struct tm *MT_safe_localtime(const time_t *clock, struct tm *result)
@@ -578,12 +580,7 @@ static struct tm *MT_safe_localtime(const time_t *clock, struct tm *result)
* against NSPR threads only when the
* NSPR thread system is activated. */
- if (needLock) {
- if (monitor == NULL) {
- monitor = PR_NewLock();
- }
- PR_Lock(monitor);
- }
+ if (needLock) PR_Lock(monitor);
/*
* Microsoft (all flavors) localtime() returns a NULL pointer if 'clock'
@@ -628,6 +625,23 @@ static struct tm *MT_safe_localtime(const time_t *clock, struct tm *result)
#endif /* definition of MT_safe_localtime() */
+void _PR_InitTime(void)
+{
+#ifdef HAVE_LOCALTIME_MONITOR
+ monitor = PR_NewLock();
+#endif
+}
+
+void _PR_CleanupTime(void)
+{
+#ifdef HAVE_LOCALTIME_MONITOR
+ if (monitor) {
+ PR_DestroyLock(monitor);
+ monitor = NULL;
+ }
+#endif
+}
+
#if defined(XP_UNIX) || defined(XP_PC) || defined(XP_BEOS)
PR_IMPLEMENT(PRTimeParameters)
@@ -775,9 +789,53 @@ PR_LocalTimeParameters(const PRExplodedTime *gmt)
*------------------------------------------------------------------------
*/
+/*
+ * Returns the mday of the first sunday of the month, where
+ * mday and wday are for a given day in the month.
+ * mdays start with 1 (e.g. 1..31).
+ * wdays start with 0 and are in the range 0..6. 0 = Sunday.
+ */
+#define firstSunday(mday, wday) (((mday - wday + 7 - 1) % 7) + 1)
+
+/*
+ * Returns the mday for the N'th Sunday of the month, where
+ * mday and wday are for a given day in the month.
+ * mdays start with 1 (e.g. 1..31).
+ * wdays start with 0 and are in the range 0..6. 0 = Sunday.
+ * N has the following values: 0 = first, 1 = second (etc), -1 = last.
+ * ndays is the number of days in that month, the same value as the
+ * mday of the last day of the month.
+ */
+static PRInt32
+NthSunday(PRInt32 mday, PRInt32 wday, PRInt32 N, PRInt32 ndays)
+{
+ PRInt32 firstSun = firstSunday(mday, wday);
+
+ if (N < 0)
+ N = (ndays - firstSun) / 7;
+ return firstSun + (7 * N);
+}
+
+typedef struct DSTParams {
+ PRInt8 dst_start_month; /* 0 = January */
+ PRInt8 dst_start_Nth_Sunday; /* N as defined above */
+ PRInt8 dst_start_month_ndays; /* ndays as defined above */
+ PRInt8 dst_end_month; /* 0 = January */
+ PRInt8 dst_end_Nth_Sunday; /* N as defined above */
+ PRInt8 dst_end_month_ndays; /* ndays as defined above */
+} DSTParams;
+
+static const DSTParams dstParams[2] = {
+ /* year < 2007: First April Sunday - Last October Sunday */
+ { 3, 0, 30, 9, -1, 31 },
+ /* year >= 2007: Second March Sunday - First November Sunday */
+ { 2, 1, 31, 10, 0, 30 }
+};
+
PR_IMPLEMENT(PRTimeParameters)
PR_USPacificTimeParameters(const PRExplodedTime *gmt)
{
+ const DSTParams *dst;
PRTimeParameters retVal;
PRExplodedTime st;
@@ -807,61 +865,51 @@ PR_USPacificTimeParameters(const PRExplodedTime *gmt)
/* Apply the offset to GMT to obtain the local standard time */
ApplySecOffset(&st, retVal.tp_gmt_offset);
+ if (st.tm_year < 2007) { /* first April Sunday - Last October Sunday */
+ dst = &dstParams[0];
+ } else { /* Second March Sunday - First November Sunday */
+ dst = &dstParams[1];
+ }
+
/*
* Apply the rules on standard time or GMT to obtain daylight saving
* time offset. In this implementation, we use the US DST rule.
*/
- if (st.tm_month < 3) {
+ if (st.tm_month < dst->dst_start_month) {
retVal.tp_dst_offset = 0L;
- } else if (st.tm_month == 3) {
- if (st.tm_wday == 0) {
- /* A Sunday */
- if (st.tm_mday <= 7) {
- /* First Sunday */
- /* 01:59:59 PST -> 03:00:00 PDT */
- if (st.tm_hour < 2) {
- retVal.tp_dst_offset = 0L;
- } else {
- retVal.tp_dst_offset = 3600L;
- }
- } else {
- /* Not first Sunday */
- retVal.tp_dst_offset = 3600L;
- }
- } else {
- /* Not a Sunday. See if before first Sunday or after */
- if (st.tm_wday + 1 <= st.tm_mday) {
- /* After first Sunday */
- retVal.tp_dst_offset = 3600L;
- } else {
- /* Before first Sunday */
- retVal.tp_dst_offset = 0L;
- }
+ } else if (st.tm_month == dst->dst_start_month) {
+ int NthSun = NthSunday(st.tm_mday, st.tm_wday,
+ dst->dst_start_Nth_Sunday,
+ dst->dst_start_month_ndays);
+ if (st.tm_mday < NthSun) { /* Before starting Sunday */
+ retVal.tp_dst_offset = 0L;
+ } else if (st.tm_mday == NthSun) { /* Starting Sunday */
+ /* 01:59:59 PST -> 03:00:00 PDT */
+ if (st.tm_hour < 2) {
+ retVal.tp_dst_offset = 0L;
+ } else {
+ retVal.tp_dst_offset = 3600L;
+ }
+ } else { /* After starting Sunday */
+ retVal.tp_dst_offset = 3600L;
}
- } else if (st.tm_month < 9) {
+ } else if (st.tm_month < dst->dst_end_month) {
retVal.tp_dst_offset = 3600L;
- } else if (st.tm_month == 9) {
- if (st.tm_wday == 0) {
- if (31 - st.tm_mday < 7) {
- /* Last Sunday */
- /* 01:59:59 PDT -> 01:00:00 PST */
- if (st.tm_hour < 1) {
- retVal.tp_dst_offset = 3600L;
- } else {
- retVal.tp_dst_offset = 0L;
- }
- } else {
- /* Not last Sunday */
- retVal.tp_dst_offset = 3600L;
- }
- } else {
- /* See if before or after last Sunday */
- if (7 - st.tm_wday <= 31 - st.tm_mday) {
- /* before last Sunday */
- retVal.tp_dst_offset = 3600L;
- } else {
- retVal.tp_dst_offset = 0L;
- }
+ } else if (st.tm_month == dst->dst_end_month) {
+ int NthSun = NthSunday(st.tm_mday, st.tm_wday,
+ dst->dst_end_Nth_Sunday,
+ dst->dst_end_month_ndays);
+ if (st.tm_mday < NthSun) { /* Before ending Sunday */
+ retVal.tp_dst_offset = 3600L;
+ } else if (st.tm_mday == NthSun) { /* Ending Sunday */
+ /* 01:59:59 PDT -> 01:00:00 PST */
+ if (st.tm_hour < 1) {
+ retVal.tp_dst_offset = 3600L;
+ } else {
+ retVal.tp_dst_offset = 0L;
+ }
+ } else { /* After ending Sunday */
+ retVal.tp_dst_offset = 0L;
}
} else {
retVal.tp_dst_offset = 0L;
@@ -1242,13 +1290,9 @@ PR_ParseTimeString(
else
tmp_hour = (rest[0]-'0');
- while (*rest && *rest != ':')
- rest++;
- rest++;
-
/* move over the colon, and parse minutes */
- end = rest + 1;
+ rest = ++end;
while (*end >= '0' && *end <= '9')
end++;
diff --git a/pr/src/misc/prtrace.c b/pr/src/misc/prtrace.c
index d26f5027..e7d4c55d 100644
--- a/pr/src/misc/prtrace.c
+++ b/pr/src/misc/prtrace.c
@@ -45,15 +45,7 @@
*/
#include <string.h>
-#include "prtrace.h"
-#include "prclist.h"
-#include "prlock.h"
-#include "prcvar.h"
-#include "prio.h"
-#include "prlog.h"
-#include "prenv.h"
-#include "prmem.h"
-#include "prerror.h"
+#include "primpl.h"
#define DEFAULT_TRACE_BUFSIZE ( 1024 * 1024 )
@@ -697,6 +689,12 @@ static PRFileDesc * InitializeRecording( void )
logLostData = 0; /* reset at entry */
logState = LogReset;
+#ifdef XP_UNIX
+ if ((getuid() != geteuid()) || (getgid() != getegid())) {
+ return NULL;
+ }
+#endif /* XP_UNIX */
+
/* Get the filename for the logfile from the environment */
logFileName = PR_GetEnv( "NSPR_TRACE_LOG" );
if ( logFileName == NULL )
diff --git a/pr/src/pthreads/Makefile.in b/pr/src/pthreads/Makefile.in
index ddda7091..006a3e8c 100644
--- a/pr/src/pthreads/Makefile.in
+++ b/pr/src/pthreads/Makefile.in
@@ -67,11 +67,6 @@ INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/incl
DEFINES += -D_NSPR_BUILD_
-ifeq ($(OS_ARCH),Linux)
-# for pthread_mutexattr_settype
-DEFINES += -D_XOPEN_SOURCE=500
-endif
-
include $(topsrcdir)/config/rules.mk
export:: $(TARGETS)
diff --git a/pr/src/pthreads/ptio.c b/pr/src/pthreads/ptio.c
index 7a4ce96f..a7ba5970 100644
--- a/pr/src/pthreads/ptio.c
+++ b/pr/src/pthreads/ptio.c
@@ -1071,6 +1071,15 @@ static PRBool pt_solaris_sendfile_cont(pt_Continuation *op, PRInt16 revents)
return PR_TRUE;
}
count = xferred;
+ } else if (count == 0) {
+ /*
+ * We are now at EOF. The file was truncated. Solaris sendfile is
+ * supposed to return 0 and no error in this case, though some versions
+ * may return -1 and EINVAL .
+ */
+ op->result.code = -1;
+ op->syserrno = 0; /* will be treated as EOF */
+ return PR_TRUE;
}
PR_ASSERT(count <= op->nbytes_to_send);
@@ -2419,6 +2428,14 @@ static PRInt32 pt_SolarisSendFile(PRFileDesc *sd, PRSendFileData *sfd,
|| syserrno == EAGAIN || syserrno == EWOULDBLOCK) {
count = xferred;
}
+ } else if (count == 0) {
+ /*
+ * We are now at EOF. The file was truncated. Solaris sendfile is
+ * supposed to return 0 and no error in this case, though some versions
+ * may return -1 and EINVAL .
+ */
+ count = -1;
+ syserrno = 0; /* will be treated as EOF */
}
if (count != -1 && count < nbytes_to_send) {
@@ -3463,7 +3480,7 @@ PR_IMPLEMENT(PRFileDesc*) PR_Socket(PRInt32 domain, PRInt32 type, PRInt32 proto)
fd = pt_SetMethods(osfd, ftype, PR_FALSE, PR_FALSE);
if (fd == NULL) close(osfd);
}
-#ifdef _PR_STRICT_ADDR_LEN
+#ifdef _PR_NEED_SECRET_AF
if (fd != NULL) fd->secret->af = domain;
#endif
#if defined(_PR_INET6_PROBE) || !defined(_PR_INET6)
@@ -4451,7 +4468,7 @@ PR_IMPLEMENT(PRFileDesc*) PR_ImportTCPSocket(PRInt32 osfd)
if (!_pr_initialized) _PR_ImplicitInitialization();
fd = pt_SetMethods(osfd, PR_DESC_SOCKET_TCP, PR_FALSE, PR_TRUE);
if (NULL == fd) close(osfd);
-#ifdef _PR_STRICT_ADDR_LEN
+#ifdef _PR_NEED_SECRET_AF
if (NULL != fd) fd->secret->af = PF_INET;
#endif
return fd;
@@ -4583,7 +4600,7 @@ PR_IMPLEMENT(PRStatus) PR_UnlockFile(PRFileDesc *fd)
* defined here for historical (or hysterical) reasons.
*/
-PRInt32 PR_GetSysfdTableMax(void)
+PR_IMPLEMENT(PRInt32) PR_GetSysfdTableMax(void)
{
#if defined(XP_UNIX) && !defined(AIX) && !defined(VMS)
struct rlimit rlim;
@@ -4597,7 +4614,7 @@ PRInt32 PR_GetSysfdTableMax(void)
#endif
}
-PRInt32 PR_SetSysfdTableSize(PRIntn table_size)
+PR_IMPLEMENT(PRInt32) PR_SetSysfdTableSize(PRIntn table_size)
{
#if defined(XP_UNIX) && !defined(AIX) && !defined(VMS)
struct rlimit rlim;
diff --git a/pr/src/pthreads/ptthread.c b/pr/src/pthreads/ptthread.c
index c8b41c11..778a4a7f 100644
--- a/pr/src/pthreads/ptthread.c
+++ b/pr/src/pthreads/ptthread.c
@@ -938,6 +938,7 @@ PR_IMPLEMENT(PRStatus) PR_Cleanup(void)
PR_Unlock(pt_book.ml);
_PR_CleanupMW();
+ _PR_CleanupTime();
_PR_CleanupDtoa();
_PR_CleanupCallOnce();
_PR_ShutdownLinker();
diff --git a/pr/tests/dll/Makefile.in b/pr/tests/dll/Makefile.in
index 906f5310..a9cbac43 100644
--- a/pr/tests/dll/Makefile.in
+++ b/pr/tests/dll/Makefile.in
@@ -68,11 +68,6 @@ ifeq ($(OS_ARCH), WINNT)
ifeq ($(OS_TARGET), WIN16)
# do nothing
else
-ifdef NS_USE_GCC
-DLLBASE=-Wl,--image-base -Wl,0x30000000
-else
-DLLBASE=-BASE:0x30000000
-endif
RES=$(OBJDIR)/my.res
RESNAME=../../../pr/src/nspr.rc
endif
diff --git a/pr/tests/testfile.c b/pr/tests/testfile.c
index 4d2228e8..7e0d1db9 100644
--- a/pr/tests/testfile.c
+++ b/pr/tests/testfile.c
@@ -1,36 +1,39 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
* The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
* Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
#include "nspr.h"
#include "prpriv.h"
diff --git a/pr/tests/timetest.c b/pr/tests/timetest.c
index 8560b719..c57c15e6 100644
--- a/pr/tests/timetest.c
+++ b/pr/tests/timetest.c
@@ -505,7 +505,7 @@ int main(int argc, char** argv)
** Stress test
*
** Go through four years, starting from
- ** 00:00:00 PST Jan. 1, 1993, incrementing
+ ** 00:00:00 PST Jan. 1, 2005, incrementing
** every 10 minutes.
**
**************************************************************
@@ -522,22 +522,22 @@ int main(int argc, char** argv)
printf("\n");
printf("*******************************************************\n");
printf("** **\n");
- printf("** Stress test **\n");
- printf("** Starting from midnight Jan. 1, 1993 PST, **\n");
+ printf("** Stress test Pacific Time **\n");
+ printf("** Starting from midnight Jan. 1, 2005 PST, **\n");
printf("** going through four years in 10-minute increment **\n");
printf("** **\n");
printf("*******************************************************\n\n");
}
LL_I2L(usecPer10Min, 600000000L);
- /* 00:00:00 PST Jan. 1, 1993 */
+ /* 00:00:00 PST Jan. 1, 2005 */
et.tm_usec = 0;
et.tm_sec = 0;
et.tm_min = 0;
et.tm_hour = 0;
et.tm_mday = 1;
et.tm_month = 0;
- et.tm_year = 1993;
+ et.tm_year = 2005;
et.tm_params.tp_gmt_offset = -8 * 3600;
et.tm_params.tp_dst_offset = 0;
usecs = PR_ImplodeTime(&et);
@@ -553,20 +553,19 @@ int main(int argc, char** argv)
PR_NormalizeTime(&et2, PR_USPacificTimeParameters);
if (!ExplodedTimeIsEqual(&et1, &et2)) {
- if (debug_mode) printf("ERROR: componentwise comparison failed\n");
+ printf("ERROR: componentwise comparison failed\n");
PrintExplodedTime(&et1);
- if (debug_mode) printf("\n");
+ printf("\n");
PrintExplodedTime(&et2);
- if (debug_mode) printf("\n");
+ printf("\n");
failed_already=1;
return 1;
}
if (LL_NE(usecs, PR_ImplodeTime(&et1))) {
- if (debug_mode)
- printf("ERROR: PR_ExplodeTime and PR_ImplodeTime are not inverse\n");
+ printf("ERROR: PR_ExplodeTime and PR_ImplodeTime are not inverse\n");
PrintExplodedTime(&et1);
- if (debug_mode) printf("\n");
+ printf("\n");
failed_already=1;
return 1;
}
@@ -574,18 +573,22 @@ int main(int argc, char** argv)
if (!dstInEffect && et1.tm_params.tp_dst_offset) {
dstInEffect = 1;
- if (debug_mode) printf("DST changeover from ");
- PrintExplodedTime(&et);
- if (debug_mode) printf(" to ");
- PrintExplodedTime(&et1);
- if (debug_mode) printf(".\n");
+ if (debug_mode) {
+ printf("DST changeover from ");
+ PrintExplodedTime(&et);
+ printf(" to ");
+ PrintExplodedTime(&et1);
+ printf(".\n");
+ }
} else if (dstInEffect && !et1.tm_params.tp_dst_offset) {
dstInEffect = 0;
- if (debug_mode) printf("DST changeover from ");
- PrintExplodedTime(&et);
- if (debug_mode) printf(" to ");
- PrintExplodedTime(&et1);
- if (debug_mode) printf(".\n");
+ if (debug_mode) {
+ printf("DST changeover from ");
+ PrintExplodedTime(&et);
+ printf(" to ");
+ PrintExplodedTime(&et1);
+ printf(".\n");
+ }
}
et = et1;
@@ -609,8 +612,8 @@ int main(int argc, char** argv)
printf("\n");
printf("*******************************************************\n");
printf("** **\n");
- printf("** Stress test **\n");
- printf("** Starting from midnight Jan. 1, 1993 PST, **\n");
+ printf("** Stress test Local Time **\n");
+ printf("** Starting from midnight Jan. 1, 2005 PST, **\n");
printf("** going through four years in 10-minute increment **\n");
printf("** **\n");
printf("*******************************************************\n\n");
@@ -618,14 +621,14 @@ int main(int argc, char** argv)
LL_I2L(usecPer10Min, 600000000L);
- /* 00:00:00 PST Jan. 1, 1993 */
+ /* 00:00:00 PST Jan. 1, 2005 */
et.tm_usec = 0;
et.tm_sec = 0;
et.tm_min = 0;
et.tm_hour = 0;
et.tm_mday = 1;
et.tm_month = 0;
- et.tm_year = 1993;
+ et.tm_year = 2005;
et.tm_params.tp_gmt_offset = -8 * 3600;
et.tm_params.tp_dst_offset = 0;
usecs = PR_ImplodeTime(&et);
@@ -641,18 +644,18 @@ int main(int argc, char** argv)
PR_NormalizeTime(&et2, PR_LocalTimeParameters);
if (!ExplodedTimeIsEqual(&et1, &et2)) {
- if (debug_mode) printf("ERROR: componentwise comparison failed\n");
+ printf("ERROR: componentwise comparison failed\n");
PrintExplodedTime(&et1);
- if (debug_mode) printf("\n");
+ printf("\n");
PrintExplodedTime(&et2);
- if (debug_mode) printf("\n");
+ printf("\n");
return 1;
}
if (LL_NE(usecs, PR_ImplodeTime(&et1))) {
printf("ERROR: PR_ExplodeTime and PR_ImplodeTime are not inverse\n");
PrintExplodedTime(&et1);
- if (debug_mode) printf("\n");
+ printf("\n");
failed_already=1;
return 1;
}
@@ -660,18 +663,22 @@ int main(int argc, char** argv)
if (!dstInEffect && et1.tm_params.tp_dst_offset) {
dstInEffect = 1;
- if (debug_mode) printf("DST changeover from ");
- PrintExplodedTime(&et);
- if (debug_mode) printf(" to ");
- PrintExplodedTime(&et1);
- if (debug_mode) printf(".\n");
+ if (debug_mode) {
+ printf("DST changeover from ");
+ PrintExplodedTime(&et);
+ printf(" to ");
+ PrintExplodedTime(&et1);
+ printf(".\n");
+ }
} else if (dstInEffect && !et1.tm_params.tp_dst_offset) {
dstInEffect = 0;
- if (debug_mode) printf("DST changeover from ");
- PrintExplodedTime(&et);
- if (debug_mode) printf(" to ");
- PrintExplodedTime(&et1);
- if (debug_mode) printf(".\n");
+ if (debug_mode) {
+ printf("DST changeover from ");
+ PrintExplodedTime(&et);
+ printf(" to ");
+ PrintExplodedTime(&et1);
+ printf(".\n");
+ }
}
et = et1;
@@ -694,8 +701,8 @@ int main(int argc, char** argv)
printf("\n");
printf("*******************************************************\n");
printf("** **\n");
- printf("** Stress test **\n");
- printf("** Starting from midnight Jan. 1, 1997 PST, **\n");
+ printf("** Stress test Local Time **\n");
+ printf("** Starting from midnight Jan. 1, 2009 PST, **\n");
printf("** going back four years in 10-minute increment **\n");
printf("** **\n");
printf("*******************************************************\n\n");
@@ -703,14 +710,14 @@ int main(int argc, char** argv)
LL_I2L(usecPer10Min, 600000000L);
- /* 00:00:00 PST Jan. 1, 1997 */
+ /* 00:00:00 PST Jan. 1, 2009 */
et.tm_usec = 0;
et.tm_sec = 0;
et.tm_min = 0;
et.tm_hour = 0;
et.tm_mday = 1;
et.tm_month = 0;
- et.tm_year = 1997;
+ et.tm_year = 2009;
et.tm_params.tp_gmt_offset = -8 * 3600;
et.tm_params.tp_dst_offset = 0;
usecs = PR_ImplodeTime(&et);
@@ -726,19 +733,18 @@ int main(int argc, char** argv)
PR_NormalizeTime(&et2, PR_LocalTimeParameters);
if (!ExplodedTimeIsEqual(&et1, &et2)) {
- if (debug_mode) printf("ERROR: componentwise comparison failed\n");
+ printf("ERROR: componentwise comparison failed\n");
PrintExplodedTime(&et1);
- if (debug_mode) printf("\n");
+ printf("\n");
PrintExplodedTime(&et2);
- if (debug_mode) printf("\n");
+ printf("\n");
return 1;
}
if (LL_NE(usecs, PR_ImplodeTime(&et1))) {
- if (debug_mode)
- printf("ERROR: PR_ExplodeTime and PR_ImplodeTime are not inverse\n");
+ printf("ERROR: PR_ExplodeTime and PR_ImplodeTime are not inverse\n");
PrintExplodedTime(&et1);
- if (debug_mode) printf("\n");
+ printf("\n");
failed_already=1;
return 1;
}
@@ -746,18 +752,22 @@ int main(int argc, char** argv)
if (!dstInEffect && et1.tm_params.tp_dst_offset) {
dstInEffect = 1;
- if (debug_mode) printf("DST changeover from ");
- PrintExplodedTime(&et);
- if (debug_mode) printf(" to ");
- PrintExplodedTime(&et1);
- if (debug_mode) printf(".\n");
+ if (debug_mode) {
+ printf("DST changeover from ");
+ PrintExplodedTime(&et);
+ printf(" to ");
+ PrintExplodedTime(&et1);
+ printf(".\n");
+ }
} else if (dstInEffect && !et1.tm_params.tp_dst_offset) {
dstInEffect = 0;
- if (debug_mode) printf("DST changeover from ");
- PrintExplodedTime(&et);
- if (debug_mode) printf(" to ");
- PrintExplodedTime(&et1);
- if (debug_mode) printf(".\n");
+ if (debug_mode) {
+ printf("DST changeover from ");
+ PrintExplodedTime(&et);
+ printf(" to ");
+ PrintExplodedTime(&et1);
+ printf(".\n");
+ }
}
et = et1;
diff --git a/pr/tests/tmocon.c b/pr/tests/tmocon.c
index 269e3003..1cd8f77f 100644
--- a/pr/tests/tmocon.c
+++ b/pr/tests/tmocon.c
@@ -1,36 +1,39 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
* The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
* Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
/***********************************************************************
**
diff --git a/pr/tests/vercheck.c b/pr/tests/vercheck.c
index 5174c0b3..50e4ea05 100644
--- a/pr/tests/vercheck.c
+++ b/pr/tests/vercheck.c
@@ -52,14 +52,16 @@
#include <stdlib.h>
/*
- * This release (4.6.1) is backward compatible with the
- * 4.0.x, 4.1.x, 4.2.x, 4.3.x, 4.4.x, 4.5.x, and 4.6 releases.
- * It, of course, is compatible with itself.
+ * This release (4.6.8) is backward compatible with the
+ * 4.0.x, 4.1.x, 4.2.x, 4.3.x, 4.4.x, 4.5.x, 4.6, 4.6.1, 4.6.2,
+ * 4.6.3, 4.6.4, 4.6.5, 4.6.6 and 4.6.7 releases. It, of course,
+ * is compatible with itself.
*/
static char *compatible_version[] = {
"4.0", "4.0.1", "4.1", "4.1.1", "4.1.2", "4.1.3",
"4.2", "4.2.1", "4.2.2", "4.3", "4.4", "4.4.1",
- "4.5", "4.5.1", "4.6", PR_VERSION
+ "4.5", "4.5.1", "4.6", "4.6.1", "4.6.2", "4.6.3",
+ "4.6.4", "4.6.5", "4.6.6", "4.6.7", PR_VERSION
};
/*
@@ -74,7 +76,7 @@ static char *incompatible_version[] = {
"3.0", "3.0.1",
"3.1", "3.1.1", "3.1.2", "3.1.3",
"3.5", "3.5.1",
- "4.6.3",
+ "4.6.99",
"4.7", "4.7.1",
"10.0", "11.1", "12.14.20"
};