Upgrade NSPR to NSPR_HEAD_20090321. This CVS tag includes
--- a/nsprpub/config/Makefile.in
+++ b/nsprpub/config/Makefile.in
@@ -108,17 +108,17 @@ endif
include $(topsrcdir)/config/rules.mk
PROGS = $(OBJDIR)/now$(PROG_SUFFIX)
ifeq (,$(CROSS_COMPILE)$(filter-out OS2 WINNT,$(OS_ARCH)))
TARGETS = $(PROGS)
else
-ifeq ($(OS_ARCH),WINCE)
+ifeq (,$(filter-out SYMBIAN WINCE,$(OS_ARCH)))
TARGETS = $(PROGS)
else
PROGS += $(OBJDIR)/nsinstall$(PROG_SUFFIX)
TARGETS = $(PROGS) $(PLSRCS:.pl=)
endif
endif
OUTOPTION = -o # end of the line
--- a/nsprpub/config/autoconf.mk.in
+++ b/nsprpub/config/autoconf.mk.in
@@ -119,12 +119,14 @@ WRAP_SYSTEM_INCLUDES = @WRAP_SYSTEM_INCL
MACOSX_DEPLOYMENT_TARGET = @MACOSX_DEPLOYMENT_TARGET@
ifdef MACOSX_DEPLOYMENT_TARGET
export MACOSX_DEPLOYMENT_TARGET
endif
MACOS_SDK_DIR = @MACOS_SDK_DIR@
+SYMBIAN_SDK_DIR = @SYMBIAN_SDK_DIR@
+
NEXT_ROOT = @NEXT_ROOT@
ifdef NEXT_ROOT
export NEXT_ROOT
endif
--- a/nsprpub/config/prdepend.h
+++ b/nsprpub/config/prdepend.h
@@ -37,9 +37,8 @@
/*
* A dummy header file that is a dependency for all the object files.
* Used to force a full recompilation of NSPR in Mozilla's Tinderbox
* depend builds. See comments in rules.mk.
*/
#error "Do not include this header file."
-
--- a/nsprpub/config/rules.mk
+++ b/nsprpub/config/rules.mk
@@ -104,17 +104,17 @@ endif
# The names of these libraries can be generated by simply specifying
# LIBRARY_NAME and LIBRARY_VERSION.
#
ifdef LIBRARY_NAME
ifeq (,$(filter-out WINNT WINCE OS2,$(OS_ARCH)))
#
-# Win95, Win16, and OS/2 require library names conforming to the 8.3 rule.
+# Win95 and OS/2 require library names conforming to the 8.3 rule.
# other platforms do not.
#
ifeq (,$(filter-out WIN95 WINCE OS2,$(OS_TARGET)))
LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)_s.$(LIB_SUFFIX)
SHARED_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
IMPORT_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION).$(LIB_SUFFIX)
SHARED_LIB_PDB = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION).pdb
else
@@ -313,16 +313,20 @@ endif
rm -f $@
$(AR) $(AR_FLAGS) $(OBJS) $(AR_EXTRA_ARGS)
$(RANLIB) $@
ifeq ($(OS_TARGET), OS2)
$(IMPORT_LIBRARY): $(MAPFILE)
rm -f $@
$(IMPLIB) $@ $(MAPFILE)
+else
+ifeq (,$(filter-out WIN95 WINCE,$(OS_TARGET)))
+$(IMPORT_LIBRARY): $(SHARED_LIBRARY)
+endif
endif
$(SHARED_LIBRARY): $(OBJS) $(RES) $(MAPFILE)
@$(MAKE_OBJDIR)
rm -f $@
ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
echo "#!" > $(OBJDIR)/lib$(LIBRARY_NAME)_syms
nm -B -C -g $(OBJS) \
--- a/nsprpub/configure
+++ b/nsprpub/configure
@@ -27,16 +27,19 @@ ac_help="$ac_help
--enable-optimize(=val) Enable code optimizations (val, ie. -O2) "
ac_help="$ac_help
--disable-debug Do not compile in debugging symbols
--enable-debug(=val) Enable debugging (debug flags val)"
ac_help="$ac_help
--enable-win32-target=\$t
Specify win32 flavor. (WIN95 or WINNT)"
ac_help="$ac_help
+ --enable-symbian-target=\$t
+ Specify symbian flavor. (WINSCW or GCCE)"
+ac_help="$ac_help
--enable-debug-rtl Use the MSVC debug runtime library"
ac_help="$ac_help
--enable-n32 Enable n32 ABI support (IRIX only)"
ac_help="$ac_help
--enable-64bit Enable 64-bit support (on certain platforms)"
ac_help="$ac_help
--enable-mdupdate Enable use of certain compilers' mdupdate feature"
ac_help="$ac_help
@@ -48,16 +51,19 @@ 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.2 for ppc, 10.4 for x86]"
ac_help="$ac_help
--disable-os2-high-mem Disable high-memory support on OS/2"
ac_help="$ac_help
+ --with-symbian-sdk=SYMBIAN_SDK_DIR
+ The path to the Symbian SDK"
+ac_help="$ac_help
--enable-strip Enable stripping of shared libs and programs"
ac_help="$ac_help
--with-pthreads Use system pthreads library as thread subsystem"
ac_help="$ac_help
--enable-user-pthreads Build using userland pthreads"
ac_help="$ac_help
--enable-nspr-threads Build using classic nspr threads"
ac_help="$ac_help
@@ -620,17 +626,17 @@ esac
# Make sure we can run config.sub.
if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
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:629: checking host system type" >&5
+echo "configure:635: checking host system type" >&5
host_alias=$host
case "$host_alias" in
NONE)
case $nonopt in
NONE)
if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
@@ -641,17 +647,17 @@ esac
host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
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:650: checking target system type" >&5
+echo "configure:656: checking target system type" >&5
target_alias=$target
case "$target_alias" in
NONE)
case $nonopt in
NONE) target_alias=$host_alias ;;
*) target_alias=$nonopt ;;
esac ;;
@@ -659,17 +665,17 @@ esac
target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
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:668: checking build system type" >&5
+echo "configure:674: checking build system type" >&5
build_alias=$build
case "$build_alias" in
NONE)
case $nonopt in
NONE) build_alias=$host_alias ;;
*) build_alias=$nonopt ;;
esac ;;
@@ -731,17 +737,17 @@ case "$target" in
*-cygwin*|*-mingw*)
# Check to see if we are really running in a msvc environemnt
_WIN32_MSVC=
for ac_prog in cl
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:740: checking for $ac_word" >&5
+echo "configure:746: 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
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -883,18 +889,23 @@ if test "${enable_debug+set}" = set; the
fi
fi
# Check whether --enable-win32-target or --disable-win32-target was given.
if test "${enable_win32_target+set}" = set; then
enableval="$enable_win32_target"
OS_TARGET=`echo $enableval | tr a-z A-Z`
-else
- OS_TARGET=
+fi
+
+
+# Check whether --enable-symbian-target or --disable-symbian-target was given.
+if test "${enable_symbian_target+set}" = set; then
+ enableval="$enable_symbian_target"
+ OS_TARGET=`echo $enableval | tr a-z A-Z`
fi
# Check whether --enable-debug-rtl or --disable-debug-rtl was given.
if test "${enable_debug_rtl+set}" = set; then
enableval="$enable_debug_rtl"
if test "$enableval" = "yes"; then
USE_DEBUG_RTL=1
@@ -1059,17 +1070,17 @@ if test -z "$CXX"; then
esac
fi
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:1068: checking for $ac_word" >&5
+echo "configure:1079: 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
case "$WHOAMI" in
/*)
ac_cv_path_WHOAMI="$WHOAMI" # Let the user override the test with a path.
;;
?:/*)
@@ -1130,23 +1141,23 @@ if test "$target" != "$host"; then
echo "cross compiling from $host to $target"
cross_compiling=yes
_SAVE_CC="$CC"
_SAVE_CFLAGS="$CFLAGS"
_SAVE_LDFLAGS="$LDFLAGS"
echo $ac_n "checking for $host compiler""... $ac_c" 1>&6
-echo "configure:1139: checking for $host compiler" >&5
+echo "configure:1150: 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:1145: checking for $ac_word" >&5
+echo "configure:1156: 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
if test -n "$HOST_CC"; then
ac_cv_prog_HOST_CC="$HOST_CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1182,26 +1193,26 @@ test -n "$HOST_CC" || HOST_CC=""""
HOST_LDFLAGS="$LDFLAGS"
fi
CC="$HOST_CC"
CFLAGS="$HOST_CFLAGS"
LDFLAGS="$HOST_LDFLAGS"
echo $ac_n "checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1191: checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5
+echo "configure:1202: checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5
cat > conftest.$ac_ext <<EOF
-#line 1193 "configure"
+#line 1204 "configure"
#include "confdefs.h"
int main() {
return(0);
; return 0; }
EOF
-if { (eval echo configure:1200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1211: \"$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
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
{ echo "configure: error: installation or configuration problem: $host compiler $HOST_CC cannot create executables." 1>&2; exit 1; }
fi
@@ -1220,17 +1231,17 @@ rm -f conftest*
;;
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:1229: checking for $ac_word" >&5
+echo "configure:1240: 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
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1254,17 +1265,17 @@ fi
test -n "$CC" && break
done
test -n "$CC" || CC="echo"
unset ac_cv_prog_CC
# 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:1263: checking for $ac_word" >&5
+echo "configure:1274: 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
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1284,17 +1295,17 @@ if test -n "$CC"; then
else
echo "$ac_t""no" 1>&6
fi
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:1293: checking for $ac_word" >&5
+echo "configure:1304: 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
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
@@ -1335,17 +1346,17 @@ else
fi
if test -z "$CC"; then
case "`uname -s`" in
*win32* | *WIN32*)
# 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:1344: checking for $ac_word" >&5
+echo "configure:1355: 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
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1367,33 +1378,33 @@ else
fi
;;
esac
fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1376: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1387: 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.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 1387 "configure"
+#line 1398 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1403: \"$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
ac_cv_prog_cc_cross=no
else
ac_cv_prog_cc_cross=yes
fi
else
@@ -1409,31 +1420,31 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAG
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
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:1418: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1429: 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:1423: checking whether we are using GNU C" >&5
+echo "configure:1434: 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
cat > conftest.c <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1432: \"$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:1443: \"$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
fi
fi
echo "$ac_t""$ac_cv_prog_gcc" 1>&6
@@ -1442,17 +1453,17 @@ if test $ac_cv_prog_gcc = yes; then
else
GCC=
fi
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:1451: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1462: 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
echo 'void f(){}' > conftest.c
if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
ac_cv_prog_cc_g=yes
else
ac_cv_prog_cc_g=no
@@ -1479,17 +1490,17 @@ else
fi
if test -n "$USE_CPLUS"; then
for ac_prog in $CXX "${target_alias}-g++" "${target}-g++"
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:1488: checking for $ac_word" >&5
+echo "configure:1499: 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
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1515,17 +1526,17 @@ done
test -n "$CXX" || CXX="echo"
unset ac_cv_prog_CXX
for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
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:1524: checking for $ac_word" >&5
+echo "configure:1535: 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
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1547,33 +1558,33 @@ else
fi
test -n "$CXX" && break
done
test -n "$CXX" || CXX="gcc"
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1556: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1567: 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.
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext << EOF
-#line 1567 "configure"
+#line 1578 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
-if { (eval echo configure:1572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1583: \"$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
ac_cv_prog_cxx_cross=no
else
ac_cv_prog_cxx_cross=yes
fi
else
@@ -1589,31 +1600,31 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAG
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
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:1598: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1609: 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:1603: checking whether we are using GNU C++" >&5
+echo "configure:1614: 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
cat > conftest.C <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1612: \"$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:1623: \"$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
fi
fi
echo "$ac_t""$ac_cv_prog_gxx" 1>&6
@@ -1622,17 +1633,17 @@ if test $ac_cv_prog_gxx = yes; then
else
GXX=
fi
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:1631: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1642: 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
echo 'void f(){}' > conftest.cc
if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
ac_cv_prog_cxx_g=yes
else
ac_cv_prog_cxx_g=no
@@ -1667,17 +1678,17 @@ fi
;;
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:1676: checking for $ac_word" >&5
+echo "configure:1687: 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
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1702,17 +1713,17 @@ test -n "$RANLIB" && break
done
test -n "$RANLIB" || RANLIB="echo"
for ac_prog in $AR "${target_alias}-ar" "${target}-ar"
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:1711: checking for $ac_word" >&5
+echo "configure:1722: 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
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1737,17 +1748,17 @@ test -n "$AR" && break
done
test -n "$AR" || AR="echo"
for ac_prog in $AS "${target_alias}-as" "${target}-as"
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:1746: checking for $ac_word" >&5
+echo "configure:1757: 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
if test -n "$AS"; then
ac_cv_prog_AS="$AS" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1772,17 +1783,17 @@ test -n "$AS" && break
done
test -n "$AS" || AS="echo"
for ac_prog in $LD "${target_alias}-ld" "${target}-ld"
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:1781: checking for $ac_word" >&5
+echo "configure:1792: 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
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1807,17 +1818,17 @@ test -n "$LD" && break
done
test -n "$LD" || LD="echo"
for ac_prog in $STRIP "${target_alias}-strip" "${target}-strip"
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:1816: checking for $ac_word" >&5
+echo "configure:1827: 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
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1842,17 +1853,17 @@ test -n "$STRIP" && break
done
test -n "$STRIP" || STRIP="echo"
for ac_prog in $WINDRES "${target_alias}-windres" "${target}-windres"
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:1851: checking for $ac_word" >&5
+echo "configure:1862: 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
if test -n "$WINDRES"; then
ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1877,17 +1888,17 @@ test -n "$WINDRES" && break
done
test -n "$WINDRES" || WINDRES="echo"
else
# 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:1886: checking for $ac_word" >&5
+echo "configure:1897: 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
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1907,17 +1918,17 @@ if test -n "$CC"; then
else
echo "$ac_t""no" 1>&6
fi
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:1916: checking for $ac_word" >&5
+echo "configure:1927: 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
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
@@ -1958,17 +1969,17 @@ else
fi
if test -z "$CC"; then
case "`uname -s`" in
*win32* | *WIN32*)
# 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:1967: checking for $ac_word" >&5
+echo "configure:1978: 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
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -1990,33 +2001,33 @@ else
fi
;;
esac
fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1999: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2010: 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.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 2010 "configure"
+#line 2021 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:2015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2026: \"$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
ac_cv_prog_cc_cross=no
else
ac_cv_prog_cc_cross=yes
fi
else
@@ -2032,31 +2043,31 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAG
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
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:2041: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2052: 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:2046: checking whether we are using GNU C" >&5
+echo "configure:2057: 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
cat > conftest.c <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2055: \"$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:2066: \"$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
fi
fi
echo "$ac_t""$ac_cv_prog_gcc" 1>&6
@@ -2065,17 +2076,17 @@ if test $ac_cv_prog_gcc = yes; then
else
GCC=
fi
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:2074: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2085: 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
echo 'void f(){}' > conftest.c
if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
ac_cv_prog_cc_g=yes
else
ac_cv_prog_cc_g=no
@@ -2105,17 +2116,17 @@ fi
if test "$CC" = "cl" -a -z "$CXX"; then
CXX=$CC
else
for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
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:2114: checking for $ac_word" >&5
+echo "configure:2125: 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
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -2137,33 +2148,33 @@ else
fi
test -n "$CXX" && break
done
test -n "$CXX" || CXX="gcc"
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2146: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:2157: 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.
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext << EOF
-#line 2157 "configure"
+#line 2168 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
-if { (eval echo configure:2162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2173: \"$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
ac_cv_prog_cxx_cross=no
else
ac_cv_prog_cxx_cross=yes
fi
else
@@ -2179,31 +2190,31 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAG
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
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:2188: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2199: 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:2193: checking whether we are using GNU C++" >&5
+echo "configure:2204: 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
cat > conftest.C <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:2202: \"$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:2213: \"$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
fi
fi
echo "$ac_t""$ac_cv_prog_gxx" 1>&6
@@ -2212,17 +2223,17 @@ if test $ac_cv_prog_gxx = yes; then
else
GXX=
fi
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:2221: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:2232: 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
echo 'void f(){}' > conftest.cc
if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
ac_cv_prog_cxx_g=yes
else
ac_cv_prog_cxx_g=no
@@ -2246,72 +2257,72 @@ else
else
CXXFLAGS=
fi
fi
fi
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2255: checking how to run the C preprocessor" >&5
+echo "configure:2266: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# This must be in double quotes, not single quotes, because CPP may get
# substituted into the Makefile and "${CC-cc}" will confuse make.
CPP="${CC-cc} -E"
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 2270 "configure"
+#line 2281 "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:2276: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2287: \"$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
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 2287 "configure"
+#line 2298 "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:2293: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2304: \"$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
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 2304 "configure"
+#line 2315 "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:2310: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2321: \"$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
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
@@ -2328,17 +2339,17 @@ fi
else
ac_cv_prog_CPP="$CPP"
fi
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:2337: checking for $ac_word" >&5
+echo "configure:2348: 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
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
@@ -2360,17 +2371,17 @@ else
echo "$ac_t""no" 1>&6
fi
for ac_prog in as
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:2369: checking for $ac_word" >&5
+echo "configure:2380: 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
case "$AS" in
/*)
ac_cv_path_AS="$AS" # Let the user override the test with a path.
;;
?:/*)
@@ -2401,17 +2412,17 @@ test -n "$AS" && break
done
test -n "$AS" || AS="$CC"
for ac_prog in ar
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:2410: checking for $ac_word" >&5
+echo "configure:2421: 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
case "$AR" in
/*)
ac_cv_path_AR="$AR" # Let the user override the test with a path.
;;
?:/*)
@@ -2442,17 +2453,17 @@ test -n "$AR" && break
done
test -n "$AR" || AR="echo not_ar"
for ac_prog in ld link
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:2451: checking for $ac_word" >&5
+echo "configure:2462: 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
case "$LD" in
/*)
ac_cv_path_LD="$LD" # Let the user override the test with a path.
;;
?:/*)
@@ -2483,17 +2494,17 @@ test -n "$LD" && break
done
test -n "$LD" || LD="echo not_ld"
for ac_prog in strip
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:2492: checking for $ac_word" >&5
+echo "configure:2503: 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
case "$STRIP" in
/*)
ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path.
;;
?:/*)
@@ -2524,17 +2535,17 @@ test -n "$STRIP" && break
done
test -n "$STRIP" || STRIP="echo not_strip"
for ac_prog in windres
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:2533: checking for $ac_word" >&5
+echo "configure:2544: 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
case "$WINDRES" in
/*)
ac_cv_path_WINDRES="$WINDRES" # Let the user override the test with a path.
;;
?:/*)
@@ -2592,39 +2603,39 @@ esac
if test "$cross_compiling" = "yes"; then
CROSS_COMPILE=1
else
CROSS_COMPILE=
fi
echo $ac_n "checking for gcc -pipe support""... $ac_c" 1>&6
-echo "configure:2601: checking for gcc -pipe support" >&5
+echo "configure:2612: 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
${CC} -S dummy-hello.c -o dummy-hello.s 2>&5
cat dummy-hello.s | ${AS} -o dummy-hello.S - 2>&5
if test $? = 0; then
_res_as_stdin="yes"
else
_res_as_stdin="no"
fi
if test "$_res_as_stdin" = "yes"; then
_SAVE_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -pipe"
cat > conftest.$ac_ext <<EOF
-#line 2616 "configure"
+#line 2627 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
printf("Hello World\n");
; return 0; }
EOF
-if { (eval echo configure:2623: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2634: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
_res_gcc_pipe="yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
_res_gcc_pipe="no"
fi
@@ -2641,17 +2652,17 @@ rm -f conftest*
rm -f dummy-hello.c dummy-hello.s dummy-hello.S dummy-hello a.out
echo "$ac_t""$_res" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test "$GNU_CC"; then
echo $ac_n "checking for visibility(hidden) attribute""... $ac_c" 1>&6
-echo "configure:2650: checking for visibility(hidden) attribute" >&5
+echo "configure:2661: 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
cat > conftest.c <<EOF
int foo __attribute__ ((visibility ("hidden"))) = 1;
EOF
ac_cv_visibility_hidden=no
if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
@@ -2665,17 +2676,17 @@ fi
echo "$ac_t""$ac_cv_visibility_hidden" 1>&6
if test "$ac_cv_visibility_hidden" = "yes"; then
cat >> confdefs.h <<\EOF
#define HAVE_VISIBILITY_HIDDEN_ATTRIBUTE 1
EOF
echo $ac_n "checking for visibility pragma support""... $ac_c" 1>&6
-echo "configure:2674: checking for visibility pragma support" >&5
+echo "configure:2685: 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
cat > conftest.c <<EOF
#pragma GCC visibility push(hidden)
int foo_hidden = 1;
#pragma GCC visibility push(default)
int foo_default = 1;
@@ -2718,17 +2729,17 @@ fi # GNU_CC
fi # SKIP_COMPILER_CHECKS
if test -z "$SKIP_PATH_CHECKS"; then
for ac_prog in perl5 perl
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:2727: checking for $ac_word" >&5
+echo "configure:2738: 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
case "$PERL" in
/*)
ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
;;
?:/*)
@@ -2821,19 +2832,16 @@ fi
# Note: OS_TARGET should be specified on the command line for gmake.
# When OS_TARGET=WIN95 is specified, then a Windows 95 target is built.
# The difference between the Win95 target and the WinNT target is that
# the WinNT target uses Windows NT specific features not available
# in Windows 95. The Win95 target will run on Windows NT, but (supposedly)
# at lesser performance (the Win95 target uses threads; the WinNT target
# uses fibers).
#
-# When OS_TARGET=WIN16 is specified, then a Windows 3.11 (16bit) target
-# is built. See: win16_3.11.mk for lots more about the Win16 target.
-#
# If OS_TARGET is not specified, it defaults to $(OS_ARCH), i.e., no
# cross-compilation.
#
#
# The following hack allows one to build on a WIN95 machine (as if
# s/he were cross-compiling on a WINNT host for a WIN95 target).
# It also accomodates for MKS's uname.exe. If you never intend
@@ -2922,19 +2930,16 @@ if test -n "$MOZILLA_CLIENT" && test "$O
fi
fi
if test -z "$OS_TARGET"; then
OS_TARGET=$OS_ARCH
fi
if test "$OS_TARGET" = "WIN95"; then
OS_RELEASE="4.0"
fi
-if test "$OS_TARGET" = "WIN16"; then
- OS_RELEASE=
-fi
OS_CONFIG="${OS_TARGET}${OS_RELEASE}"
# Check whether --enable-os2-high-mem or --disable-os2-high-mem was given.
if test "${enable_os2_high_mem+set}" = set; then
enableval="$enable_os2_high_mem"
if test "$enableval" = "no"; then
MOZ_OS2_HIGH_MEMORY=
else
@@ -2976,27 +2981,27 @@ EOF
cat >> confdefs.h <<\EOF
#define SYSV 1
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:2985: checking for sys/atomic_op.h" >&5
+echo "configure:2990: 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 2990 "configure"
+#line 2995 "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:2995: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3000: \"$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*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
@@ -3143,36 +3148,36 @@ EOF
PR_MD_ARCH_DIR=beos
RESOLVE_LINK_SYMBOLS=1
case "${target_cpu}" in
i*86)
_OPTIMIZE_FLAGS=-O2
_DEBUG_FLAGS='-gdwarf-2 -O0'
MKSHLIB='$(CCC) $(DSO_LDOPTS) -o $@'
echo $ac_n "checking for gethostbyaddr in -lbind""... $ac_c" 1>&6
-echo "configure:3152: checking for gethostbyaddr in -lbind" >&5
+echo "configure:3157: 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
else
ac_save_LIBS="$LIBS"
LIBS="-lbind $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3160 "configure"
+#line 3165 "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
builtin and then its argument prototype would still apply. */
char gethostbyaddr();
int main() {
gethostbyaddr()
; return 0; }
EOF
-if { (eval echo configure:3171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3176: \"$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
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
@@ -4123,19 +4128,16 @@ EOF
case "$OS_TARGET" in
WINNT)
MDCPUCFG_H=_winnt.cfg
;;
WIN95)
MDCPUCFG_H=_win95.cfg
;;
- WIN16)
- MDCPUCFG_H=_win16.cfg
- ;;
*)
{ echo "configure: error: Missing OS_TARGET for ${target}. Use --enable-win32-target to set." 1>&2; exit 1; }
;;
esac
case "$target_cpu" in
i*86)
if test -n "$USE_64"; then
@@ -4538,27 +4540,27 @@ EOF
if test -z "$GNU_CC"; then
CC="$CC -std1 -ieee_with_inexact"
if test "$OS_RELEASE" != "V2.0"; then
CC="$CC -readonly_strings"
fi
_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:4547: checking for machine/builtins.h" >&5
+echo "configure:4549: 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 4552 "configure"
+#line 4554 "configure"
#include "confdefs.h"
#include <machine/builtins.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4557: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4559: \"$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*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
@@ -5001,16 +5003,136 @@ EOF
MDCPUCFG_H=_unixware7.cfg
fi
PR_MD_CSRCS=unixware.c
DSO_LDOPTS=-G
CPU_ARCH=x86
;;
+*-symbian*)
+ # Check whether --with-symbian-sdk or --without-symbian-sdk was given.
+if test "${with_symbian_sdk+set}" = set; then
+ withval="$with_symbian_sdk"
+ SYMBIAN_SDK_DIR=$withval
+fi
+
+
+ echo -----------------------------------------------------------------------------
+ echo Building with Symbian SDK in: $SYMBIAN_SDK_DIR
+ echo -----------------------------------------------------------------------------
+
+ cat >> confdefs.h <<\EOF
+#define XP_UNIX 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define SYMBIAN 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define __arm__ 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define __SYMBIAN32__ 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define _UNICODE 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define NDEBUG 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define __SUPPORT_CPP_EXCEPTIONS__ 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define MOZ_STDERR_TO_STDOUT 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_FCNTL_FILE_LOCKING 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_SOCKLEN_T 1
+EOF
+
+ USE_PTHREADS=1
+ LIB_SUFFIX=lib
+ DLL_SUFFIX=dll
+ MKSHLIB=
+ DSO_LDOPTS=
+ DSO_CFLAGS=
+ VISIBILITY_FLAGS=
+ MDCPUCFG_H=_symbian.cfg
+ PR_MD_CSRCS=symbian.c
+ NSINSTALL=nsinstall
+ RANLIB='echo no ranlib '
+ CPU_ARCH=ARM
+ OS_ARCH=SYMBIAN
+ OS_EXE_CFLAGS="$OS_EXE_CFLAGS -D__EXE__"
+ CFLAGS="$CFLAGS -MD -nostdinc"
+ SYMBIAN_SYS_INCLUDE="-I$SYMBIAN_SDK_DIR/Epoc32/include/variant -I$SYMBIAN_SDK_DIR/Epoc32/include -I$SYMBIAN_SDK_DIR/Epoc32/include/stdapis"
+ echo -------------------------------------------------------
+ echo SYMBIAN_SYS_INCLUDE is: $SYMBIAN_SYS_INCLUDE
+ echo -------------------------------------------------------
+ case "$OS_TARGET" in
+ WINSCW)
+ CC=mwccsym2.exe
+ CXX=mwccsym2.exe
+ LD=mwldsym2.exe
+ AR=mwldsym2.exe
+ WINSCW_LD_DIR="\$(SYMBIAN_SDK_DIR)/EPOC32/RELEASE/WINSCW/UDEB"
+ CFLAGS="$CFLAGS -O0 -inline off -wchar_t off -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -nostderr -gccdep -cwd source -i- -I\$(VPATH)"
+ SYMBIAN_SYS_INCLUDE="$SYMBIAN_SYS_INCLUDE -include Symbian_OS_v9.2.hrh"
+ AR_FLAGS="-library -msgstyle gcc -stdlib -subsystem windows -noimplib -o \$@"
+ cat >> confdefs.h <<\EOF
+#define _DEBUG 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define __CW32__ 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define __WINS__ 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define __WINSCW__ 1
+EOF
+
+ DEFINES="$DEFINES -U_WIN32"
+ ;;
+ GCCE)
+ CFLAGS="$CFLAGS -Wall -Wno-unknown-pragmas -fexceptions -march=armv5t -mapcs -pipe -x c -msoft-float"
+ CXXFLAGS="$CXXFLAGS $CFLAGS -Wno-ctor-dtor-privacy"
+ SYMBIAN_SYS_INCLUDE="$SYMBIAN_SYS_INCLUDE -include $SYMBIAN_SDK_DIR/EPOC32/INCLUDE/GCCE/GCCE.h"
+ cat >> confdefs.h <<\EOF
+#define __GCCE__ 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define __EABI__ 1
+EOF
+
+ DEFINES="$DEFINES -D__PRODUCT_INCLUDE__=$SYMBIAN_SDK_DIR/Epoc32/include/variant/Symbian_OS_v9.2.hrh"
+ ;;
+ *)
+ { echo "configure: error: Missing OS_TARGET for ${target}. Set --enable-symbian-target to with 'WINSCW' or 'GCCE'." 1>&2; exit 1; }
+ ;;
+ esac
+ CFLAGS="$CFLAGS ${SYMBIAN_SYS_INCLUDE}"
+ ;;
+
*-os2*)
cat >> confdefs.h <<\EOF
#define XP_OS2 1
EOF
cat >> confdefs.h <<\EOF
#define XP_PC 1
EOF
@@ -5077,63 +5199,63 @@ if test -z "$SKIP_LIBRARY_CHECKS"; then
case $target in
*-darwin*|*-beos*)
;;
*)
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:5086: checking for dlopen in -ldl" >&5
+echo "configure:5208: 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
else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5094 "configure"
+#line 5216 "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
builtin and then its argument prototype would still apply. */
char dlopen();
int main() {
dlopen()
; return 0; }
EOF
-if { (eval echo configure:5105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5227: \"$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
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
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:5122: checking for dlfcn.h" >&5
+echo "configure:5244: 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 5127 "configure"
+#line 5249 "configure"
#include "confdefs.h"
#include <dlfcn.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5132: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5254: \"$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*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
@@ -5156,23 +5278,23 @@ fi
;;
esac
if test $ac_cv_prog_gcc = yes; then
echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:5165: checking whether ${CC-cc} needs -traditional" >&5
+echo "configure:5287: 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 5171 "configure"
+#line 5293 "configure"
#include "confdefs.h"
#include <sgtty.h>
Autoconf TIOCGETP
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "$ac_pattern" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_prog_gcc_traditional=yes
@@ -5180,17 +5302,17 @@ else
rm -rf conftest*
ac_cv_prog_gcc_traditional=no
fi
rm -f conftest*
if test $ac_cv_prog_gcc_traditional = no; then
cat > conftest.$ac_ext <<EOF
-#line 5189 "configure"
+#line 5311 "configure"
#include "confdefs.h"
#include <termio.h>
Autoconf TCGETA
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "$ac_pattern" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_prog_gcc_traditional=yes
@@ -5204,22 +5326,22 @@ echo "$ac_t""$ac_cv_prog_gcc_traditional
if test $ac_cv_prog_gcc_traditional = yes; then
CC="$CC -traditional"
fi
fi
for ac_func in lchown strerror
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5213: checking for $ac_func" >&5
+echo "configure:5335: 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 5218 "configure"
+#line 5340 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
@@ -5232,17 +5354,17 @@ int main() {
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
-if { (eval echo configure:5241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5363: \"$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
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
@@ -5273,17 +5395,17 @@ if test "${enable_strip+set}" = set; the
fi
case "${target_os}" in
hpux*)
if test -z "$GNU_CC"; then
echo $ac_n "checking for +Olit support""... $ac_c" 1>&6
-echo "configure:5282: checking for +Olit support" >&5
+echo "configure:5404: 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
ac_cv_hpux_usable_olit_option=no
rm -f conftest*
echo 'int main() { return 0; }' | cat > conftest.c
${CC-cc} ${CFLAGS} +Olit=all -o conftest conftest.c > conftest.out 2>&1
if test $? -eq 0; then
@@ -5312,17 +5434,17 @@ esac
case "$target_os" in
darwin*)
_HAVE_PTHREADS=1
;;
*)
echo $ac_n "checking for pthread_create in -lpthreads""... $ac_c" 1>&6
-echo "configure:5321: checking for pthread_create in -lpthreads" >&5
+echo "configure:5443: checking for pthread_create in -lpthreads" >&5
echo "
#include <pthread.h>
void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
@@ -5334,17 +5456,17 @@ echo "
rm -f dummy.c dummy${ac_exeext} ;
if test "$_res" = "0"; then
echo "$ac_t""yes" 1>&6
_HAVE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthreads"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:5343: checking for pthread_create in -lpthread" >&5
+echo "configure:5465: checking for pthread_create in -lpthread" >&5
echo "
#include <pthread.h>
void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
@@ -5356,17 +5478,17 @@ echo "
rm -f dummy.c dummy${ac_exeext} ;
if test "$_res" = "0"; then
echo "$ac_t""yes" 1>&6
_HAVE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthread"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6
-echo "configure:5365: checking for pthread_create in -lc_r" >&5
+echo "configure:5487: checking for pthread_create in -lc_r" >&5
echo "
#include <pthread.h>
void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
@@ -5378,17 +5500,17 @@ echo "
rm -f dummy.c dummy${ac_exeext} ;
if test "$_res" = "0"; then
echo "$ac_t""yes" 1>&6
_HAVE_PTHREADS=1 _PTHREAD_LDFLAGS="-lc_r"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6
-echo "configure:5387: checking for pthread_create in -lc" >&5
+echo "configure:5509: checking for pthread_create in -lc" >&5
echo "
#include <pthread.h>
void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
@@ -5510,17 +5632,17 @@ EOF
fi
fi
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:5519: checking whether ${CC-cc} accepts -pthread" >&5
+echo "configure:5641: 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
if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthread`" && test -z "`egrep -i '(error|incorrect)' conftest.out`" ; then
ac_cv_have_dash_pthread=yes
case "$target_os" in
freebsd*)
# Freebsd doesn't use -pthread for compiles, it uses them for linking
@@ -5533,17 +5655,17 @@ echo "configure:5519: checking whether $
fi
fi
rm -f conftest*
echo "$ac_t""$ac_cv_have_dash_pthread" 1>&6
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:5542: checking whether ${CC-cc} accepts -pthreads" >&5
+echo "configure:5664: 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
if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthreads`" && test -z "`egrep -i '(error|incorrect)' conftest.out`" ; then
ac_cv_have_dash_pthreads=yes
CFLAGS="$CFLAGS -pthreads"
CXXFLAGS="$CXXFLAGS -pthreads"
fi
@@ -5942,16 +6064,17 @@ esac
+
MAKEFILES="
Makefile
config/Makefile
config/autoconf.mk
config/nsprincl.mk
config/nsprincl.sh
config/nspr-config
lib/Makefile
@@ -6066,17 +6189,17 @@ trap 'rm -f $CONFIG_STATUS conftest*; ex
# Protect against Makefile macro expansion.
cat > conftest.defs <<\EOF
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
-DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' ' | tr '\015' ' '` # Manually modified for MKS support.
rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
@@ -6236,16 +6359,17 @@ s%@RC@%$RC%g
s%@RCFLAGS@%$RCFLAGS%g
s%@DLLFLAGS@%$DLLFLAGS%g
s%@EXEFLAGS@%$EXEFLAGS%g
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%@SYMBIAN_SDK_DIR@%$SYMBIAN_SDK_DIR%g
s%@NEXT_ROOT@%$NEXT_ROOT%g
s%@MT@%$MT%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
--- a/nsprpub/configure.in
+++ b/nsprpub/configure.in
@@ -203,18 +203,22 @@ AC_ARG_ENABLE(debug,
_DEBUG_FLAGS=`echo $enableval | sed -e 's|\\\ | |g'`
_SAVE_DEBUG_FLAGS=$_DEBUG_FLAGS
fi
fi])
AC_ARG_ENABLE(win32-target,
[ --enable-win32-target=\$t
Specify win32 flavor. (WIN95 or WINNT)],
- OS_TARGET=`echo $enableval | tr a-z A-Z`,
- OS_TARGET=)
+ OS_TARGET=`echo $enableval | tr a-z A-Z`)
+
+AC_ARG_ENABLE(symbian-target,
+ [ --enable-symbian-target=\$t
+ Specify symbian flavor. (WINSCW or GCCE)],
+ OS_TARGET=`echo $enableval | tr a-z A-Z`)
AC_ARG_ENABLE(debug-rtl,
[ --enable-debug-rtl Use the MSVC debug runtime library],
[ if test "$enableval" = "yes"; then
USE_DEBUG_RTL=1
fi ])
AC_ARG_ENABLE(n32,
@@ -689,19 +693,16 @@ fi
# Note: OS_TARGET should be specified on the command line for gmake.
# When OS_TARGET=WIN95 is specified, then a Windows 95 target is built.
# The difference between the Win95 target and the WinNT target is that
# the WinNT target uses Windows NT specific features not available
# in Windows 95. The Win95 target will run on Windows NT, but (supposedly)
# at lesser performance (the Win95 target uses threads; the WinNT target
# uses fibers).
#
-# When OS_TARGET=WIN16 is specified, then a Windows 3.11 (16bit) target
-# is built. See: win16_3.11.mk for lots more about the Win16 target.
-#
# If OS_TARGET is not specified, it defaults to $(OS_ARCH), i.e., no
# cross-compilation.
#
#
# The following hack allows one to build on a WIN95 machine (as if
# s/he were cross-compiling on a WINNT host for a WIN95 target).
# It also accomodates for MKS's uname.exe. If you never intend
@@ -790,19 +791,16 @@ if test -n "$MOZILLA_CLIENT" && test "$O
fi
fi
if test -z "$OS_TARGET"; then
OS_TARGET=$OS_ARCH
fi
if test "$OS_TARGET" = "WIN95"; then
OS_RELEASE="4.0"
fi
-if test "$OS_TARGET" = "WIN16"; then
- OS_RELEASE=
-fi
OS_CONFIG="${OS_TARGET}${OS_RELEASE}"
dnl ========================================================
dnl Enable high-memory support on OS/2 by default.
dnl ========================================================
AC_ARG_ENABLE(os2-high-mem,
[ --disable-os2-high-mem Disable high-memory support on OS/2],
[ if test "$enableval" = "no"; then
@@ -1627,19 +1625,16 @@ tools are selected during the Xcode/Deve
case "$OS_TARGET" in
WINNT)
MDCPUCFG_H=_winnt.cfg
;;
WIN95)
MDCPUCFG_H=_win95.cfg
;;
- WIN16)
- MDCPUCFG_H=_win16.cfg
- ;;
*)
AC_MSG_ERROR([Missing OS_TARGET for ${target}. Use --enable-win32-target to set.])
;;
esac
case "$target_cpu" in
i*86)
if test -n "$USE_64"; then
@@ -2161,16 +2156,86 @@ mips-sony-newsos*)
AC_DEFINE(_PR_HAVE_SOCKADDR_LEN)
MDCPUCFG_H=_unixware7.cfg
fi
PR_MD_CSRCS=unixware.c
DSO_LDOPTS=-G
CPU_ARCH=x86
;;
+*-symbian*)
+ AC_ARG_WITH(symbian-sdk,
+ [ --with-symbian-sdk=SYMBIAN_SDK_DIR
+ The path to the Symbian SDK],
+ SYMBIAN_SDK_DIR=$withval)
+
+ echo -----------------------------------------------------------------------------
+ echo Building with Symbian SDK in: $SYMBIAN_SDK_DIR
+ echo -----------------------------------------------------------------------------
+
+ AC_DEFINE(XP_UNIX)
+ AC_DEFINE(SYMBIAN)
+ AC_DEFINE(__arm__)
+ AC_DEFINE(__SYMBIAN32__)
+ AC_DEFINE(_UNICODE)
+ AC_DEFINE(NDEBUG)
+ AC_DEFINE(__SUPPORT_CPP_EXCEPTIONS__)
+ AC_DEFINE(MOZ_STDERR_TO_STDOUT)
+ AC_DEFINE(HAVE_FCNTL_FILE_LOCKING)
+ AC_DEFINE(HAVE_SOCKLEN_T)
+ USE_PTHREADS=1
+ LIB_SUFFIX=lib
+ DLL_SUFFIX=dll
+ MKSHLIB=
+ DSO_LDOPTS=
+ DSO_CFLAGS=
+ VISIBILITY_FLAGS=
+ MDCPUCFG_H=_symbian.cfg
+ PR_MD_CSRCS=symbian.c
+ NSINSTALL=nsinstall
+ RANLIB='echo no ranlib '
+ CPU_ARCH=ARM
+ OS_ARCH=SYMBIAN
+ OS_EXE_CFLAGS="$OS_EXE_CFLAGS -D__EXE__"
+ CFLAGS="$CFLAGS -MD -nostdinc"
+ SYMBIAN_SYS_INCLUDE="-I$SYMBIAN_SDK_DIR/Epoc32/include/variant -I$SYMBIAN_SDK_DIR/Epoc32/include -I$SYMBIAN_SDK_DIR/Epoc32/include/stdapis"
+ echo -------------------------------------------------------
+ echo SYMBIAN_SYS_INCLUDE is: $SYMBIAN_SYS_INCLUDE
+ echo -------------------------------------------------------
+ case "$OS_TARGET" in
+ WINSCW)
+ CC=mwccsym2.exe
+ CXX=mwccsym2.exe
+ LD=mwldsym2.exe
+ AR=mwldsym2.exe
+ WINSCW_LD_DIR="\$(SYMBIAN_SDK_DIR)/EPOC32/RELEASE/WINSCW/UDEB"
+ CFLAGS="$CFLAGS -O0 -inline off -wchar_t off -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -nostderr -gccdep -cwd source -i- -I\$(VPATH)"
+ SYMBIAN_SYS_INCLUDE="$SYMBIAN_SYS_INCLUDE -include Symbian_OS_v9.2.hrh"
+ AR_FLAGS="-library -msgstyle gcc -stdlib -subsystem windows -noimplib -o \$@"
+ AC_DEFINE(_DEBUG)
+ AC_DEFINE(__CW32__)
+ AC_DEFINE(__WINS__)
+ AC_DEFINE(__WINSCW__)
+ DEFINES="$DEFINES -U_WIN32"
+ ;;
+ GCCE)
+ CFLAGS="$CFLAGS -Wall -Wno-unknown-pragmas -fexceptions -march=armv5t -mapcs -pipe -x c -msoft-float"
+ CXXFLAGS="$CXXFLAGS $CFLAGS -Wno-ctor-dtor-privacy"
+ SYMBIAN_SYS_INCLUDE="$SYMBIAN_SYS_INCLUDE -include $SYMBIAN_SDK_DIR/EPOC32/INCLUDE/GCCE/GCCE.h"
+ AC_DEFINE(__GCCE__)
+ AC_DEFINE(__EABI__)
+ DEFINES="$DEFINES -D__PRODUCT_INCLUDE__=$SYMBIAN_SDK_DIR/Epoc32/include/variant/Symbian_OS_v9.2.hrh"
+ ;;
+ *)
+ AC_MSG_ERROR([Missing OS_TARGET for ${target}. Set --enable-symbian-target to with 'WINSCW' or 'GCCE'.])
+ ;;
+ esac
+ CFLAGS="$CFLAGS ${SYMBIAN_SYS_INCLUDE}"
+ ;;
+
*-os2*)
AC_DEFINE(XP_OS2)
AC_DEFINE(XP_PC)
AC_DEFINE(BSD_SELECT)
AC_DEFINE(TCPV40HDRS)
LIB_SUFFIX=lib
DLL_SUFFIX=dll
RC=rc.exe
@@ -2818,16 +2883,17 @@ AC_SUBST(RC)
AC_SUBST(RCFLAGS)
AC_SUBST(DLLFLAGS)
AC_SUBST(EXEFLAGS)
AC_SUBST(OS_DLLFLAGS)
AC_SUBST(CYGWIN_WRAPPER)
AC_SUBST(VISIBILITY_FLAGS)
AC_SUBST(WRAP_SYSTEM_INCLUDES)
AC_SUBST(MACOS_SDK_DIR)
+AC_SUBST(SYMBIAN_SDK_DIR)
AC_SUBST(NEXT_ROOT)
AC_SUBST(MT)
dnl ========================================================
dnl Generate output files.
dnl ========================================================
MAKEFILES="
Makefile
--- a/nsprpub/lib/ds/plhash.c
+++ b/nsprpub/lib/ds/plhash.c
@@ -127,22 +127,16 @@ PL_NewHashTable(PRUint32 n, PLHashFuncti
if (!allocOps) allocOps = &defaultHashAllocOps;
ht = (PLHashTable*)((*allocOps->allocTable)(allocPriv, sizeof *ht));
if (!ht)
return 0;
memset(ht, 0, sizeof *ht);
ht->shift = PL_HASH_BITS - n;
n = 1 << n;
-#if defined(WIN16)
- if (n > 16000) {
- (*allocOps->freeTable)(allocPriv, ht);
- return 0;
- }
-#endif /* WIN16 */
nb = n * sizeof(PLHashEntry *);
ht->buckets = (PLHashEntry**)((*allocOps->allocTable)(allocPriv, nb));
if (!ht->buckets) {
(*allocOps->freeTable)(allocPriv, ht);
return 0;
}
memset(ht->buckets, 0, nb);
@@ -249,20 +243,16 @@ PL_HashTableRawAdd(PLHashTable *ht, PLHa
PRUint32 i, n;
PLHashEntry *he, *next, **oldbuckets;
PRSize nb;
/* Grow the table if it is overloaded */
n = NBUCKETS(ht);
if (ht->nentries >= OVERLOADED(n)) {
oldbuckets = ht->buckets;
-#if defined(WIN16)
- if (2 * n > 16000)
- return 0;
-#endif /* WIN16 */
nb = 2 * n * sizeof(PLHashEntry *);
ht->buckets = (PLHashEntry**)
((*ht->allocOps->allocTable)(ht->allocPriv, nb));
if (!ht->buckets) {
ht->buckets = oldbuckets;
return 0;
}
memset(ht->buckets, 0, nb);
--- a/nsprpub/lib/libc/src/plerror.c
+++ b/nsprpub/lib/libc/src/plerror.c
@@ -64,25 +64,9 @@ const char *name = PR_ErrorToName(error)
PR_IMPLEMENT(void) PL_PrintError(const char *msg)
{
static PRFileDesc *fd = NULL;
if (NULL == fd) fd = PR_GetSpecialFD(PR_StandardError);
PL_FPrintError(fd, msg);
} /* PL_PrintError */
-#if defined(WIN16)
-/*
-** libmain() is a required function for win16
-**
-*/
-int CALLBACK LibMain( HINSTANCE hInst, WORD wDataSeg,
- WORD cbHeapSize, LPSTR lpszCmdLine )
-{
-return TRUE;
-}
-#endif /* WIN16 */
-
-
-
-
-
/* plerror.c */
--- a/nsprpub/lib/msgc/src/prgcapi.c
+++ b/nsprpub/lib/msgc/src/prgcapi.c
@@ -264,38 +264,25 @@ PR_IMPLEMENT(void) PR_GetEndFinalizeHook
*hook = _pr_endFinalizeHook;
*arg = _pr_endFinalizeHookArg;
UNLOCK_GC();
}
#ifdef DEBUG
#include "prprf.h"
-#if defined(WIN16)
-static FILE *tracefile = 0;
-#endif
-
PR_IMPLEMENT(void) GCTrace(char *fmt, ...)
{
va_list ap;
char buf[400];
va_start(ap, fmt);
PR_vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
-#if defined(WIN16)
- if ( tracefile == 0 )
- {
- tracefile = fopen( "xxxGCtr", "w" );
- }
- fprintf(tracefile, "%s\n", buf );
- fflush(tracefile);
-#else
PR_LOG(_pr_msgc_lm, PR_LOG_ALWAYS, ("%s", buf));
-#endif
}
#endif
void _PR_InitGC(PRWord flags)
{
static char firstTime = 1;
if (!firstTime) return;
--- a/nsprpub/lib/msgc/src/prmsgc.c
+++ b/nsprpub/lib/msgc/src/prmsgc.c
@@ -292,105 +292,40 @@ static PRWord bigAllocBytes = 0;
/************************************************************************/
/*
** Mark the start of an object in a segment. Note that we mark the header
** word (which we always have), not the data word (which we may not have
** for empty objects).
** XXX tune: put subtract of _sp->base into _sp->hbits pointer?
*/
-#if !defined(WIN16)
#define SET_HBIT(_sp,_ph) \
SET_BIT((_sp)->hbits, (((PRWord*)(_ph)) - ((PRWord*) (_sp)->base)))
#define CLEAR_HBIT(_sp,_ph) \
CLEAR_BIT((_sp)->hbits, (((PRWord*)(_ph)) - ((PRWord*) (_sp)->base)))
#define IS_HBIT(_sp,_ph) \
TEST_BIT((_sp)->hbits, (((PRWord*)(_ph)) - ((PRWord*) (_sp)->base)))
-#else
-
-#define SET_HBIT(_sp,_ph) set_hbit(_sp,_ph)
-
-#define CLEAR_HBIT(_sp,_ph) clear_hbit(_sp,_ph)
-
-#define IS_HBIT(_sp,_ph) is_hbit(_sp,_ph)
-
-static void
-set_hbit(GCSeg *sp, PRWord *p)
-{
- unsigned int distance;
- unsigned int index;
- PRWord mask;
-
- PR_ASSERT( SELECTOROF(p) == SELECTOROF(sp->base) );
- PR_ASSERT( OFFSETOF(p) >= OFFSETOF(sp->base) );
-
- distance = (OFFSETOF(p) - OFFSETOF(sp->base)) >> 2;
- index = distance >> PR_BITS_PER_WORD_LOG2;
- mask = 1L << (distance&(PR_BITS_PER_WORD-1));
-
- sp->hbits[index] |= mask;
-}
-
-static void
-clear_hbit(GCSeg *sp, PRWord *p)
-{
- unsigned int distance;
- unsigned int index;
- PRWord mask;
-
- PR_ASSERT( SELECTOROF(p) == SELECTOROF(sp->base) );
- PR_ASSERT( OFFSETOF(p) >= OFFSETOF(sp->base) );
-
- distance = (OFFSETOF(p) - OFFSETOF(sp->base)) >> 2;
- index = distance >> PR_BITS_PER_WORD_LOG2;
- mask = 1L << (distance&(PR_BITS_PER_WORD-1));
-
- sp->hbits[index] &= ~mask;
-}
-
-static int
-is_hbit(GCSeg *sp, PRWord *p)
-{
- unsigned int distance;
- unsigned int index;
- PRWord mask;
-
- PR_ASSERT( SELECTOROF(p) == SELECTOROF(sp->base) );
- PR_ASSERT( OFFSETOF(p) >= OFFSETOF(sp->base) );
-
- distance = (OFFSETOF(p) - OFFSETOF(sp->base)) >> 2;
- index = distance >> PR_BITS_PER_WORD_LOG2;
- mask = 1L << (distance&(PR_BITS_PER_WORD-1));
-
- return ((sp->hbits[index] & mask) != 0);
-}
-
-
-#endif /* WIN16 */
/*
** Given a pointer into this segment, back it up until we are at the
** start of the object the pointer points into. Each heap segment has a
** bitmap that has one bit for each word of the objects it contains. The
** bit's are set for the firstword of an object, and clear for it's other
** words.
*/
static PRWord *FindObject(GCSeg *sp, PRWord *p)
{
PRWord *base;
/* Align p to it's proper boundary before we start fiddling with it */
p = (PRWord*) ((PRWord)p & ~(PR_BYTES_PER_WORD-1L));
base = (PRWord *) sp->base;
-#if defined(WIN16)
- PR_ASSERT( SELECTOROF(p) == SELECTOROF(base));
-#endif
do {
if (IS_HBIT(sp, p)) {
return (p);
}
p--;
} while ( p >= base );
/* Heap is corrupted! */
@@ -399,25 +334,19 @@ static PRWord *FindObject(GCSeg *sp, PRW
return NULL;
}
/************************************************************************/
#if !defined(XP_PC) || defined(XP_OS2)
#define OutputDebugString(msg)
#endif
-#if !defined(WIN16)
#define IN_SEGMENT(_sp, _p) \
((((char *)(_p)) >= (_sp)->base) && \
(((char *)(_p)) < (_sp)->limit))
-#else
-#define IN_SEGMENT(_sp, _p) \
- ((((PRWord)(_p)) >= ((PRWord)(_sp)->base)) && \
- (((PRWord)(_p)) < ((PRWord)(_sp)->limit)))
-#endif
static GCSeg *InHeap(void *p)
{
GCSeg *sp, *esp;
if (lastInHeap && IN_SEGMENT(lastInHeap, p)) {
return lastInHeap;
}
@@ -460,23 +389,16 @@ static GCSeg* DoGrowHeap(PRInt32 request
(long) sizeof(GCSegInfo), segInfo);
OutputDebugString(str);
}
#endif
if (!segInfo) {
return 0;
}
-#if defined(WIN16)
- if (requestedSize > segmentSize) {
- PR_DELETE(segInfo);
- return 0;
- }
-#endif
-
/* Get more memory from the OS */
if (exactly) {
allocSize = requestedSize;
base = (char *) PR_MALLOC(requestedSize);
} else {
allocSize = requestedSize;
allocSize = (allocSize + _pr_pageSize - 1L) >> _pr_pageShift;
allocSize <<= _pr_pageShift;
@@ -488,19 +410,16 @@ static GCSeg* DoGrowHeap(PRInt32 request
}
nhbits = (PRInt32)(
(allocSize + PR_BYTES_PER_WORD - 1L) >> PR_BYTES_PER_WORD_LOG2);
nhbytes = ((nhbits + PR_BITS_PER_WORD - 1L) >> PR_BITS_PER_WORD_LOG2)
* sizeof(PRWord);
/* Get bitmap memory from malloc heap */
-#if defined(WIN16)
- PR_ASSERT( nhbytes < MAX_ALLOC_SIZE );
-#endif
hbits = (PRWord *) PR_CALLOC((PRUint32)nhbytes);
if (!hbits) {
/* Loser! */
PR_DELETE(segInfo);
if (exactly) {
PR_DELETE(base);
} else {
/* XXX do something about this */
@@ -796,26 +715,18 @@ static void PR_CALLBACK ProcessRootBlock
#ifdef DEBUG
void **base0 = base;
#endif
low = _pr_gcData.lowSeg;
high = _pr_gcData.highSeg;
while (--count >= 0) {
p0 = (PRWord*) *base++;
- /*
- ** XXX:
- ** Until Win16 maintains lowSeg and highSeg correctly,
- ** (ie. lowSeg=MIN(all segs) and highSeg = MAX(all segs))
- ** Allways scan through the segment list
- */
-#if !defined(WIN16)
if (p0 < low) continue; /* below gc heap */
if (p0 >= high) continue; /* above gc heap */
-#endif
/* NOTE: inline expansion of InHeap */
/* Find segment */
sp = lastInHeap;
if (!sp || !IN_SEGMENT(sp,p0)) {
GCSeg *esp;
sp = segs;
esp = segs + nsegs;
for (; sp < esp; sp++) {
@@ -892,26 +803,18 @@ static void PR_CALLBACK ProcessRootBlock
static void PR_CALLBACK ProcessRootPointer(void *ptr)
{
PRWord *p0, *p, h, tix, *segBase;
GCSeg* sp;
CollectorType *ct;
p0 = (PRWord*) ptr;
- /*
- ** XXX:
- ** Until Win16 maintains lowSeg and highSeg correctly,
- ** (ie. lowSeg=MIN(all segs) and highSeg = MAX(all segs))
- ** Allways scan through the segment list
- */
-#if !defined(WIN16)
if (p0 < _pr_gcData.lowSeg) return; /* below gc heap */
if (p0 >= _pr_gcData.highSeg) return; /* above gc heap */
-#endif
/* NOTE: inline expansion of InHeap */
/* Find segment */
sp = lastInHeap;
if (!sp || !IN_SEGMENT(sp,p0)) {
GCSeg *esp;
sp = segs;
esp = segs + nsegs;
@@ -1853,26 +1756,18 @@ PR_IMPLEMENT(void) PR_GC(void)
static PRInt32 PR_CALLBACK
pr_ConservativeWalkPointer(void* ptr, PRWalkFun walkRootPointer, void* data)
{
PRWord *p0, *p, *segBase;
GCSeg* sp;
p0 = (PRWord*) ptr;
- /*
- ** XXX:
- ** Until Win16 maintains lowSeg and highSeg correctly,
- ** (ie. lowSeg=MIN(all segs) and highSeg = MAX(all segs))
- ** Allways scan through the segment list
- */
-#if !defined(WIN16)
if (p0 < _pr_gcData.lowSeg) return 0; /* below gc heap */
if (p0 >= _pr_gcData.highSeg) return 0; /* above gc heap */
-#endif
/* NOTE: inline expansion of InHeap */
/* Find segment */
sp = lastInHeap;
if (!sp || !IN_SEGMENT(sp,p0)) {
GCSeg *esp;
sp = segs;
esp = segs + nsegs;
@@ -2632,21 +2527,16 @@ static PRWord *BigAlloc(int cbix, PRInt3
p++;
chunkSize -= PR_BYTES_PER_WORD;
_pr_gcData.freeMemory -= PR_BYTES_PER_WORD;
_pr_gcData.busyMemory += PR_BYTES_PER_WORD;
PR_ASSERT(((PRWord)p & (PR_BYTES_PER_DWORD-1)) != 0);
}
#endif
-#if defined(WIN16)
- /* All memory MUST be aligned on 32bit boundaries */
- PR_ASSERT( (((PRWord)p) & (PR_BYTES_PER_WORD-1)) == 0 );
-#endif
-
/* Consume the *entire* segment with a single allocation */
h = MAKE_HEADER(cbix, (chunkSize >> PR_BYTES_PER_WORD_LOG2));
p[0] = h;
SET_HBIT(sp, p);
_pr_gcData.freeMemory -= chunkSize;
_pr_gcData.busyMemory += chunkSize;
return p;
}
@@ -2797,43 +2687,23 @@ PR_IMPLEMENT(PRWord GCPTR *)PR_AllocMemo
bytes = (PRInt32) requestedBytes;
/*
** Align bytes to a multiple of a PRWord, then add in enough space
** to hold the header word.
**
** MSVC 1.52 crashed on the ff. code because of the "complex" shifting :-(
*/
-#if !defined(WIN16)
/* Check for possible overflow of bytes before performing add */
if ((MAX_INT - PR_BYTES_PER_WORD) < bytes ) return NULL;
bytes = (bytes + PR_BYTES_PER_WORD - 1) >> PR_BYTES_PER_WORD_LOG2;
bytes <<= PR_BYTES_PER_WORD_LOG2;
/* Check for possible overflow of bytes before performing add */
if ((MAX_INT - sizeof(PRWord)) < bytes ) return NULL;
bytes += sizeof(PRWord);
-#else
- /*
- ** For WIN16 the shifts have been broken out into separate statements
- ** to prevent the compiler from crashing...
- */
- {
- PRWord shiftVal;
-
- /* Check for possible overflow of bytes before performing add */
- if ((MAX_INT - PR_BYTES_PER_WORD) < bytes ) return NULL;
- bytes += PR_BYTES_PER_WORD - 1L;
- shiftVal = PR_BYTES_PER_WORD_LOG2;
- bytes >>= shiftVal;
- bytes <<= shiftVal;
- /* Check for possible overflow of bytes before performing add */
- if ((MAX_INT - sizeof(PRWord)) < bytes ) return NULL;
- bytes += sizeof(PRWord);
- }
-#endif
/*
* Add in an extra word of memory for double-aligned memory. Some
* percentage of the time this will waste a word of memory (too
* bad). Howver, it makes the allocation logic much simpler and
* faster.
*/
#ifndef IS_64
if (dub) {
@@ -3065,35 +2935,19 @@ PR_AllocSimpleMemory(PRWord requestedByt
bytes = (PRInt32) requestedBytes;
/*
** Align bytes to a multiple of a PRWord, then add in enough space
** to hold the header word.
**
** MSVC 1.52 crashed on the ff. code because of the "complex" shifting :-(
*/
-#if !defined(WIN16)
bytes = (bytes + PR_BYTES_PER_WORD - 1) >> PR_BYTES_PER_WORD_LOG2;
bytes <<= PR_BYTES_PER_WORD_LOG2;
bytes += sizeof(PRWord);
-#else
- /*
- ** For WIN16 the shifts have been broken out into separate statements
- ** to prevent the compiler from crashing...
- */
- {
- PRWord shiftVal;
-
- bytes += PR_BYTES_PER_WORD - 1L;
- shiftVal = PR_BYTES_PER_WORD_LOG2;
- bytes >>= shiftVal;
- bytes <<= shiftVal;
- bytes += sizeof(PRWord);
- }
-#endif
/*
* Add in an extra word of memory for double-aligned memory. Some
* percentage of the time this will waste a word of memory (too
* bad). Howver, it makes the allocation logic much simpler and
* faster.
*/
#ifndef IS_64
@@ -3107,19 +2961,16 @@ PR_AllocSimpleMemory(PRWord requestedByt
bytes += PR_BYTES_PER_WORD * 2;
}
#endif
#if defined(GC_CHECK) || defined(GC_STATS) || defined(GC_TRACEROOTS)
bytes += sizeof(GCBlockEnd);
#endif
-#if defined(WIN16)
- PR_ASSERT( bytes < MAX_ALLOC_SIZE );
-#endif
/* Java can ask for objects bigger than 4M, but it won't get them */
/*
* This check was added because there is a fundamental limit of
* the size field maintained by the gc code. Going over the 4M
* limit caused some bits to roll over into another bit field,
* violating the max segment size and causing a bug.
*/
if (bytes >= MAX_ALLOC_SIZE) {
@@ -3283,20 +3134,16 @@ PR_IMPLEMENT(void) PR_InitGC(
if (!firstTime) return;
firstTime = 0;
_pr_msgc_lm = PR_NewLogModule("msgc");
_pr_pageShift = PR_GetPageShift();
_pr_pageSize = PR_GetPageSize();
-#if defined(WIN16)
- PR_ASSERT( initialHeapSize < MAX_ALLOC_SIZE );
-#endif
-
/* Setup initial heap size and initial segment size */
if (0 != segSize) segmentSize = segSize;
#ifdef DEBUG
GC = PR_NewLogModule("GC");
{
char *ev = PR_GetEnv("GC_SEGMENT_SIZE");
if (ev && ev[0]) {
PRInt32 newSegmentSize = atoi(ev);
@@ -3338,29 +3185,16 @@ PR_IMPLEMENT(void) PR_InitGC(
/* Allocate the initial segment for the heap */
minBin = 31;
maxBin = 0;
GrowHeap(initialHeapSize);
PR_RegisterRootFinder(ScanWeakFreeList, "scan weak free list", 0);
}
-#if defined(WIN16)
-/*
-** For WIN16 the GC_IN_HEAP() macro must call the private InHeap function.
-** This public wrapper function makes this possible...
-*/
-PR_IMPLEMENT(PRBool)
-PR_GC_In_Heap(void *object)
-{
- return InHeap( object ) != NULL;
-}
-#endif
-
-
/** Added by Vishy for sanity checking a few GC structures **/
/** Can use SanityCheckGC to debug corrupted GC Heap situations **/
#ifdef DEBUG
static int SegmentOverlaps(int i, int j)
{
return
deleted file mode 100644
--- a/nsprpub/lib/msgc/src/win16gc.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-
-/* ***** 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 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
- * 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 ***** */
-#if defined(WIN16)
-#include <windows.h>
-#endif
-#include "prtypes.h"
-#include <stdlib.h>
-
-#define MAX_SEGMENT_SIZE (65536l - 4096l)
-
-/************************************************************************/
-/*
-** Machine dependent GC Heap management routines:
-** _MD_GrowGCHeap
-*/
-/************************************************************************/
-
-void _MD_InitGC(void) {}
-
-extern void *
-_MD_GrowGCHeap(PRUint32 *sizep)
-{
- void *addr;
-
- if( *sizep > MAX_SEGMENT_SIZE ) {
- *sizep = MAX_SEGMENT_SIZE;
- }
-
- addr = malloc((size_t)*sizep);
- return addr;
-}
-
-HINSTANCE _pr_hInstance;
-
-int CALLBACK LibMain( HINSTANCE hInst, WORD wDataSeg,
- WORD cbHeapSize, LPSTR lpszCmdLine )
-{
- _pr_hInstance = hInst;
- return TRUE;
-}
-
-
--- a/nsprpub/lib/msgc/tests/Makefile.in
+++ b/nsprpub/lib/msgc/tests/Makefile.in
@@ -41,21 +41,16 @@ MOD_DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(MOD_DEPTH)/config/autoconf.mk
include $(topsrcdir)/config/config.mk
-ifeq ($(OS_TARGET), WIN16)
-OS_CFLAGS = $(OS_EXE_CFLAGS)
-W16STDIO = $(MOD_DEPTH)/pr/src/md/windows/$(OBJDIR)/w16stdio.$(OBJ_SUFFIX)
-endif
-
ifeq ($(OS_TARGET), OS2)
OS_CFLAGS = $(OS_EXE_CFLAGS)
endif
CSRCS = gc1.c thrashgc.c
ifeq (,$(filter-out WINNT OS2,$(OS_ARCH)))
PROG_SUFFIX = .exe
@@ -74,27 +69,21 @@ INCLUDES = -I$(dist_includedir)
LDOPTS = -L$(dist_libdir)
NSPR_VERSION = $(MOD_MAJOR_VERSION)
GC_VERSION = $(MOD_MAJOR_VERSION)
LIBPR = -lnspr$(NSPR_VERSION)
LIBPLC = -lplc$(NSPR_VERSION)
LIBGC = -lmsgc$(GC_VERSION)
ifeq ($(OS_ARCH), WINNT)
-ifeq ($(OS_TARGET), WIN16)
- LIBPR = $(dist_libdir)/nspr$(NSPR_VERSION).lib
- LIBPLC = $(dist_libdir)/plc$(NSPR_VERSION).lib
- LIBGC= $(dist_libdir)/msgc$(GC_VERSION).lib
-else
LDOPTS = -NOLOGO -DEBUG -INCREMENTAL:NO
LIBPR = $(dist_libdir)/libnspr$(NSPR_VERSION).$(LIB_SUFFIX)
LIBPLC = $(dist_libdir)/libplc$(NSPR_VERSION).$(LIB_SUFFIX)
LIBGC= $(dist_libdir)/libmsgc$(GC_VERSION).$(LIB_SUFFIX)
endif
-endif
ifeq ($(OS_ARCH),OS2)
LDOPTS += -Zomf -Zlinker /PM:VIO
endif
ifneq ($(OS_ARCH), WINNT)
PWD = $(shell pwd)
endif
@@ -261,33 +250,16 @@ ifeq ($(AIX_PRE_4_2),1)
else
# All platforms that are not AIX pre-4.2.
$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
@$(MAKE_OBJDIR)
ifeq ($(OS_ARCH), WINNT)
-ifeq ($(OS_TARGET),WIN16)
- echo system windows >w16link
- echo name $@ >>w16link
- echo option map >>w16link
-# echo option CASEEXACT >>w16link
- echo option stack=16K >>w16link
- echo debug $(DEBUGTYPE) all >>w16link
- echo file >>w16link
- echo $< , >>w16link
- echo $(W16STDIO) >>w16link
- echo library >>w16link
- echo $(LIBPR), >>w16link
- echo $(LIBPLC), >>w16link
- echo $(LIBGC), >>w16link
- echo winsock.lib >>w16link
- wlink @w16link.
-else
link $(LDOPTS) $< $(LIBGC) $(LIBPLC) $(LIBPR) wsock32.lib -out:$@
else
ifeq ($(OS_ARCH),OS2)
$(LINK) $(LDOPTS) $< $(LIBGC) $(LIBPLC) $(LIBPR) $(OS_LIBS) $(EXTRA_LIBS) -o $@
else
$(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBGC) $(LIBPLC) $(LIBPR) $(EXTRA_LIBS) -o $@
endif
endif
--- a/nsprpub/lib/prstreams/tests/testprstrm/Makefile.in
+++ b/nsprpub/lib/prstreams/tests/testprstrm/Makefile.in
@@ -41,20 +41,16 @@ MOD_DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(MOD_DEPTH)/config/autoconf.mk
include $(topsrcdir)/config/config.mk
-ifeq ($(OS_TARGET), WIN16)
-OS_CFLAGS = $(OS_EXE_CFLAGS)
-endif
-
CXXSRCS = \
testprstrm.cpp \
$(NULL)
OBJS = $(addprefix $(OBJDIR)/,$(CXXSRCS:.cpp=.$(OBJ_SUFFIX)))
ifeq (,$(filter-out WINNT OS2,$(OS_ARCH)))
PROG_SUFFIX = .exe
@@ -70,30 +66,25 @@ INCLUDES = -I$(dist_includedir)
# Setting the variables LDOPTS and LIBPR. We first initialize
# them to the default values, then adjust them for some platforms.
LDOPTS = -L$(dist_libdir)
LIBPR = -lnspr$(MOD_MAJOR_VERSION)
LIBPRSTRMS = -lprstrms$(MOD_MAJOR_VERSION)
ifeq ($(OS_ARCH), WINNT)
-ifeq ($(OS_TARGET), WIN16)
- LIBPR = $(dist_libdir)/nspr$(MOD_MAJOR_VERSION).lib
- LIBPRSTRMS = $(dist_libdir)/prstrms$(MOD_MAJOR_VERSION).lib
-else
LDOPTS = -NOLOGO -DEBUG -INCREMENTAL:NO
ifeq ($(OS_TARGET), WIN95)
LIBPR = $(dist_libdir)/nspr$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
LIBPRSTRMS = $(dist_libdir)/prstrms$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
else
LIBPR = $(dist_libdir)/libnspr$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
LIBPRSTRMS = $(dist_libdir)/libprstrms$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
endif
endif
-endif
ifeq ($(OS_ARCH),OS2)
LDOPTS += -Zomf -Zlinker /PM:VIO -lstdcpp
endif
ifneq ($(OS_ARCH), WINNT)
PWD = $(shell pwd)
endif
@@ -206,33 +197,17 @@ ifeq ($(AIX_PRE_4_2),1)
else
# All platforms that are not AIX pre-4.2.
$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
@$(MAKE_OBJDIR)
ifeq ($(OS_ARCH), WINNT)
-ifeq ($(OS_TARGET),WIN16)
- echo system windows >w16link
- echo option map >>w16link
- echo option stack=10K >>w16link
- echo option heapsize=32K >>w16link
- echo debug $(DEBUGTYPE) all >>w16link
- echo name $@ >>w16link
- echo file >>w16link
- echo $< >>w16link
- echo library >>w16link
- echo $(LIBPR), >>w16link
- echo $(LIBPRSTRMS), >>w16link
- echo winsock.lib >>w16link
- wlink @w16link.
-else
link $(LDOPTS) $< $(LIBPR) $(LIBPRSTRMS) wsock32.lib -out:$@
-endif
else
ifeq ($(OS_ARCH),OS2)
$(LINK) $(EXEFLAGS) $(LDOPTS) $< $(LIBPR) $(LIBPRSTRMS) $(OS_LIBS) $(EXTRA_LIBS)
else
$(CCC) $(XCFLAGS) $< $(LDOPTS) $(LIBPR) $(LIBPRSTRMS) $(EXTRA_LIBS) -o $@
endif
endif
endif
--- a/nsprpub/lib/tests/Makefile.in
+++ b/nsprpub/lib/tests/Makefile.in
@@ -41,20 +41,16 @@ MOD_DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(MOD_DEPTH)/config/autoconf.mk
include $(topsrcdir)/config/config.mk
-ifeq ($(OS_TARGET), WIN16)
-OS_CFLAGS = $(OS_EXE_CFLAGS)
-endif
-
CSRCS = \
arena.c \
base64t.c \
getopt.c \
string.c
ifeq (,$(filter-out WINNT OS2,$(OS_ARCH)))
CSRCS += arena.c
@@ -75,33 +71,27 @@ INCLUDES = -I$(dist_includedir)
# Setting the variables LDOPTS and LIBPR. We first initialize
# them to the default values, then adjust them for some platforms.
LDOPTS = -L$(dist_libdir)
LIBPR = -lnspr$(MOD_MAJOR_VERSION)
LIBPLC = -lplc$(MOD_MAJOR_VERSION)
LIBPLDS = -lplds$(MOD_MAJOR_VERSION)
ifeq ($(OS_ARCH), WINNT)
-ifeq ($(OS_TARGET), WIN16)
- LIBPR = $(dist_libdir)/nspr$(MOD_MAJOR_VERSION).lib
- LIBPLC= $(dist_libdir)/plc$(MOD_MAJOR_VERSION).lib
- LIBPLDS= $(dist_libdir)/plds$(MOD_MAJOR_VERSION).lib
-else
LDOPTS = -NOLOGO -DEBUG -INCREMENTAL:NO
ifeq ($(OS_TARGET), WIN95)
LIBPR = $(dist_libdir)/nspr$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
LIBPLC= $(dist_libdir)/plc$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
LIBPLDS= $(dist_libdir)/plds$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
else
LIBPR = $(dist_libdir)/libnspr$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
LIBPLC= $(dist_libdir)/libplc$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
LIBPLDS= $(dist_libdir)/libplds$(MOD_MAJOR_VERSION).$(LIB_SUFFIX)
endif
endif
-endif
ifeq ($(OS_ARCH),OS2)
LDOPTS += -Zomf -Zlinker /PM:VIO
endif
ifneq ($(OS_ARCH), WINNT)
PWD = $(shell pwd)
endif
@@ -209,40 +199,21 @@ ifeq ($(AIX_PRE_4_2),1)
else
# All platforms that are not AIX pre-4.2.
$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
@$(MAKE_OBJDIR)
ifeq ($(OS_ARCH), WINNT)
-ifeq ($(OS_TARGET),WIN16)
- echo system windows >w16link
- echo option map >>w16link
- echo option stack=10K >>w16link
- echo option heapsize=32K >>w16link
- echo debug $(DEBUGTYPE) all >>w16link
- echo name $@ >>w16link
- echo file >>w16link
- echo $< >>w16link
- echo library >>w16link
- echo $(LIBPR), >>w16link
- echo $(LIBPLC), >>w16link
- echo winsock.lib >>w16link
- wlink @w16link.
-else
link $(LDOPTS) $< $(LIBPLC) $(LIBPLDS) $(LIBPR) wsock32.lib -out:$@
-endif
else
ifeq ($(OS_ARCH),OS2)
$(LINK) $(EXEFLAGS) $(LDOPTS) $< $(LIBPLC) $(LIBPLDS) $(LIBPR) $(OS_LIBS) $(EXTRA_LIBS)
else
$(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBPLDS) $(LIBPR) $(EXTRA_LIBS) -o $@
endif
endif
endif
export:: $(TARGETS)
clean::
rm -f $(TARGETS)
-
-
-
--- a/nsprpub/pr/include/md/_pcos.h
+++ b/nsprpub/pr/include/md/_pcos.h
@@ -41,22 +41,16 @@
#define PR_DLL_SUFFIX ".dll"
#include <stdlib.h>
#define DIRECTORY_SEPARATOR '\\'
#define DIRECTORY_SEPARATOR_STR "\\"
#define PATH_SEPARATOR ';'
-#ifdef WIN16
-#define GCPTR __far
-#else
-#define GCPTR
-#endif
-
/*
** Routines for processing command line arguments
*/
PR_BEGIN_EXTERN_C
#ifndef XP_OS2
extern char *optarg;
extern int optind;
extern int getopt(int argc, char **argv, char *spec);
--- a/nsprpub/pr/include/md/_unixos.h
+++ b/nsprpub/pr/include/md/_unixos.h
@@ -87,17 +87,16 @@
#endif
#define _PR_HAVE_O_APPEND
#define PR_DIRECTORY_SEPARATOR '/'
#define PR_DIRECTORY_SEPARATOR_STR "/"
#define PR_PATH_SEPARATOR ':'
#define PR_PATH_SEPARATOR_STR ":"
-#define GCPTR
typedef int (*FARPROC)();
/*
* intervals at which GLOBAL threads wakeup to check for pending interrupt
*/
#define _PR_INTERRUPT_CHECK_INTERVAL_SECS 5
extern PRIntervalTime intr_timeout_ticks;
deleted file mode 100644
--- a/nsprpub/pr/include/md/_win16.cfg
+++ /dev/null
@@ -1,177 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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 ***** */
-
-/*
-** _win16.cfg -- prcpucfg.h for win16
-**
-**
-** lth. 14-Apr-1997. New. Made from _win95.cfg
-*/
-
-#ifndef nspr_cpucfg___
-#define nspr_cpucfg___
-
-#ifndef XP_PC
-#define XP_PC
-#endif
-
-#ifndef WIN16
-#define WIN16
-#undef WIN32
-#endif
-
-#if defined(_M_IX86) || defined(_X86_)
-
-#define IS_LITTLE_ENDIAN 1
-#undef IS_BIG_ENDIAN
-
-#define PR_BYTES_PER_BYTE 1
-#define PR_BYTES_PER_SHORT 2
-#define PR_BYTES_PER_INT 2
-#define PR_BYTES_PER_INT64 8
-#define PR_BYTES_PER_LONG 4
-#define PR_BYTES_PER_FLOAT 4
-#define PR_BYTES_PER_WORD 4
-#define PR_BYTES_PER_DWORD 8
-#define PR_BYTES_PER_DOUBLE 8
-
-#define PR_BITS_PER_BYTE 8
-#define PR_BITS_PER_SHORT 16
-#define PR_BITS_PER_INT 16
-#define PR_BITS_PER_INT64 64
-#define PR_BITS_PER_LONG 32
-#define PR_BITS_PER_FLOAT 32
-#define PR_BITS_PER_WORD 32
-#define PR_BITS_PER_DWORD 64
-#define PR_BITS_PER_DOUBLE 64
-
-#define PR_BITS_PER_BYTE_LOG2 3
-#define PR_BITS_PER_SHORT_LOG2 4
-#define PR_BITS_PER_INT_LOG2 4
-#define PR_BITS_PER_INT64_LOG2 6
-#define PR_BITS_PER_LONG_LOG2 5
-#define PR_BITS_PER_FLOAT_LOG2 5
-#define PR_BITS_PER_WORD_LOG2 4
-#define PR_BITS_PER_DWORD_LOG2 6
-#define PR_BITS_PER_DOUBLE_LOG2 6
-
-#define PR_ALIGN_OF_SHORT 2
-#define PR_ALIGN_OF_INT 2
-#define PR_ALIGN_OF_LONG 4
-#define PR_ALIGN_OF_INT64 8
-#define PR_ALIGN_OF_FLOAT 4
-#define PR_ALIGN_OF_WORD 2
-#define PR_ALIGN_OF_DWORD 8
-#define PR_ALIGN_OF_DOUBLE 4
-#define PR_ALIGN_OF_POINTER 4
-
-#define PR_BYTES_PER_WORD_LOG2 2
-#define PR_BYTES_PER_DWORD_LOG2 2
-
-#else /* defined(_M_IX86) || defined(_X86_) */
-
-#error unknown processor architecture
-
-#endif /* defined(_M_IX86) || defined(_X86_) */
-
-#ifndef NO_NSPR_10_SUPPORT
-
-#define BYTES_PER_BYTE PR_BYTES_PER_BYTE
-#define BYTES_PER_SHORT PR_BYTES_PER_SHORT
-#define BYTES_PER_INT PR_BYTES_PER_INT
-#define BYTES_PER_INT64 PR_BYTES_PER_INT64
-#define BYTES_PER_LONG PR_BYTES_PER_LONG
-#define BYTES_PER_FLOAT PR_BYTES_PER_FLOAT
-#define BYTES_PER_DOUBLE PR_BYTES_PER_DOUBLE
-#define BYTES_PER_WORD PR_BYTES_PER_WORD
-#define BYTES_PER_DWORD PR_BYTES_PER_DWORD
-
-#define BITS_PER_BYTE PR_BITS_PER_BYTE
-#define BITS_PER_SHORT PR_BITS_PER_SHORT
-#define BITS_PER_INT PR_BITS_PER_INT
-#define BITS_PER_INT64 PR_BITS_PER_INT64
-#define BITS_PER_LONG PR_BITS_PER_LONG
-#define BITS_PER_FLOAT PR_BITS_PER_FLOAT
-#define BITS_PER_DOUBLE PR_BITS_PER_DOUBLE
-#define BITS_PER_WORD PR_BITS_PER_WORD
-
-#define BITS_PER_BYTE_LOG2 PR_BITS_PER_BYTE_LOG2
-#define BITS_PER_SHORT_LOG2 PR_BITS_PER_SHORT_LOG2
-#define BITS_PER_INT_LOG2 PR_BITS_PER_INT_LOG2
-#define BITS_PER_INT64_LOG2 PR_BITS_PER_INT64_LOG2
-#define BITS_PER_LONG_LOG2 PR_BITS_PER_LONG_LOG2
-#define BITS_PER_FLOAT_LOG2 PR_BITS_PER_FLOAT_LOG2
-#define BITS_PER_DOUBLE_LOG2 PR_BITS_PER_DOUBLE_LOG2
-#define BITS_PER_WORD_LOG2 PR_BITS_PER_WORD_LOG2
-
-#define ALIGN_OF_SHORT PR_ALIGN_OF_SHORT
-#define ALIGN_OF_INT PR_ALIGN_OF_INT
-#define ALIGN_OF_LONG PR_ALIGN_OF_LONG
-#define ALIGN_OF_INT64 PR_ALIGN_OF_INT64
-#define ALIGN_OF_FLOAT PR_ALIGN_OF_FLOAT
-#define ALIGN_OF_DOUBLE PR_ALIGN_OF_DOUBLE
-#define ALIGN_OF_POINTER PR_ALIGN_OF_POINTER
-#define ALIGN_OF_WORD PR_ALIGN_OF_WORD
-
-#define BYTES_PER_WORD_LOG2 PR_BYTES_PER_WORD_LOG2
-#define BYTES_PER_DWORD_LOG2 PR_BYTES_PER_DWORD_LOG2
-#define WORDS_PER_DWORD_LOG2 PR_WORDS_PER_DWORD_LOG2
-
-#endif /* NO_NSPR_10_SUPPORT */
-
-#undef HAVE_LONG_LONG
-
-/*
-** HAVE_WATCOM_BUG_1
-** When HAVE_WATCOM_BUG_1 is defined, special case code is
-** used to circumvent the bug.
-** Functions declared __cdecl in DLLs returning floating point types
-** generate bad return code and will not return the intended result.
-*/
-#define HAVE_WATCOM_BUG_1
-
-/*
-** HAVE_WATCOM_BUG_2
-** When HAVE_WATCOM_BUG_2 is defined, special case code is
-** used to circumvent the bug.
-** Functions declared __cdecl in DLLs returning a structure by value
-** generate bad return values.
-** Yes, similar to Watcom Bug 1.
-*/
-#define HAVE_WATCOM_BUG_2
-
-#endif /* nspr_cpucfg___ */
deleted file mode 100644
--- a/nsprpub/pr/include/md/_win16.h
+++ /dev/null
@@ -1,568 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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_win16_defs_h___
-#define nspr_win16_defs_h___
-
-#include <windows.h>
-#include <winsock.h>
-#include <errno.h>
-#include <direct.h>
-
-#include "nspr.h"
-/* $$ fix this */
-#define Remind(x)
-
-/*
- * Internal configuration macros
- */
-
-#define PR_LINKER_ARCH "win16"
-#define _PR_SI_SYSNAME "WIN16"
-#define _PR_SI_ARCHITECTURE "x86" /* XXXMB hardcode for now */
-
-#define HAVE_DLL
-#define _PR_NO_PREEMPT
-#define _PR_LOCAL_THREADS_ONLY
-#undef _PR_GLOBAL_THREADS_ONLY
-#undef HAVE_THREAD_AFFINITY
-#define _PR_HAVE_ATOMIC_OPS
-
-/* --- Common User-Thread/Native-Thread Definitions --------------------- */
-
-extern struct PRLock *_pr_schedLock;
-extern char * _pr_top_of_task_stack;
-
-
-/* --- Typedefs --- */
-
-#define PR_NUM_GCREGS 9
-typedef PRInt32 PR_CONTEXT_TYPE[PR_NUM_GCREGS];
-
-#define _MD_MAGIC_THREAD 0x22222222
-#define _MD_MAGIC_THREADSTACK 0x33333333
-#define _MD_MAGIC_SEGMENT 0x44444444
-#define _MD_MAGIC_DIR 0x55555555
-#define _MD_MAGIC_CV 0x66666666
-
-
-typedef struct _PRWin16PollDesc
-{
- PRInt32 osfd;
- PRInt16 in_flags;
- PRInt16 out_flags;
-} _PRWin16PollDesc;
-
-typedef struct PRPollQueue
-{
- PRCList links; /* for linking PRPollQueue's together */
- _PRWin16PollDesc *pds; /* array of poll descriptors */
- PRUintn npds; /* length of the array */
- PRPackedBool on_ioq; /* is this on the async i/o work q? */
- PRIntervalTime timeout; /* timeout, in ticks */
- struct PRThread *thr;
-} PRPollQueue;
-
-#define _PR_POLLQUEUE_PTR(_qp) \
- ((PRPollQueue *) ((char*) (_qp) - offsetof(PRPollQueue,links)))
-
-NSPR_API(PRInt32) _PR_WaitForFD(PRInt32 osfd, PRUintn how,
- PRIntervalTime timeout);
-NSPR_API(void) _PR_Unblock_IO_Wait(struct PRThread *thr);
-
-#define _PR_MD_MAX_OSFD FD_SETSIZE
-#define _PR_IOQ(_cpu) ((_cpu)->md.ioQ)
-#define _PR_ADD_TO_IOQ(_pq, _cpu) PR_APPEND_LINK(&_pq.links, &_PR_IOQ(_cpu))
-#define _PR_FD_READ_SET(_cpu) ((_cpu)->md.fd_read_set)
-#define _PR_FD_READ_CNT(_cpu) ((_cpu)->md.fd_read_cnt)
-#define _PR_FD_WRITE_SET(_cpu) ((_cpu)->md.fd_write_set)
-#define _PR_FD_WRITE_CNT(_cpu) ((_cpu)->md.fd_write_cnt)
-#define _PR_FD_EXCEPTION_SET(_cpu) ((_cpu)->md.fd_exception_set)
-#define _PR_FD_EXCEPTION_CNT(_cpu) ((_cpu)->md.fd_exception_cnt)
-#define _PR_IOQ_TIMEOUT(_cpu) ((_cpu)->md.ioq_timeout)
-#define _PR_IOQ_MAX_OSFD(_cpu) ((_cpu)->md.ioq_max_osfd)
-
-struct _MDCPU {
- PRCList ioQ;
- fd_set fd_read_set, fd_write_set, fd_exception_set;
- PRInt16 fd_read_cnt[_PR_MD_MAX_OSFD],fd_write_cnt[_PR_MD_MAX_OSFD],
- fd_exception_cnt[_PR_MD_MAX_OSFD];
- PRUint32 ioq_timeout;
- PRInt32 ioq_max_osfd;
-};
-
-struct _MDThread {
- /* The overlapped structure must be first! */
- HANDLE blocked_sema; /* Threads block on this when waiting
- * for IO or CondVar.
- */
- PRInt32 errcode; /* preserved errno for this thread */
- CATCHBUF context; /* thread context for Throw() */
- void *SP; /* Stack pointer, used only by GarbColl */
- int threadNumber; /* instrumentation: order of creation */
- _PRWin16PollDesc thr_pd; /* poll descriptor for i/o */
- PRPollQueue thr_pq; /* i/o parameters */
- void *exceptionContext; /* mfc exception context */
- char guardBand[24]; /* don't overwrite this */
- PRUint32 magic; /* self identifier, for debug */
-};
-
-struct _MDThreadStack {
- PRUint32 magic; /* for debugging */
- PRIntn cxByteCount; /* number of stack bytes to move */
- char * stackTop; /* high address on stack */
-};
-
-struct _MDSegment {
- PRUint32 magic; /* for debugging */
-};
-
-
-struct _MDLock {
- PRUint32 magic; /* for debugging */
- PRUint32 mutex;
-};
-
-struct _MDDir {
- PRUint32 magic; /* for debugging */
- struct dirent *dir;
-};
-
-struct _MDCVar {
- PRUint32 magic;
-};
-
-struct _MDSemaphore {
- PRInt32 unused;
-};
-
-struct _MDFileDesc {
- PRInt32 osfd;
-};
-
-struct _MDProcess {
- HANDLE handle;
- DWORD id;
-};
-
-/*
-** Microsoft 'struct _stat'
-** ... taken directly from msvc 1.52c's header file sys/stat.h
-** see PR_Stat() implemented in w16io.c
-** See BugSplat: 98516
-*/
-#pragma pack(push)
-#pragma pack(2)
-
-typedef unsigned short _ino_t;
-typedef short _dev_t;
-typedef long _off_t;
-
-typedef struct _MDMSStat {
- _dev_t st_dev;
- _ino_t st_ino;
- unsigned short st_mode;
- short st_nlink;
- short st_uid;
- short st_gid;
- _dev_t st_rdev;
- _off_t st_size;
- time_t st_atime;
- time_t st_mtime;
- time_t st_ctime;
-} _MDMSStat;
-#pragma pack(pop)
-
-/* --- Errors --- */
- /* These are NSPR generated error codes which need to be unique from
- * OS error codes.
- */
-#define _MD_UNIQUEBASE 50000
-#define _MD_EINTERRUPTED _MD_UNIQUEBASE + 1
-#define _MD_ETIMEDOUT _MD_UNIQUEBASE + 2
-#define _MD_EIO _MD_UNIQUEBASE + 3
-
-struct PRProcess;
-struct PRProcessAttr;
-
-/* --- Create a new process --- */
-#define _MD_CREATE_PROCESS _PR_CreateWindowsProcess
-extern struct PRProcess * _PR_CreateWindowsProcess(
- const char *path,
- char *const *argv,
- char *const *envp,
- const struct PRProcessAttr *attr
-);
-
-#define _MD_DETACH_PROCESS _PR_DetachWindowsProcess
-extern PRStatus _PR_DetachWindowsProcess(struct PRProcess *process);
-
-/* --- Wait for a child process to terminate --- */
-#define _MD_WAIT_PROCESS _PR_WaitWindowsProcess
-extern PRStatus _PR_WaitWindowsProcess(struct PRProcess *process,
- PRInt32 *exitCode);
-
-#define _MD_KILL_PROCESS _PR_KillWindowsProcess
-extern PRStatus _PR_KillWindowsProcess(struct PRProcess *process);
-
-
-/* --- Misc stuff --- */
-
-#define MD_ASSERTINT( x ) PR_ASSERT( (x) < 65535 )
-
-/* --- IO stuff --- */
-#define MAX_PATH 256
-#define _MD_ERRNO() errno
-#define GetLastError() errno
-
-#define _MD_GET_FILE_ERROR() errno
-#define _MD_SET_FILE_ERROR(_err) errno = (_err)
-
-#define _MD_OPEN _PR_MD_OPEN
-#define _MD_READ _PR_MD_READ
-#define _MD_WRITE _PR_MD_WRITE
-#define _MD_WRITEV _PR_MD_WRITEV
-#define _MD_LSEEK _PR_MD_LSEEK
-#define _MD_LSEEK64 _PR_MD_LSEEK64
-#define _MD_CLOSE_FILE _PR_MD_CLOSE_FILE
-#define _MD_GETFILEINFO _PR_MD_GETFILEINFO
-#define _MD_GETOPENFILEINFO _PR_MD_GETOPENFILEINFO
-#define _MD_STAT _PR_MD_STAT
-#define _MD_RENAME _PR_MD_RENAME
-#define _MD_ACCESS _PR_MD_ACCESS
-#define _MD_DELETE _PR_MD_DELETE
-#define _MD_MKDIR _PR_MD_MKDIR
-#define _MD_RMDIR _PR_MD_RMDIR
-#define _MD_LOCKFILE _PR_MD_LOCKFILE
-#define _MD_TLOCKFILE _PR_MD_TLOCKFILE
-#define _MD_UNLOCKFILE _PR_MD_UNLOCKFILE
-
-
-/* --- Socket IO stuff --- */
-#define _MD_EACCES WSAEACCES
-#define _MD_EADDRINUSE WSAEADDRINUSE
-#define _MD_EADDRNOTAVAIL WSAEADDRNOTAVAIL
-#define _MD_EAFNOSUPPORT WSAEAFNOSUPPORT
-#define _MD_EAGAIN WSAEWOULDBLOCK
-#define _MD_EALREADY WSAEALREADY
-#define _MD_EBADF WSAEBADF
-#define _MD_ECONNREFUSED WSAECONNREFUSED
-#define _MD_ECONNRESET WSAECONNRESET
-#define _MD_EFAULT WSAEFAULT
-#define _MD_EINPROGRESS WSAEINPROGRESS
-#define _MD_EINTR WSAEINTR
-#define _MD_EINVAL EINVAL
-#define _MD_EISCONN WSAEISCONN
-#define _MD_ENETUNREACH WSAENETUNREACH
-#define _MD_ENOENT ENOENT
-#define _MD_ENOTCONN WSAENOTCONN
-#define _MD_ENOTSOCK WSAENOTSOCK
-#define _MD_EOPNOTSUPP WSAEOPNOTSUPP
-#define _MD_EWOULDBLOCK WSAEWOULDBLOCK
-#define _MD_GET_SOCKET_ERROR() WSAGetLastError()
-#define _MD_SET_SOCKET_ERROR(_err) WSASetLastError(_err)
-
-#define _MD_INIT_FILEDESC(fd)
-#define _MD_MAKE_NONBLOCK _PR_MD_MAKE_NONBLOCK
-#define _MD_SHUTDOWN _PR_MD_SHUTDOWN
-#define _MD_LISTEN _PR_MD_LISTEN
-#define _MD_CLOSE_SOCKET _PR_MD_CLOSE_SOCKET
-#define _MD_SENDTO _PR_MD_SENDTO
-#define _MD_RECVFROM _PR_MD_RECVFROM
-#define _MD_SOCKETPAIR(s, type, proto, sv) -1
-#define _MD_GETSOCKNAME _PR_MD_GETSOCKNAME
-#define _MD_GETPEERNAME _PR_MD_GETPEERNAME
-#define _MD_GETSOCKOPT _PR_MD_GETSOCKOPT
-#define _MD_SETSOCKOPT _PR_MD_SETSOCKOPT
-#define _MD_SELECT select
-#define _MD_FSYNC _PR_MD_FSYNC
-#define _MD_SOCKETAVAILABLE _PR_MD_SOCKETAVAILABLE
-
-#define _MD_INIT_ATOMIC()
-#define _MD_ATOMIC_INCREMENT(x) (*x++)
-#define _MD_ATOMIC_ADD(ptr, val) ((*x) += val)
-#define _MD_ATOMIC_DECREMENT(x) (*x--)
-#define _MD_ATOMIC_SET(x,y) (*x, y)
-
-#define _MD_INIT_IO _PR_MD_INIT_IO
-
-/* win95 doesn't have async IO */
-#define _MD_SOCKET _PR_MD_SOCKET
-#define _MD_CONNECT _PR_MD_CONNECT
-#define _MD_ACCEPT _PR_MD_ACCEPT
-#define _MD_BIND _PR_MD_BIND
-#define _MD_RECV _PR_MD_RECV
-#define _MD_SEND _PR_MD_SEND
-
-#define _MD_CHECK_FOR_EXIT()
-
-/* --- Scheduler stuff --- */
-#define _MD_PAUSE_CPU _PR_MD_PAUSE_CPU
-
-/* --- DIR stuff --- */
-#define PR_DIRECTORY_SEPARATOR '\\'
-#define PR_DIRECTORY_SEPARATOR_STR "\\"
-#define PR_PATH_SEPARATOR ';'
-#define PR_PATH_SEPARATOR_STR ";"
-#define _MD_OPEN_DIR _PR_MD_OPEN_DIR
-#define _MD_CLOSE_DIR _PR_MD_CLOSE_DIR
-#define _MD_READ_DIR _PR_MD_READ_DIR
-
-/* --- Segment stuff --- */
-#define _MD_INIT_SEGS()
-#define _MD_ALLOC_SEGMENT _MD_AllocSegment
-#define _MD_FREE_SEGMENT _MD_FreeSegment
-
-/* --- Environment Stuff --- */
-#define _MD_GET_ENV _PR_MD_GET_ENV
-#define _MD_PUT_ENV _PR_MD_PUT_ENV
-
-/* --- Threading Stuff --- */
-#define _MD_DEFAULT_STACK_SIZE 32767L
-#define _MD_INIT_THREAD _PR_MD_INIT_THREAD
-#define _MD_CREATE_THREAD(t,f,p,sc,st,stsiz) (PR_SUCCESS)
-#define _MD_YIELD _PR_MD_YIELD
-#define _MD_SET_PRIORITY(t,p)
-#define _MD_CLEAN_THREAD(t)
-#define _MD_SETTHREADAFFINITYMASK _PR_MD_SETTHREADAFFINITYMASK
-#define _MD_GETTHREADAFFINITYMASK _PR_MD_GETTHREADAFFINITYMASK
-#define _MD_EXIT_THREAD
-#define _MD_SUSPEND_THREAD _PR_MD_SUSPEND_THREAD
-#define _MD_RESUME_THREAD _PR_MD_RESUME_THREAD
-#define _MD_SUSPEND_CPU _PR_MD_SUSPEND_CPU
-#define _MD_RESUME_CPU _PR_MD_RESUME_CPU
-#define _MD_BEGIN_SUSPEND_ALL()
-#define _MD_BEGIN_RESUME_ALL()
-#define _MD_END_SUSPEND_ALL()
-#define _MD_END_RESUME_ALL()
-
-/* --- Lock stuff --- */
-/*
-** Win16 does not need MD locks.
-*/
-#define _PR_LOCK _MD_LOCK
-#define _PR_UNLOCK _MD_UNLOCK
-
-#define _MD_NEW_LOCK(l) (PR_SUCCESS)
-#define _MD_FREE_LOCK(l)
-#define _MD_LOCK(l)
-#define _MD_TEST_AND_LOCK(l) (-1)
-#define _MD_UNLOCK(l)
-
-/* --- lock and cv waiting --- */
-#define _MD_WAIT _PR_MD_WAIT
-#define _MD_WAKEUP_WAITER(a)
-#define _MD_WAKEUP_CPUS _PR_MD_WAKEUP_CPUS
-
-/* --- CVar ------------------- */
-#define _MD_WAIT_CV _PR_MD_WAIT_CV
-#define _MD_NEW_CV _PR_MD_NEW_CV
-#define _MD_FREE_CV _PR_MD_FREE_CV
-#define _MD_NOTIFY_CV _PR_MD_NOTIFY_CV
-#define _MD_NOTIFYALL_CV _PR_MD_NOTIFYALL_CV
-
- /* XXXMB- the IOQ stuff is certainly not working correctly yet. */
-#define _MD_IOQ_LOCK()
-#define _MD_IOQ_UNLOCK()
-
-
-/* --- Initialization stuff --- */
-NSPR_API(void) _MD_INIT_RUNNING_CPU(struct _PRCPU *cpu );
-#define _MD_START_INTERRUPTS()
-#define _MD_STOP_INTERRUPTS()
-#define _MD_DISABLE_CLOCK_INTERRUPTS()
-#define _MD_ENABLE_CLOCK_INTERRUPTS()
-#define _MD_BLOCK_CLOCK_INTERRUPTS()
-#define _MD_UNBLOCK_CLOCK_INTERRUPTS()
-#define _MD_EARLY_INIT _PR_MD_EARLY_INIT
-#define _MD_FINAL_INIT _PR_MD_FINAL_INIT
-#define _MD_INIT_CPUS()
-
-/* --- User Threading stuff --- */
-#define _MD_EXIT
-
-#define _MD_CLEANUP_BEFORE_EXIT _PR_MD_CLEANUP_BEFORE_EXIT
-
-/* --- Intervals --- */
-#define _MD_INTERVAL_INIT _PR_MD_INTERVAL_INIT
-#define _MD_GET_INTERVAL _PR_MD_GET_INTERVAL
-#define _MD_INTERVAL_PER_SEC _PR_MD_INTERVAL_PER_SEC
-#define _MD_INTERVAL_PER_MILLISEC() (_PR_MD_INTERVAL_PER_SEC() / 1000)
-#define _MD_INTERVAL_PER_MICROSEC() (_PR_MD_INTERVAL_PER_SEC() / 1000000)
-
-/* --- Scheduler stuff --- */
-#define LOCK_SCHEDULER() 0
-#define UNLOCK_SCHEDULER() 0
-#define _PR_LockSched() 0
-#define _PR_UnlockSched() 0
-
-/* --- Initialization stuff --- */
-#define _MD_INIT_LOCKS()
-
-/* --- Stack stuff --- */
-#define _MD_INIT_STACK _PR_MD_INIT_STACK
-#define _MD_CLEAR_STACK(stack)
-
-/*
-** Watcom needs to see this to make the linker work.
-**
-*/
-NSPR_API(void) _PR_NativeDestroyThread(PRThread *thread);
-NSPR_API(void) _PR_UserDestroyThread(PRThread *thread);
-
-
-/*
-** If thread emulation is used, then setjmp/longjmp stores the register
-** state of each thread.
-**
-** CatchBuf layout:
-** context[0] - IP
-** context[1] - CS
-** context[2] - SP
-** context[3] - BP
-** context[4] - SI
-** context[5] - DI
-** context[6] - DS
-** context[7] - ?? (maybe flags)
-** context[8] - SS
-*/
-#define PR_CONTEXT_TYPE CATCHBUF
-#define PR_NUM_GCREGS 9
-
-#define _MD_GET_SP(thread) ((thread)->md.SP)
-#define CONTEXT(_t) ((_t)->md.context)
-
-/*
-** Initialize a thread context to run "e(o,a)" when started
-*/
-#define _MD_INIT_CONTEXT(_t, sp, epa, stat ) \
-{ \
- *(stat) = PR_TRUE; \
- Catch((_t)->md.context ); \
- (_t)->md.context[0] = OFFSETOF(epa); \
- (_t)->md.context[1] = SELECTOROF(epa); \
- (_t)->md.context[2] = OFFSETOF(_pr_top_of_task_stack - 64); \
- (_t)->md.context[3] = 0; \
-}
-
-#define _MD_SWITCH_CONTEXT(_t) \
- if (!Catch((_t)->md.context)) { \
- int garbCollPlaceHolder; \
- (_t)->md.errcode = errno; \
- (_t)->md.SP = &garbCollPlaceHolder; \
- _PR_Schedule(); \
- }
-
-#define _MD_SAVE_CONTEXT(_t) \
- { \
- int garbCollPlaceHolder; \
- Catch((_t)->md.context); \
- (_t)->md.errcode = errno; \
- (_t)->md.SP = &garbCollPlaceHolder; \
- }
-
-/*
-** Restore a thread context, saved by _MD_SWITCH_CONTEXT
-*/
-#define _PR_MD_RESTORE_CONTEXT _MD_RESTORE_CONTEXT
-
-/*
- * Memory-mapped files
- */
-
-struct _MDFileMap {
- PRInt8 unused;
-};
-
-extern PRStatus _MD_CreateFileMap(struct PRFileMap *fmap, PRInt64 size);
-#define _MD_CREATE_FILE_MAP _MD_CreateFileMap
-
-extern PRInt32 _MD_GetMemMapAlignment(void);
-#define _MD_GET_MEM_MAP_ALIGNMENT _MD_GetMemMapAlignment
-
-extern void * _MD_MemMap(struct PRFileMap *fmap, PRInt64 offset,
- PRUint32 len);
-#define _MD_MEM_MAP _MD_MemMap
-
-extern PRStatus _MD_MemUnmap(void *addr, PRUint32 size);
-#define _MD_MEM_UNMAP _MD_MemUnmap
-
-extern PRStatus _MD_CloseFileMap(struct PRFileMap *fmap);
-#define _MD_CLOSE_FILE_MAP _MD_CloseFileMap
-
-
-/* --- Error mapping ----------------------------------- */
-extern void _PR_MD_map_error( int err );
-
-#define _PR_MD_MAP_OPENDIR_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_CLOSEDIR_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_READDIR_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_DELETE_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_STAT_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_FSTAT_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_RENAME_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_ACCESS_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_MKDIR_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_RMDIR_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_READ_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_TRANSMITFILE_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_WRITE_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_LSEEK_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_FSYNC_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_CLOSE_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_SOCKET_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_RECV_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_RECVFROM_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_SEND_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_SENDTO_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_ACCEPT_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_ACCEPTEX_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_CONNECT_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_BIND_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_LISTEN_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_SHUTDOWN_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_GETSOCKNAME_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_GETPEERNAME_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_GETSOCKOPT_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_SETSOCKOPT_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_OPEN_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_GETHOSTNAME_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_SELECT_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_LOCKF_ERROR _PR_MD_map_error
-#define _PR_MD_MAP_WSASTARTUP_ERROR _PR_MD_map_error
-
-#endif /* nspr_win16_defs_h___ */
--- a/nsprpub/pr/include/md/prosdep.h
+++ b/nsprpub/pr/include/md/prosdep.h
@@ -49,18 +49,16 @@ PR_BEGIN_EXTERN_C
#include "md/_pcos.h"
#ifdef WINNT
#include "md/_winnt.h"
#include "md/_win32_errors.h"
#elif defined(WIN95) || defined(WINCE)
#include "md/_win95.h"
#include "md/_win32_errors.h"
-#elif defined(WIN16)
-#include "md/_win16.h"
#elif defined(OS2)
#include "md/_os2.h"
#include "md/_os2_errors.h"
#else
#error unknown Windows platform
#endif
#elif defined(XP_UNIX)
--- a/nsprpub/pr/include/prdtoa.h
+++ b/nsprpub/pr/include/prdtoa.h
@@ -48,24 +48,17 @@ PR_BEGIN_EXTERN_C
** s00. The string is scanned up to the first unrecognized
** character.
**a
** If the value of se is not (char **)NULL, a pointer to
** the character terminating the scan is returned in the location pointed
** to by se. If no number can be formed, se is set to s00, and
** zero is returned.
*/
-#if defined(HAVE_WATCOM_BUG_1)
-/* this is a hack to circumvent a bug in the Watcom C/C++ 11.0 compiler
-** When Watcom fixes the bug, remove the special case for Win16
-*/
-PRFloat64 __pascal __loadds __export
-#else
NSPR_API(PRFloat64)
-#endif
PR_strtod(const char *s00, char **se);
/*
** PR_cnvtf()
** conversion routines for floating point
** prcsn - number of digits of precision to generate floating
** point value.
*/
--- a/nsprpub/pr/include/prinet.h
+++ b/nsprpub/pr/include/prinet.h
@@ -113,19 +113,15 @@ struct sockaddr_dl;
* Do not include any system header files.
*
* Originally we were including <windows.h>. It slowed down the
* compilation of files that included NSPR headers, so we removed
* the <windows.h> inclusion at customer's request, which created
* an unfortunate inconsistency with other platforms.
*/
-#elif defined(WIN16)
-
-#include <winsock.h>
-
#else
#error Unknown platform
#endif
#endif /* prinet_h__ */
--- a/nsprpub/pr/include/prinrval.h
+++ b/nsprpub/pr/include/prinrval.h
@@ -73,16 +73,19 @@ typedef PRUint32 PRIntervalTime;
/***********************************************************************
** DEFINES: PR_INTERVAL_NO_WAIT
** PR_INTERVAL_NO_TIMEOUT
** DESCRIPTION:
** Two reserved constants are defined in the PRIntervalTime namespace.
** They are used to indicate that the process should wait no time (return
** immediately) or wait forever (never time out), respectively.
+** Note: PR_INTERVAL_NO_TIMEOUT passed as input to PR_Connect is
+** interpreted as use the OS's connect timeout.
+**
***********************************************************************/
#define PR_INTERVAL_NO_WAIT 0UL
#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
/**********************************************************************/
/****************************** FUNCTIONS *****************************/
/**********************************************************************/
--- a/nsprpub/pr/include/prio.h
+++ b/nsprpub/pr/include/prio.h
@@ -1260,17 +1260,21 @@ NSPR_API(PRFileDesc*) PR_OpenTCPSocke
* Initiate a connection on a socket.
* INPUTS:
* PRFileDesc *fd
* Points to a PRFileDesc object representing a socket
* PRNetAddr *addr
* Specifies the address of the socket in its own communication
* space.
* PRIntervalTime timeout
- * Time limit for completion of the connect operation.
+ * The function uses the lesser of the provided timeout and
+ * the OS's connect timeout. In particular, if you specify
+ * PR_INTERVAL_NO_TIMEOUT as the timeout, the OS's connection
+ * time limit will be used.
+ *
* OUTPUTS:
* None
* RETURN: PRStatus
* Upon successful completion of connection initiation, PR_Connect
* returns PR_SUCCESS. Otherwise, it returns PR_FAILURE. Further
* failure information can be obtained by calling PR_GetError().
**************************************************************************
*/
--- a/nsprpub/pr/include/prlock.h
+++ b/nsprpub/pr/include/prlock.h
@@ -111,11 +111,31 @@ NSPR_API(void) PR_Lock(PRLock *lock);
** INPUTS: PRLock *lock
** Lock to unlocked.
** OUTPUTS: void
** RETURN: PR_STATUS
** Returns PR_FAILURE if the caller does not own the lock.
***********************************************************************/
NSPR_API(PRStatus) PR_Unlock(PRLock *lock);
+/***********************************************************************
+** MACRO: PR_ASSERT_CURRENT_THREAD_OWNS_LOCK
+** DESCRIPTION:
+** If the current thread owns |lock|, this assertion is guaranteed to
+** succeed. Otherwise, the behavior of this function is undefined.
+** INPUTS: PRLock *lock
+** Lock to assert ownership of.
+** OUTPUTS: void
+** RETURN: None
+***********************************************************************/
+#if defined(DEBUG) || defined(FORCE_PR_ASSERT)
+#define PR_ASSERT_CURRENT_THREAD_OWNS_LOCK(/* PrLock* */ lock) \
+ PR_AssertCurrentThreadOwnsLock(lock)
+#else
+#define PR_ASSERT_CURRENT_THREAD_OWNS_LOCK(/* PrLock* */ lock)
+#endif
+
+/* Don't call this function directly. */
+NSPR_API(void) PR_AssertCurrentThreadOwnsLock(PRLock *lock);
+
PR_END_EXTERN_C
#endif /* prlock_h___ */
--- a/nsprpub/pr/include/prlog.h
+++ b/nsprpub/pr/include/prlog.h
@@ -184,21 +184,17 @@ NSPR_API(void) PR_SetLogBuffering(PRIntn
*/
NSPR_API(void) PR_LogPrint(const char *fmt, ...);
/*
** Flush the log to its file.
*/
NSPR_API(void) PR_LogFlush(void);
-/*
-** Windoze 16 can't support a large static string space for all of the
-** various debugging strings so logging is not enabled for it.
-*/
-#if (defined(DEBUG) || defined(FORCE_PR_LOG)) && !defined(WIN16)
+#if defined(DEBUG) || defined(FORCE_PR_LOG)
#define PR_LOGGING 1
#define PR_LOG_TEST(_module,_level) \
((_module)->level >= (_level))
/*
** Log something.
** "module" is the address of a PRLogModuleInfo structure
@@ -208,23 +204,23 @@ NSPR_API(void) PR_LogFlush(void);
*/
#define PR_LOG(_module,_level,_args) \
PR_BEGIN_MACRO \
if (PR_LOG_TEST(_module,_level)) { \
PR_LogPrint _args; \
} \
PR_END_MACRO
-#else /* (defined(DEBUG) || defined(FORCE_PR_LOG)) && !defined(WIN16) */
+#else /* defined(DEBUG) || defined(FORCE_PR_LOG) */
#undef PR_LOGGING
#define PR_LOG_TEST(module,level) 0
#define PR_LOG(module,level,args)
-#endif /* (defined(DEBUG) || defined(FORCE_PR_LOG)) && !defined(WIN16) */
+#endif /* defined(DEBUG) || defined(FORCE_PR_LOG) */
#ifndef NO_NSPR_10_SUPPORT
#ifdef PR_LOGGING
#define PR_LOG_BEGIN PR_LOG
#define PR_LOG_END PR_LOG
#define PR_LOG_DEFINE PR_NewLogModule
#else
--- a/nsprpub/pr/include/prlong.h
+++ b/nsprpub/pr/include/prlong.h
@@ -54,41 +54,30 @@ PR_BEGIN_EXTERN_C
** DEFINES: LL_MaxInt
** LL_MinInt
** LL_Zero
** LL_MaxUint
** DESCRIPTION:
** Various interesting constants and static variable
** initializer
***********************************************************************/
-#if defined(HAVE_WATCOM_BUG_2)
-PRInt64 __pascal __loadds __export
- LL_MaxInt(void);
-PRInt64 __pascal __loadds __export
- LL_MinInt(void);
-PRInt64 __pascal __loadds __export
- LL_Zero(void);
-PRUint64 __pascal __loadds __export
- LL_MaxUint(void);
-#else
NSPR_API(PRInt64) LL_MaxInt(void);
NSPR_API(PRInt64) LL_MinInt(void);
NSPR_API(PRInt64) LL_Zero(void);
NSPR_API(PRUint64) LL_MaxUint(void);
-#endif
#if defined(HAVE_LONG_LONG)
#if PR_BYTES_PER_LONG == 8
#define LL_MAXINT 9223372036854775807L
#define LL_MININT (-LL_MAXINT - 1L)
#define LL_ZERO 0L
#define LL_MAXUINT 18446744073709551615UL
#define LL_INIT(hi, lo) ((hi ## L << 32) + lo ## L)
-#elif (defined(WIN32) || defined(WIN16)) && !defined(__GNUC__)
+#elif defined(WIN32) && !defined(__GNUC__)
#define LL_MAXINT 9223372036854775807i64
#define LL_MININT (-LL_MAXINT - 1i64)
#define LL_ZERO 0i64
#define LL_MAXUINT 18446744073709551615ui64
#define LL_INIT(hi, lo) ((hi ## i64 << 32) + lo ## i64)
#else
#define LL_MAXINT 9223372036854775807LL
#define LL_MININT (-LL_MAXINT - 1LL)
--- a/nsprpub/pr/include/prmon.h
+++ b/nsprpub/pr/include/prmon.h
@@ -103,11 +103,26 @@ NSPR_API(PRStatus) PR_Notify(PRMonitor *
/*
** Notify all of the threads waiting on the monitor's condition variable.
** All of threads waiting on the condition are scheduled to reenter the
** monitor.
*/
NSPR_API(PRStatus) PR_NotifyAll(PRMonitor *mon);
+/*
+** PR_ASSERT_CURRENT_THREAD_IN_MONITOR
+** If the current thread is in |mon|, this assertion is guaranteed to
+** succeed. Otherwise, the behavior of this function is undefined.
+*/
+#if defined(DEBUG) || defined(FORCE_PR_ASSERT)
+#define PR_ASSERT_CURRENT_THREAD_IN_MONITOR(/* PRMonitor* */ mon) \
+ PR_AssertCurrentThreadInMonitor(mon)
+#else
+#define PR_ASSERT_CURRENT_THREAD_IN_MONITOR(/* PRMonitor* */ mon)
+#endif
+
+/* Don't call this function directly. */
+NSPR_API(void) PR_AssertCurrentThreadInMonitor(PRMonitor *mon);
+
PR_END_EXTERN_C
#endif /* prmon_h___ */
--- a/nsprpub/pr/include/prnetdb.h
+++ b/nsprpub/pr/include/prnetdb.h
@@ -63,17 +63,17 @@ NSPR_API(PRStatus) PR_NetAddrToString(
/*
** Beware that WINSOCK.H defines h_addrtype and h_length as short.
** Client code does direct struct copies of hostent to PRHostEnt and
** hence the ifdef.
*/
typedef struct PRHostEnt {
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
-#if defined(WIN32) || defined(WIN16)
+#ifdef WIN32
PRInt16 h_addrtype; /* host address type */
PRInt16 h_length; /* length of address */
#else
PRInt32 h_addrtype; /* host address type */
PRInt32 h_length; /* length of address */
#endif
char **h_addr_list; /* list of addresses from name server */
} PRHostEnt;
@@ -349,17 +349,17 @@ NSPR_API(void) PR_ConvertIPv4AddrToIPv6(
** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
** the result will be PR_FAILURE and the reason
** for the failure can be retrieved by PR_GetError().
***********************************************************************/
typedef struct PRProtoEnt {
char *p_name; /* official protocol name */
char **p_aliases; /* alias list */
-#if defined(WIN32) || defined(WIN16)
+#ifdef WIN32
PRInt16 p_num; /* protocol # */
#else
PRInt32 p_num; /* protocol # */
#endif
} PRProtoEnt;
NSPR_API(PRStatus) PR_GetProtoByName(
const char* protocolname, char* buffer, PRInt32 bufsize, PRProtoEnt* result);
--- a/nsprpub/pr/include/prthread.h
+++ b/nsprpub/pr/include/prthread.h
@@ -34,17 +34,17 @@
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef prthread_h___
#define prthread_h___
/*
-** API for NSPR threads. On some architectures (MAC and WIN16
+** API for NSPR threads. On some architectures (Mac OS Classic
** notably) pre-emptibility is not guaranteed. Hard priority scheduling
** is not guaranteed, so programming using priority based synchronization
** is a no-no.
**
** NSPR threads are scheduled based loosely on their client set priority.
** In general, a thread of a higher priority has a statistically better
** chance of running relative to threads of lower priority. However,
** NSPR uses multiple strategies to provide execution vehicles for thread
--- a/nsprpub/pr/include/prtime.h
+++ b/nsprpub/pr/include/prtime.h
@@ -110,28 +110,28 @@ typedef struct PRTimeParameters {
* ANSI C time_t struct tm
* NSPR 1.0 PRInt64 PRTime
* NSPR 2.0 PRTime PRExplodedTime
*/
typedef struct PRExplodedTime {
PRInt32 tm_usec; /* microseconds past tm_sec (0-99999) */
PRInt32 tm_sec; /* seconds past tm_min (0-61, accomodating
- up to two leap seconds) */
+ up to two leap seconds) */
PRInt32 tm_min; /* minutes past tm_hour (0-59) */
PRInt32 tm_hour; /* hours past tm_day (0-23) */
PRInt32 tm_mday; /* days past tm_mon (1-31, note that it
starts from 1) */
PRInt32 tm_month; /* months past tm_year (0-11, Jan = 0) */
PRInt16 tm_year; /* absolute year, AD (note that we do not
count from 1900) */
PRInt8 tm_wday; /* calculated day of the week
(0-6, Sun = 0) */
- PRInt16 tm_yday; /* calculated day of the year
+ PRInt16 tm_yday; /* calculated day of the year
(0-365, Jan 1 = 0) */
PRTimeParameters tm_params; /* time parameters used by conversion */
} PRExplodedTime;
/*
* PRTimeParamFn --
*
@@ -169,42 +169,34 @@ typedef PRTimeParameters (PR_CALLBACK *P
* The values returned are not guaranteed to advance in a linear fashion
* due to the application of time correction protocols which synchronize
* computer clocks to some external time source. Consequently it should
* not be depended on for interval timing.
*
* The implementation is machine dependent.
* Cf. time_t time(time_t *tp) in ANSI C.
*/
-#if defined(HAVE_WATCOM_BUG_2)
-PRTime __pascal __export __loadds
-#else
-NSPR_API(PRTime)
-#endif
+NSPR_API(PRTime)
PR_Now(void);
/*
* Expand time binding it to time parameters provided by PRTimeParamFn.
* The calculation is envisoned to proceed in the following steps:
* - From given PRTime, calculate PRExplodedTime in GMT
* - Apply the given PRTimeParamFn to the GMT that we just calculated
* to obtain PRTimeParameters.
* - Add the PRTimeParameters offsets to GMT to get the local time
* as PRExplodedTime.
*/
NSPR_API(void) PR_ExplodeTime(
PRTime usecs, PRTimeParamFn params, PRExplodedTime *exploded);
/* Reverse operation of PR_ExplodeTime */
-#if defined(HAVE_WATCOM_BUG_2)
-PRTime __pascal __export __loadds
-#else
-NSPR_API(PRTime)
-#endif
+NSPR_API(PRTime)
PR_ImplodeTime(const PRExplodedTime *exploded);
/*
* Adjust exploded time to normalize field overflows after manipulation.
* Note that the following fields of PRExplodedTime should not be
* manipulated:
* - tm_month and tm_year: because the number of days in a month and
* number of days in a year are not constant, it is ambiguous to
@@ -293,17 +285,17 @@ NSPR_API(PRStatus) PR_ParseTimeString (
*/
/**********************************************************************/
/*********************** OLD COMPATIBILITYFUNCTIONS *******************/
/**********************************************************************/
#ifndef NO_NSPR_10_SUPPORT
/* Format a time value into a buffer. Same semantics as strftime() */
-NSPR_API(PRUint32) PR_FormatTime(char *buf, int buflen, const char *fmt,
+NSPR_API(PRUint32) PR_FormatTime(char *buf, int buflen, const char *fmt,
const PRExplodedTime *tm);
/* Format a time value into a buffer. Time is always in US English format, regardless
* of locale setting.
*/
NSPR_API(PRUint32)
PR_FormatTimeUSEnglish( char* buf, PRUint32 bufSize,
const char* format, const PRExplodedTime* tm );
--- a/nsprpub/pr/include/prtypes.h
+++ b/nsprpub/pr/include/prtypes.h
@@ -107,49 +107,16 @@
#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
#define PR_CALLBACK
#define PR_CALLBACK_DECL
#define PR_STATIC_CALLBACK(__x) static __x
-#elif defined(WIN16)
-
-#define PR_CALLBACK_DECL __cdecl
-
-#if defined(_WINDLL)
-#define PR_EXPORT(__type) extern __type _cdecl _export _loadds
-#define PR_IMPORT(__type) extern __type _cdecl _export _loadds
-#define PR_EXPORT_DATA(__type) extern __type _export
-#define PR_IMPORT_DATA(__type) extern __type _export
-
-#define PR_EXTERN(__type) extern __type _cdecl _export _loadds
-#define PR_IMPLEMENT(__type) __type _cdecl _export _loadds
-#define PR_EXTERN_DATA(__type) extern __type _export
-#define PR_IMPLEMENT_DATA(__type) __type _export
-
-#define PR_CALLBACK __cdecl __loadds
-#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
-
-#else /* this must be .EXE */
-#define PR_EXPORT(__type) extern __type _cdecl _export
-#define PR_IMPORT(__type) extern __type _cdecl _export
-#define PR_EXPORT_DATA(__type) extern __type _export
-#define PR_IMPORT_DATA(__type) extern __type _export
-
-#define PR_EXTERN(__type) extern __type _cdecl _export
-#define PR_IMPLEMENT(__type) __type _cdecl _export
-#define PR_EXTERN_DATA(__type) extern __type _export
-#define PR_IMPLEMENT_DATA(__type) __type _export
-
-#define PR_CALLBACK __cdecl __loadds
-#define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK
-#endif /* _WINDLL */
-
#elif defined(XP_MAC)
#define PR_EXPORT(__type) extern __declspec(export) __type
#define PR_EXPORT_DATA(__type) extern __declspec(export) __type
#define PR_IMPORT(__type) extern __declspec(export) __type
#define PR_IMPORT_DATA(__type) extern __declspec(export) __type
#define PR_EXTERN(__type) extern __declspec(export) __type
@@ -382,22 +349,24 @@ typedef long PRInt32;
** DESCRIPTION:
** The int64 types are known to be 64 bits each. Care must be used when
** declaring variables of type PRUint64 or PRInt64. Different hardware
** architectures and even different compilers have varying support for
** 64 bit values. The only guaranteed portability requires the use of
** the LL_ macros (see prlong.h).
************************************************************************/
#ifdef HAVE_LONG_LONG
-#if PR_BYTES_PER_LONG == 8
+/*
+ * On 64-bit Mac OS X, uint64 needs to be defined as unsigned long long to
+ * match uint64_t, otherwise our uint64 typedef conflicts with the uint64
+ * typedef in cssmconfig.h, which CoreServices.h includes indirectly.
+ */
+#if PR_BYTES_PER_LONG == 8 && !defined(__APPLE__)
typedef long PRInt64;
typedef unsigned long PRUint64;
-#elif defined(WIN16)
-typedef __int64 PRInt64;
-typedef unsigned __int64 PRUint64;
#elif defined(WIN32) && !defined(__GNUC__)
typedef __int64 PRInt64;
typedef unsigned __int64 PRUint64;
#else
typedef long long PRInt64;
typedef unsigned long long PRUint64;
#endif /* PR_BYTES_PER_LONG == 8 */
#else /* !HAVE_LONG_LONG */
--- a/nsprpub/pr/src/bthreads/btlocks.c
+++ b/nsprpub/pr/src/bthreads/btlocks.c
@@ -109,8 +109,15 @@ PR_IMPLEMENT(PRStatus)
lock->owner = NULL;
if( atomic_add( &lock->benaphoreCount, -1 ) > 1 ) {
release_sem_etc( lock->semaphoreID, 1, B_DO_NOT_RESCHEDULE );
}
return PR_SUCCESS;
}
+
+PR_IMPLEMENT(void)
+ PR_AssertCurrentThreadOwnsLock(PRLock *lock)
+{
+ PR_ASSERT(lock != NULL);
+ PR_ASSERT(lock->owner == find_thread( NULL ));
+}
--- a/nsprpub/pr/src/bthreads/btmon.c
+++ b/nsprpub/pr/src/bthreads/btmon.c
@@ -206,14 +206,28 @@ PR_IMPLEMENT(PRStatus)
{
return( PR_FAILURE );
}
PR_NotifyAllCondVar( mon->cvar );
return( PR_SUCCESS );
}
+/*
+** Return the number of times that the current thread has entered the
+** lock. Returns zero if the current thread has not entered the lock.
+*/
PR_IMPLEMENT(PRIntn)
PR_GetMonitorEntryCount(PRMonitor *mon)
{
- return( mon->entryCount );
+ return( (mon->cvar->lock->owner == find_thread( NULL )) ?
+ mon->entryCount : 0 );
}
+/*
+** If the current thread is in |mon|, this assertion is guaranteed to
+** succeed. Otherwise, the behavior of this function is undefined.
+*/
+PR_IMPLEMENT(void)
+ PR_AssertCurrentThreadInMonitor(PRMonitor *mon)
+{
+ PR_ASSERT_CURRENT_THREAD_OWNS_LOCK(mon->cvar->lock);
+}
--- a/nsprpub/pr/src/linking/prlink.c
+++ b/nsprpub/pr/src/linking/prlink.c
@@ -151,17 +151,17 @@ struct _imcb *IAC$GL_IMAGE_LIST = NULL;
#define MAX_DEVNAM 64
#define MAX_FILNAM 255
#endif /* VMS */
/*
* On these platforms, symbols have a leading '_'.
*/
#if defined(SUNOS4) || (defined(DARWIN) && defined(USE_MACH_DYLD)) \
- || defined(NEXTSTEP) || defined(WIN16) || defined(XP_OS2) \
+ || defined(NEXTSTEP) || defined(XP_OS2) \
|| ((defined(OPENBSD) || defined(NETBSD)) && !defined(__ELF__))
#define NEED_LEADING_UNDERSCORE
#endif
#define PR_LD_PATHW 0x8000 /* for PR_LibSpec_PathnameU */
/************************************************************************/
@@ -309,64 +309,35 @@ void _PR_InitLinker(void)
if (lm) {
PR_LOG(_pr_linker_lm, PR_LOG_MIN,
("Loaded library %s (init)", lm->name));
}
PR_ExitMonitor(pr_linker_lock);
}
-#if defined(WIN16)
/*
- * _PR_ShutdownLinker unloads all dlls loaded by the application via
- * calls to PR_LoadLibrary
- */
-void _PR_ShutdownLinker(void)
-{
- PR_EnterMonitor(pr_linker_lock);
-
- while (pr_loadmap) {
- if (pr_loadmap->refCount > 1) {
-#ifdef DEBUG
- fprintf(stderr, "# Forcing library to unload: %s (%d outstanding references)\n",
- pr_loadmap->name, pr_loadmap->refCount);
-#endif
- pr_loadmap->refCount = 1;
- }
- PR_UnloadLibrary(pr_loadmap);
- }
-
- PR_ExitMonitor(pr_linker_lock);
-
- PR_DestroyMonitor(pr_linker_lock);
- pr_linker_lock = NULL;
-}
-#else
-/*
- * _PR_ShutdownLinker was originally only used on WIN16 (see above),
- * but I think it should also be used on other platforms. However,
- * I disagree with the original implementation's unloading the dlls
- * for the application. Any dlls that still remain on the pr_loadmap
- * list when NSPR shuts down are application programming errors. The
- * only exception is pr_exe_loadmap, which was added to the list by
+ * _PR_ShutdownLinker does not unload the dlls loaded by the application
+ * via calls to PR_LoadLibrary. Any dlls that still remain on the
+ * pr_loadmap list when NSPR shuts down are application programming errors.
+ * The only exception is pr_exe_loadmap, which was added to the list by
* NSPR and hence should be cleaned up by NSPR.
*/
void _PR_ShutdownLinker(void)
{
/* FIXME: pr_exe_loadmap should be destroyed. */
PR_DestroyMonitor(pr_linker_lock);
pr_linker_lock = NULL;
if (_pr_currentLibPath) {
free(_pr_currentLibPath);
_pr_currentLibPath = NULL;
}
}
-#endif
/******************************************************************************/
PR_IMPLEMENT(PRStatus) PR_SetLibraryPath(const char *path)
{
PRStatus rv = PR_SUCCESS;
if (!_pr_initialized) _PR_ImplicitInitialization();
@@ -900,31 +871,41 @@ pr_LoadLibraryByPathname(const char *nam
/* Neutrino needs RTLD_GROUP to load Netscape plugins. (bug 71179) */
int dl_flags = RTLD_GROUP;
#elif defined(AIX)
/* AIX needs RTLD_MEMBER to load an archive member. (bug 228899) */
int dl_flags = RTLD_MEMBER;
#else
int dl_flags = 0;
#endif
- void *h;
+ void *h = NULL;
if (flags & PR_LD_LAZY) {
dl_flags |= RTLD_LAZY;
}
if (flags & PR_LD_NOW) {
dl_flags |= RTLD_NOW;
}
if (flags & PR_LD_GLOBAL) {
dl_flags |= RTLD_GLOBAL;
}
if (flags & PR_LD_LOCAL) {
dl_flags |= RTLD_LOCAL;
}
+#if defined(DARWIN)
+ /* ensure the file exists if it contains a slash character i.e. path */
+ /* DARWIN's dlopen ignores the provided path and checks for the */
+ /* plain filename in DYLD_LIBRARY_PATH */
+ if (strchr(name, PR_DIRECTORY_SEPARATOR) == NULL ||
+ PR_Access(name, PR_ACCESS_EXISTS) == PR_SUCCESS) {
+ h = dlopen(name, dl_flags);
+ }
+#else
h = dlopen(name, dl_flags);
+#endif
#elif defined(USE_HPSHL)
int shl_flags = 0;
shl_t h;
/*
* Use the DYNAMIC_PATH flag only if 'name' is a plain file
* name (containing no directory) to match the behavior of
* dlopen().
@@ -1208,19 +1189,19 @@ pr_FindSymbolInLib(PRLibrary *lm, const
*/
if (rc != NO_ERROR) {
name++;
DosQueryProcAddr(lm->dlh, 0, (PSZ) name, (PFN *) &f);
}
#endif
#endif /* XP_OS2 */
-#if defined(WIN32) || defined(WIN16)
+#ifdef WIN32
f = GetProcAddress(lm->dlh, name);
-#endif /* WIN32 || WIN16 */
+#endif /* WIN32 */
#if defined(XP_MACOSX) && defined(USE_MACH_DYLD)
/* add this offset to skip the leading underscore in name */
#define SYM_OFFSET 1
if (lm->bundle) {
CFStringRef nameRef = CFStringCreateWithCString(NULL, name + SYM_OFFSET, kCFStringEncodingASCII);
if (nameRef) {
f = CFBundleGetFunctionPointerForName(lm->bundle, nameRef);
--- a/nsprpub/pr/src/md/windows/Makefile.in
+++ b/nsprpub/pr/src/md/windows/Makefile.in
@@ -41,32 +41,16 @@ MOD_DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(MOD_DEPTH)/config/autoconf.mk
include $(topsrcdir)/config/config.mk
-ifeq ($(OS_TARGET), WIN16)
-CSRCS = \
- w16null.c \
- w16thred.c \
- w16proc.c \
- w16fmem.c \
- w16sock.c \
- w16mem.c \
- w16io.c \
- w16gc.c \
- w16error.c \
- w16stdio.c \
- w16callb.c \
- ntinrval.c \
- $(NULL)
-else
ifeq (,$(filter-out WIN95 WINCE, $(OS_TARGET)))
CSRCS = \
ntmisc.c \
ntsec.c \
ntsem.c \
ntinrval.c \
ntgc.c \
w95thred.c \
@@ -92,17 +76,16 @@ CSRCS = \
ntio.c \
win32_errors.c \
w32ipcsem.c \
w32poll.c \
w32rng.c \
w32shm.c \
$(NULL)
endif
-endif
TARGETS = $(OBJS)
INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private
DEFINES += -D_NSPR_BUILD_
include $(topsrcdir)/config/rules.mk
--- a/nsprpub/pr/src/md/windows/objs.mk
+++ b/nsprpub/pr/src/md/windows/objs.mk
@@ -63,30 +63,16 @@ CSRCS = ntmisc.c \
w95sock.c \
win32_errors.c \
w32ipcsem.c \
w32poll.c \
w32rng.c \
w32shm.c \
w95dllmain.c
else
-ifeq ($(OS_TARGET),WIN16)
-CSRCS = w16null.c \
- w16thred.c \
- w16proc.c \
- w16fmem.c \
- w16sock.c \
- w16mem.c \
- w16io.c \
- w16gc.c \
- w16error.c \
- w16stdio.c \
- w16callb.c \
- ntinrval.c
-endif # win16
endif # win95
endif # winnt
CSRCS += $(PR_MD_CSRCS)
ASFILES += $(PR_MD_ASFILES)
OBJS += $(addprefix md/windows/$(OBJDIR)/,$(CSRCS:.c=.$(OBJ_SUFFIX))) \
$(addprefix md/windows/$(OBJDIR)/,$(ASFILES:.s=.$(OBJ_SUFFIX)))
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16callb.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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 ***** */
-
-/*
-** w16callb.c -- Implement Win16 Callback functions
-**
-** Functions here are to replace functions normally in
-** LIBC which are not implemented in MSVC's LIBC.
-** Some clients of NSPR expect to statically link
-** to NSPR and get these functions.
-**
-** Some are implemented as callbacks to the .EXE
-** some are implemented directly in this module.
-**
-*/
-
-#include "primpl.h"
-#include "windowsx.h"
-
-/*
-** _pr_callback_funcs -- This is where clients register the
-** callback function structure.
-*/
-struct PRMethodCallbackStr * _pr_callback_funcs;
-
-/*
-** PR_MDInitWin16() -- Register the PRMethodCallback table pointer
-**
-*/
-void PR_MDRegisterCallbacks(struct PRMethodCallbackStr *f)
-{
- _pr_callback_funcs = f;
-}
-
-/*
-** NSPR re-implenentations of various C runtime functions:
-*/
-
-/*
-** PR_MD_printf() -- exported as printf()
-**
-*/
-int PR_MD_printf(const char *fmt, ...)
-{
- char buffer[1024];
- int ret = 0;
- va_list args;
-
- va_start(args, fmt);
-
-#ifdef DEBUG
- PR_vsnprintf(buffer, sizeof(buffer), fmt, args);
- {
- if (_pr_callback_funcs != NULL && _pr_callback_funcs->auxOutput != NULL) {
- (* _pr_callback_funcs->auxOutput)(buffer);
- } else {
- OutputDebugString(buffer);
- }
- }
-#endif
-
- va_end(args);
- return ret;
-}
-
-/*
-** PR_MD_sscanf() -- exported as sscanf()
-**
-*/
-int PR_MD_sscanf(const char *buf, const char *fmt, ...)
-{
- int retval;
- va_list arglist;
-
- va_start(arglist, fmt);
- retval = vsscanf((const unsigned char *)buf, (const unsigned char *)fmt, arglist);
- va_end(arglist);
- return retval;
-}
-
-/*
-** PR_MD_strftime() -- exported as strftime
-**
-*/
-size_t PR_MD_strftime(char *s, size_t len, const char *fmt, const struct tm *p)
-{
- if( _pr_callback_funcs ) {
- return (*_pr_callback_funcs->strftime)(s, len, fmt, p);
- } else {
- PR_ASSERT(0);
- return 0;
- }
-}
-
-
-/*
-** PR_MD_malloc() -- exported as malloc()
-**
-*/
-void *PR_MD_malloc( size_t size )
-{
- if( _pr_callback_funcs ) {
- return (*_pr_callback_funcs->malloc)( size );
- } else {
- return GlobalAllocPtr(GPTR, (DWORD)size);
- }
-} /* end malloc() */
-
-/*
-** PR_MD_calloc() -- exported as calloc()
-**
-*/
-void *PR_MD_calloc( size_t n, size_t size )
-{
- void *p;
- size_t sz;
-
- if( _pr_callback_funcs ) {
- return (*_pr_callback_funcs->calloc)( n, size );
- } else {
- sz = n * size;
- p = GlobalAllocPtr(GPTR, (DWORD)sz );
- memset( p, 0x00, sz );
- return p;
- }
-} /* end calloc() */
-
-/*
-** PR_MD_realloc() -- exported as realloc()
-**
-*/
-void *PR_MD_realloc( void* old_blk, size_t size )
-{
- if( _pr_callback_funcs ) {
- return (*_pr_callback_funcs->realloc)( old_blk, size );
- } else {
- return GlobalReAllocPtr( old_blk, (DWORD)size, GPTR);
- }
-} /* end realloc */
-
-/*
-** PR_MD_free() -- exported as free()
-**
-*/
-void PR_MD_free( void *ptr )
-{
- if( _pr_callback_funcs ) {
- (*_pr_callback_funcs->free)( ptr );
- return;
- } else {
- GlobalFreePtr( ptr );
- return;
- }
-} /* end free() */
-
-/*
-** PR_MD_getenv() -- exported as getenv()
-**
-*/
-char *PR_MD_getenv( const char *name )
-{
- if( _pr_callback_funcs ) {
- return (*_pr_callback_funcs->getenv)( name );
- } else {
- return 0;
- }
-} /* end getenv() */
-
-
-/*
-** PR_MD_perror() -- exported as perror()
-**
-** well, not really (lth. 12/5/97).
-** XXX hold this thought.
-**
-*/
-void PR_MD_perror( const char *prefix )
-{
- return;
-} /* end perror() */
-
-/*
-** PR_MD_putenv() -- exported as putenv()
-**
-*/
-int PR_MD_putenv(const char *assoc)
-{
- if( _pr_callback_funcs ) {
- return (*_pr_callback_funcs->putenv)(assoc);
- } else {
- PR_ASSERT(0);
- return NULL;
- }
-}
-
-/*
-** PR_MD_fprintf() -- exported as fprintf()
-**
-*/
-int PR_MD_fprintf(FILE *fPtr, const char *fmt, ...)
-{
- char buffer[1024];
- va_list args;
-
- va_start(args, fmt);
- PR_vsnprintf(buffer, sizeof(buffer), fmt, args);
-
- if (fPtr == NULL)
- {
- if (_pr_callback_funcs != NULL && _pr_callback_funcs->auxOutput != NULL)
- {
- (* _pr_callback_funcs->auxOutput)(buffer);
- }
- else
- {
- OutputDebugString(buffer);
- }
- }
- else
- {
- fwrite(buffer, 1, strlen(buffer), fPtr); /* XXX Is this a sec. hole? */
- }
-
- va_end(args);
- return 0;
-}
-
-/* end w16callb.c */
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16error.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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 ***** */
-
-/*
-** Note: A single error mapping function is provided.
-**
-*/
-#include "prerror.h"
-#include <errno.h>
-#include <winsock.h>
-
-
-void _PR_MD_map_error( int err )
-{
-
- switch ( err )
- {
- case ENOENT: /* No such file or directory */
- PR_SetError(PR_FILE_NOT_FOUND_ERROR, err);
- break;
- case E2BIG: /* Argument list too big */
- PR_SetError( PR_INVALID_ARGUMENT_ERROR, err );
- break;
- case ENOEXEC: /* Exec format error */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EBADF: /* Bad file number */
- PR_SetError( PR_BAD_DESCRIPTOR_ERROR, err );
- break;
- case ENOMEM: /* Not enough Memory */
- PR_SetError( PR_OUT_OF_MEMORY_ERROR, err );
- break;
- case EACCES: /* Permission denied */
- PR_SetError( PR_NO_ACCESS_RIGHTS_ERROR, err );
- break;
- case EEXIST: /* File exists */
-
- /* RESTART here */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EXDEV: /* Cross device link */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EINVAL: /* Invalid argument */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENFILE: /* File table overflow */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EMFILE: /* Too many open files */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENOSPC: /* No space left on device */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- /* math errors */
- case EDOM: /* Argument too large */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ERANGE: /* Result too large */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- /* file locking error */
- case EDEADLK: /* Resource deadlock would occur */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EINTR: /* Interrupt */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ECHILD: /* Child does not exist */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- /* POSIX errors */
- case EAGAIN: /* Resource unavailable, try again */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EBUSY: /* Device or Resource is busy */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EFBIG: /* File too large */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EIO: /* I/O error */
- PR_SetError( PR_IO_ERROR, err );
- break;
- case EISDIR: /* Is a directory */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENOTDIR: /* Not a directory */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EMLINK: /* Too many links */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENOTBLK: /* Block device required */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENOTTY: /* Not a character device */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENXIO: /* No such device or address */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EPERM: /* Not owner */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EPIPE: /* Broken pipe */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EROFS: /* Read only file system */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ESPIPE: /* Illegal seek */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ESRCH: /* No such process */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ETXTBSY: /* Text file busy */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case EFAULT: /* Bad address */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENAMETOOLONG: /* Name too long */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENODEV: /* No such device */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENOLCK: /* No locks available on system */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENOSYS: /* Unknown system call */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- case ENOTEMPTY: /* Directory not empty */
- /* Normative Addendum error */
- case EILSEQ: /* Multibyte/widw character encoding error */
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
-
- /* WinSock errors */
- case WSAEACCES:
- PR_SetError(PR_NO_ACCESS_RIGHTS_ERROR, err);
- break;
- case WSAEADDRINUSE:
- PR_SetError(PR_ADDRESS_IN_USE_ERROR, err);
- break;
- case WSAEADDRNOTAVAIL:
- PR_SetError(PR_ADDRESS_NOT_AVAILABLE_ERROR, err);
- break;
- case WSAEAFNOSUPPORT:
- PR_SetError(PR_ADDRESS_NOT_SUPPORTED_ERROR, err);
- break;
- case WSAEBADF:
- PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err);
- break;
- case WSAECONNREFUSED:
- PR_SetError(PR_CONNECT_REFUSED_ERROR, err);
- break;
- case WSAEFAULT:
- PR_SetError(PR_ACCESS_FAULT_ERROR, err);
- break;
- case WSAEINVAL:
- PR_SetError(PR_BUFFER_OVERFLOW_ERROR, err);
- break;
- case WSAEISCONN:
- PR_SetError(PR_IS_CONNECTED_ERROR, err);
- break;
- case WSAEMFILE:
- PR_SetError(PR_PROC_DESC_TABLE_FULL_ERROR, err);
- break;
- case WSAENETDOWN:
- case WSAENETUNREACH:
- PR_SetError(PR_NETWORK_UNREACHABLE_ERROR, err);
- break;
- case WSAENOBUFS:
- PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err);
- break;
- case WSAENOPROTOOPT:
- case WSAEMSGSIZE:
- PR_SetError(PR_INVALID_ARGUMENT_ERROR, err);
- break;
- case WSAENOTCONN:
- PR_SetError(PR_NOT_CONNECTED_ERROR, err);
- break;
- case WSAENOTSOCK:
- PR_SetError(PR_NOT_SOCKET_ERROR, err);
- break;
- case WSAEOPNOTSUPP:
- PR_SetError(PR_NOT_TCP_SOCKET_ERROR, err);
- break;
- case WSAEPROTONOSUPPORT:
- PR_SetError(PR_PROTOCOL_NOT_SUPPORTED_ERROR, err);
- break;
- case WSAETIMEDOUT:
- PR_SetError(PR_IO_TIMEOUT_ERROR, err);
- break;
- case WSAEINTR:
- PR_SetError(PR_PENDING_INTERRUPT_ERROR, err );
- break;
- case WSASYSNOTREADY:
- case WSAVERNOTSUPPORTED:
- PR_SetError(PR_PROTOCOL_NOT_SUPPORTED_ERROR, err);
- break;
- case WSAEWOULDBLOCK:
- PR_SetError(PR_WOULD_BLOCK_ERROR, err);
- break;
-
- default:
- PR_SetError( PR_UNKNOWN_ERROR, err );
- break;
- }
- return;
-} /* end _MD_map_win16_error() */
-
-
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16fmem.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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"
-
-/*
- **********************************************************************
- *
- * Memory-mapped files are not implemented on Win16.
- *
- **********************************************************************
- */
-
-PRStatus _MD_CreateFileMap(PRFileMap *fmap, PRInt64 size)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return PR_FAILURE;
-}
-
-PRInt32 _MD_GetMemMapAlignment(void)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return -1;
-}
-
-void * _MD_MemMap(
- PRFileMap *fmap,
- PRInt64 offset,
- PRUint32 len)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return NULL;
-}
-
-PRStatus _MD_MemUnmap(void *addr, PRUint32 len)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return PR_FAILURE;
-}
-
-PRStatus _MD_CloseFileMap(PRFileMap *fmap)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return PR_FAILURE;
-}
-
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16gc.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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"
-#include <sys/timeb.h>
-
-PRWord *
-_MD_HomeGCRegisters(PRThread *t, int isCurrent, int *np)
-{
- if (isCurrent)
- {
- _MD_SAVE_CONTEXT(t);
- }
- /*
- ** In Win16 because the premption is "cooperative" it can never be the
- ** case that a register holds the sole reference to an object. It
- ** will always have been pushed onto the stack before the thread
- ** switch... So don't bother to scan the registers...
- */
- *np = 0;
-
- return (PRWord *) CONTEXT(t);
-}
-
-#if 0
-#ifndef SPORT_MODEL
-
-#define MAX_SEGMENT_SIZE (65536l - 4096l)
-
-/************************************************************************/
-/*
-** Machine dependent GC Heap management routines:
-** _MD_GrowGCHeap
-*/
-/************************************************************************/
-
-extern void *
-_MD_GrowGCHeap(uint32 *sizep)
-{
- void *addr;
-
- if( *sizep > MAX_SEGMENT_SIZE ) {
- *sizep = MAX_SEGMENT_SIZE;
- }
-
- addr = malloc((size_t)*sizep);
- return addr;
-}
-
-#endif /* SPORT_MODEL */
-#endif /* 0 */
-
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16io.c
+++ /dev/null
@@ -1,855 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <share.h>
-#include <sys/locking.h>
-
-
-/*
-** Sleep this many milliseconds on each I/O operation
-** to cause an intentional thread switch.
-*/
-#define _PR_MD_WIN16_DELAY 1
-
-
-/*
-** PR_MD_RegisterW16StdioCallbacks() -- Register Win16 stdio callback functions
-**
-** This public function call is unique to Win16.
-** ... Sigh ... So much for platform independence.
-**
-** To get stdio to work from a command line executable, the stdio stream
-** calls must be issued from the .EXE file; calling them from the .DLL
-** sends the output to the bit-bucket. Therefore, the .EXE wanting to
-** do stdio to the console window (must be built as a "quickwin" application)
-** must have the wrapper functions defined in this module statically linked
-** into the .EXE.
-**
-** There appears to be nothing you can do to get stdio to work from a
-** Win16 GUI application. Oh Well!
-**
-*/
-PRStdinRead _pr_md_read_stdin = 0;
-PRStdoutWrite _pr_md_write_stdout = 0;
-PRStderrWrite _pr_md_write_stderr = 0;
-
-PRStatus
-PR_MD_RegisterW16StdioCallbacks( PRStdinRead inReadf, PRStdoutWrite outWritef, PRStderrWrite errWritef )
-{
- _pr_md_write_stdout = outWritef;
- _pr_md_write_stderr = errWritef;
- _pr_md_read_stdin = inReadf;
-
- return(PR_SUCCESS);
-} /* end PR_MD_RegisterW16StdioCallbacks() */
-
-
-/*
-** _PR_MD_OPEN() -- Open a file
-**
-** Returns: a fileHandle or -1
-**
-**
-*/
-PRInt32
-_PR_MD_OPEN(const char *name, PRIntn osflags, int mode)
-{
- PRInt32 file;
- int access = O_BINARY;
- int rights = 0;
-
-
- /*
- ** Map NSPR open flags to os open flags
- */
- if (osflags & PR_RDONLY )
- access |= O_RDONLY;
- if (osflags & PR_WRONLY )
- access |= O_WRONLY;
- if (osflags & PR_RDWR )
- access |= O_RDWR;
- if (osflags & PR_CREATE_FILE )
- {
- access |= O_CREAT;
- rights |= S_IRWXU;
- }
- if (osflags & PR_TRUNCATE)
- access |= O_TRUNC;
- if (osflags & PR_APPEND)
- access |= O_APPEND;
- else
- access |= O_RDONLY;
-
- /*
- ** Open the file
- */
- file = (PRInt32) sopen( name, access, SH_DENYNO, rights );
- if ( -1 == (PRInt32)file )
- {
- _PR_MD_MAP_OPEN_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return file;
-}
-
-/*
-** _PR_MD_READ() - Read something
-**
-** Returns: bytes read or -1
-**
-*/
-PRInt32
-_PR_MD_READ(PRFileDesc *fd, void *buf, PRInt32 len)
-{
- PRInt32 rv;
-
- if ( (PR_GetDescType(fd) == PR_DESC_FILE) &&
- ( fd->secret->md.osfd == PR_StandardInput ) &&
- ( _pr_md_write_stdout ))
- {
- rv = (*_pr_md_read_stdin)( buf, len);
- }
- else
- {
- rv = read( fd->secret->md.osfd, buf, len );
- }
-
- if ( rv == -1)
- {
- _PR_MD_MAP_READ_ERROR( errno );
- }
-
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return rv;
-}
-
-/*
-** _PR_MD_WRITE() - Write something
-**
-** Returns: bytes written or -1
-**
-** Note: for file handles 1 and 2 (stdout and stderr)
-** call the Win16 NSPR stdio callback functions, if they are
-** registered.
-**
-*/
-PRInt32
-_PR_MD_WRITE(PRFileDesc *fd, const void *buf, PRInt32 len)
-{
- PRInt32 rv;
-
- if ( (PR_GetDescType(fd) == PR_DESC_FILE))
- {
- switch ( fd->secret->md.osfd )
- {
- case PR_StandardOutput :
- if ( _pr_md_write_stdout )
- rv = (*_pr_md_write_stdout)( (void *)buf, len);
- else
- rv = len; /* fake success */
- break;
-
- case PR_StandardError :
- if ( _pr_md_write_stderr )
- rv = (*_pr_md_write_stderr)( (void *)buf, len);
- else
- rv = len; /* fake success */
- break;
-
- default:
- rv = write( fd->secret->md.osfd, buf, len );
- if ( rv == -1 )
- {
- _PR_MD_MAP_WRITE_ERROR( errno );
- }
- break;
- }
- }
- else
- {
- rv = write( fd->secret->md.osfd, buf, len );
- if ( rv == -1 )
- {
- _PR_MD_MAP_WRITE_ERROR( errno );
- }
- }
-
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return rv;
-} /* --- end _PR_MD_WRITE() --- */
-
-/*
-** _PR_MD_LSEEK() - Seek to position in a file
-**
-** Note: 'whence' maps directly to PR_...
-**
-** Returns:
-**
-*/
-PRInt32
-_PR_MD_LSEEK(PRFileDesc *fd, PRInt32 offset, int whence)
-{
- PRInt32 rv;
-
- rv = lseek( fd->secret->md.osfd, offset, whence );
- if ( rv == -1 )
- {
- _PR_MD_MAP_LSEEK_ERROR( errno );
-
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return( rv );
-}
-
-/*
-** _PR_MD_LSEEK64() -- Seek to position in file, 64bit offset.
-**
-*/
-PRInt64
-_PR_MD_LSEEK64( PRFileDesc *fd, PRInt64 offset, int whence )
-{
- PRInt64 test;
- PRInt32 rv, off;
- LL_SHR(test, offset, 32);
- if (!LL_IS_ZERO(test))
- {
- PR_SetError(PR_FILE_TOO_BIG_ERROR, 0);
- LL_I2L(test, -1);
- return test;
- }
- LL_L2I(off, offset);
- rv = _PR_MD_LSEEK(fd, off, whence);
- LL_I2L(test, rv);
- return test;
-} /* end _PR_MD_LSEEK64() */
-
-/*
-** _PR_MD_FSYNC() - Flush file buffers.
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_FSYNC(PRFileDesc *fd)
-{
- PRInt32 rv;
-
- rv = (PRInt32) fsync( fd->secret->md.osfd );
- if ( rv == -1 )
- {
- _PR_MD_MAP_FSYNC_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return(rv);
-}
-
-/*
-** _PR_MD_CLOSE() - Close an open file handle
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_CLOSE_FILE(PRInt32 osfd)
-{
- PRInt32 rv;
-
- rv = (PRInt32) close( osfd );
- if ( rv == -1 )
- {
- _PR_MD_MAP_CLOSE_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return(rv);
-} /* --- end _MD_CloseFile() --- */
-
-
-/* --- DIR IO ------------------------------------------------------------ */
-#define GetFileFromDIR(d) (d)->d_entry.cFileName
-
-/*
-** FlipSlashes() - Make forward slashes ('/') into backslashes
-**
-** Returns: void
-**
-**
-*/
-void FlipSlashes(char *cp, int len)
-{
- while (--len >= 0) {
- if (cp[0] == '/') {
- cp[0] = PR_DIRECTORY_SEPARATOR;
- }
- cp++;
- }
-}
-
-
-/*
-** _PR_MD_OPEN_DIR() - Open a Directory.
-**
-** Returns:
-**
-**
-*/
-PRStatus
-_PR_MD_OPEN_DIR(_MDDir *d, const char *name)
-{
- d->dir = opendir( name );
-
- if ( d->dir == NULL )
- {
- _PR_MD_MAP_OPENDIR_ERROR( errno );
- return( PR_FAILURE );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return( PR_SUCCESS );
-}
-
-
-/*
-** _PR_MD_READ_DIR() - read next directory entry
-**
-**
-*/
-char *
-_PR_MD_READ_DIR(_MDDir *d, PRIntn flags)
-{
- struct dirent *de;
- int err;
-
- for (;;)
- {
- de = readdir( d->dir );
- if ( de == NULL ) {
- _PR_MD_MAP_READDIR_ERROR( errno);
- return 0;
- }
- if ((flags & PR_SKIP_DOT) &&
- (de->d_name[0] == '.') && (de->d_name[1] == 0))
- continue;
- if ((flags & PR_SKIP_DOT_DOT) &&
- (de->d_name[0] == '.') && (de->d_name[1] == '.') &&
- (de->d_name[2] == 0))
- continue;
- break;
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return de->d_name;
-}
-
-/*
-** _PR_MD_CLOSE_DIR() - Close a directory.
-**
-**
-*/
-PRInt32
-_PR_MD_CLOSE_DIR(_MDDir *d)
-{
- PRInt32 rv;
-
- if ( d->dir )
- {
- rv = closedir( d->dir );
- if (rv != 0)
- {
- _PR_MD_MAP_CLOSEDIR_ERROR( errno );
- }
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return rv;
-}
-
-
-/*
-** _PR_MD_DELETE() - Delete a file.
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_DELETE(const char *name)
-{
- PRInt32 rv;
-
- rv = (PRInt32) remove( name );
- if ( rv != 0 )
- {
- _PR_MD_MAP_DELETE_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return(rv);
-}
-
-
-/*
-** _PR_MD_STAT() - Get file attributes by filename
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_STAT(const char *fn, struct stat *info)
-{
- PRInt32 rv;
-
- rv = _stat(fn, (struct _stat *)info);
- if ( rv == -1 )
- {
- _PR_MD_MAP_STAT_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return( rv );
-}
-
-/*
-** _PR_MD_GETFILEINFO() - Get file attributes by filename
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_GETFILEINFO(const char *fn, PRFileInfo *info)
-{
- struct _stat sb;
- PRInt32 rv;
-
- if ( (rv = _stat(fn, &sb)) == 0 ) {
- if (info) {
- if (S_IFREG & sb.st_mode)
- info->type = PR_FILE_FILE ;
- else if (S_IFDIR & sb.st_mode)
- info->type = PR_FILE_DIRECTORY;
- else
- info->type = PR_FILE_OTHER;
- info->size = sb.st_size;
- LL_I2L(info->modifyTime, sb.st_mtime);
- LL_I2L(info->creationTime, sb.st_ctime);
- }
- }
- else
- {
- _PR_MD_MAP_STAT_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return rv;
-}
-
-PRInt32
-_PR_MD_GETFILEINFO64(const char *fn, PRFileInfo64 *info)
-{
- PRFileInfo info32;
-
- PRInt32 rv = _PR_MD_GETFILEINFO(fn, &info32);
- if (0 == rv)
- {
- info->type = info32.type;
- info->modifyTime = info32.modifyTime;
- info->creationTime = info32.creationTime;
- LL_I2L(info->size, info32.size);
- }
- return(rv);
-}
-
-/*
-** _PR_MD_GETOPENFILEINFO() - Get file attributes from an open file handle
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_GETOPENFILEINFO(const PRFileDesc *fd, PRFileInfo *info)
-{
- struct stat statBuf;
- PRInt32 rv = PR_SUCCESS;
-
- rv = fstat( fd->secret->md.osfd, &statBuf );
- if ( rv == 0)
- {
- if (statBuf.st_mode & S_IFREG )
- info->type = PR_FILE_FILE;
- else if ( statBuf.st_mode & S_IFDIR )
- info->type = PR_FILE_DIRECTORY;
- else
- info->type = PR_FILE_OTHER;
- info->size = statBuf.st_size;
- LL_I2L(info->modifyTime, statBuf.st_mtime);
- LL_I2L(info->creationTime, statBuf.st_ctime);
-
- }
- else
- {
- _PR_MD_MAP_FSTAT_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return(rv);
-}
-
-PRInt32
-_PR_MD_GETOPENFILEINFO64(const PRFileDesc *fd, PRFileInfo64 *info)
-{
- PRFileInfo info32;
-
- PRInt32 rv = _PR_MD_GETOPENFILEINFO(fd, &info32);
- if (0 == rv)
- {
- info->type = info32.type;
- info->modifyTime = info32.modifyTime;
- info->creationTime = info32.creationTime;
- LL_I2L(info->size, info32.size);
- }
- return(rv);
-}
-
-/*
-** _PR_MD_RENAME() - Rename a file
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_RENAME(const char *from, const char *to)
-{
- PRInt32 rv;
-
- rv = rename( from, to );
- if ( rv == -1 )
- {
- _PR_MD_MAP_RENAME_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return( rv );
-}
-
-/*
-** _PR_MD_ACCESS() - Return file acesss attribute.
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_ACCESS(const char *name, PRIntn how)
-{
- PRInt32 rv;
- int mode = 0;
-
- if ( how & PR_ACCESS_WRITE_OK )
- mode |= W_OK;
- if ( how & PR_ACCESS_READ_OK )
- mode |= R_OK;
-
- rv = (PRInt32) access( name, mode );
- if ( rv == -1 )
- {
- _PR_MD_MAP_ACCESS_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return(rv);
-}
-
-/*
-** _PR_MD_MKDIR() - Make a directory
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_MKDIR(const char *name, PRIntn mode)
-{
- PRInt32 rv;
-
- rv = mkdir( name );
- if ( rv == 0 )
- {
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return PR_SUCCESS;
- }
- else
- {
- _PR_MD_MAP_MKDIR_ERROR( errno );
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return PR_FAILURE;
- }
-}
-
-/*
-** _PR_MD_RMDIR() - Delete a directory
-**
-** Returns:
-**
-**
-*/
-PRInt32
-_PR_MD_RMDIR(const char *name)
-{
- PRInt32 rv;
-
- rv = (PRInt32) rmdir( name );
- if ( rv == -1 )
- {
- _PR_MD_MAP_RMDIR_ERROR( errno );
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return(rv);
-}
-
-/*
-** _PR_MD_LOCKFILE() - Lock a file.
-**
-** The _locking() call locks relative to the current file pointer.
-** This function is required to lock all of the file, so,
-** 1. Seek to the beginning of the file, preserving the original position.
-** 2. Lock the file, pausing if it is locked by someone else, and
-** try again.
-** 3. Re-position to the original position in the file.
-**
-** For unlocking, a similar protocol of positioning is required.
-**
-*/
-PRStatus
-_PR_MD_LOCKFILE(PRInt32 f)
-{
- PRInt32 rv = PR_SUCCESS; /* What we return to our caller */
- long seekOrigin; /* original position in file */
- PRInt32 rc; /* what the system call returns to us */
-
- /*
- ** Seek to beginning of file, saving original position.
- */
- seekOrigin = lseek( f, 0l, SEEK_SET );
- if ( rc == -1 )
- {
- _PR_MD_MAP_LSEEK_ERROR( errno );
- return( PR_FAILURE );
- }
-
- /*
- ** Attempt to lock the file.
- ** If someone else has it, Sleep-a-while and try again.
- */
- for( rc = -1; rc != 0; )
- {
- rc = _locking( f, _LK_NBLCK , 0x7fffffff );
- if ( rc == -1 )
- {
- if ( errno == EACCES )
- {
- PR_Sleep( 100 );
- continue;
- }
- else
- {
- _PR_MD_MAP_LOCKF_ERROR( errno );
- rv = PR_FAILURE;
- break;
- }
- }
- } /* end for() */
-
- /*
- ** Now that the file is locked, re-position to
- ** the original file position.
- **
- */
- rc = lseek( f, seekOrigin, SEEK_SET );
- if ( rc == -1 )
- {
- _PR_MD_MAP_LSEEK_ERROR( errno );
- rv = PR_FAILURE;
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return PR_SUCCESS;
-} /* end _PR_MD_LOCKFILE() */
-
-/*
-** _PR_MD_TLOCKFILE() - Test and Lock file.
-**
-** The _locking() call locks relative to the current file pointer.
-** This function is required to lock all of the file, so,
-** 1. Seek to the beginning of the file, preserving the original position.
-** 2. Attempt to Lock the file.
-** If the file is locked by someone else, try NO MORE.
-** 3. Re-position to the original position in the file.
-**
-** See the discussion of _PR_MD_LOCKFILE
-**
-**
-*/
-PRStatus
-_PR_MD_TLOCKFILE(PRInt32 f)
-{
- PRInt32 rv = PR_SUCCESS; /* What we return */
- long seekOrigin; /* original position in file */
- PRInt32 rc; /* return value from system call */
-
- /*
- ** Seek to beginning of file, saving original position.
- */
- seekOrigin = lseek( f, 0l, SEEK_SET );
- if ( rc == -1 )
- {
- _PR_MD_MAP_LSEEK_ERROR( errno );
- return( PR_FAILURE );
- }
-
- /*
- ** Attempt to lock the file. One ping; one ping only, Vasily.
- ** If someone else has it, Reposition and return failure.
- */
- rc = _locking( f, _LK_NBLCK , 0x7fffffff );
- if ( rc == -1 )
- {
- if ( errno != EACCES )
- _PR_MD_MAP_LOCKF_ERROR( errno );
- rv = PR_FAILURE;
- }
-
- /*
- ** Now that the file is locked, maybe, re-position to
- ** the original file position.
- */
- rc = lseek( f, seekOrigin, SEEK_SET );
- if ( rc == -1 )
- {
- _PR_MD_MAP_LSEEK_ERROR( errno );
- rv = PR_FAILURE;
- }
-
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return rv;
-} /* end _PR_MD_TLOCKFILE() */
-
-
-/*
-** _PR_MD_UNLOCKFILE() - Unlock a file.
-**
-** See the discussion of _PR_MD_LOCKFILE
-**
-*/
-PRStatus
-_PR_MD_UNLOCKFILE(PRInt32 f)
-{
- PRInt32 rv = PR_SUCCESS; /* What we return */
- long seekOrigin; /* original position in file */
- PRInt32 rc; /* return value from system call */
-
- /*
- ** Seek to beginning of file, saving original position.
- */
- seekOrigin = lseek( f, 0l, SEEK_SET );
- if ( rc == -1 )
- {
- _PR_MD_MAP_LSEEK_ERROR( errno );
- return( PR_FAILURE );
- }
-
- /*
- ** Unlock the file.
- */
- rc = _locking( f, _LK_UNLCK , 0x7fffffff );
- if ( rc == -1 )
- {
- _PR_MD_MAP_LOCKF_ERROR( errno );
- rv = PR_FAILURE;
- }
-
- /*
- ** Now that the file is unlocked, re-position to
- ** the original file position.
- */
- rc = lseek( f, seekOrigin, SEEK_SET );
- if ( rc == -1 )
- {
- _PR_MD_MAP_LSEEK_ERROR( errno );
- rv = PR_FAILURE;
- }
- PR_Sleep( _PR_MD_WIN16_DELAY );
- return rv;
-} /* end _PR_MD_UNLOCKFILE() */
-
-/*
-** PR_Stat() -- Return status on a file
-**
-** This is a hack! ... See BugSplat: 98516
-** Basically, this hack takes a name and stat buffer as input.
-** The input stat buffer is presumed to be a Microsoft stat buffer.
-** The functions does a Watcom stat() then maps the result to
-** the MS stat buffer. ...
-**
-*/
-PR_IMPLEMENT(PRInt32) PR_Stat(const char *name, struct stat *buf)
-{
- PRInt32 rv;
- _MDMSStat *mssb = (_MDMSStat*) buf; /* this is Microsoft's stat buffer */
- struct stat statBuf; /* this is Watcom's stat buffer */
-
- /* First, get Watcom's idea of stat
- ** then reformat it into a Microsoft idea of stat
- */
- rv = (PRInt32) _stat( name, &statBuf);
- if (rv == 0l )
- {
- mssb->st_dev = statBuf.st_dev;
- mssb->st_ino = statBuf.st_ino; /* not used, really */
- mssb->st_mode = statBuf.st_mode;
- mssb->st_nlink = 1; /* always 1, says MS */
- mssb->st_uid = statBuf.st_uid;
- mssb->st_gid = statBuf.st_gid;
- mssb->st_rdev = statBuf.st_rdev; /* please Gh0d! Let these be the same */
- mssb->st_size = statBuf.st_size;
- mssb->st_atime = statBuf.st_atime;
- mssb->st_mtime = statBuf.st_mtime;
- mssb->st_ctime = statBuf.st_ctime;
- }
- return rv;
-} /* end PR_Stat() */
-
-
-
-/* $$ end W16io.c */
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16mem.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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 ***** */
-
-/*******************************************************************
-** w16mem.c -- Implement memory segment functions.
-**
-**
-********************************************************************
-*/
-#include "primpl.h"
-
-
-/*
-** Allocate a new memory segment.
-**
-** Return the segment's access rights and size.
-*/
-PRStatus _MD_AllocSegment(PRSegment *seg, PRUint32 size, void *vaddr)
-{
- PR_ASSERT(seg != 0);
- PR_ASSERT(size != 0);
- PR_ASSERT(vaddr == 0);
-
- /*
- ** Take the actual memory for the segment out of our Figment heap.
- */
-
- seg->vaddr = (char *)malloc(size);
-
- if (seg->vaddr == NULL) {
- return PR_FAILURE;
- }
-
- seg->size = size;
-
- return PR_SUCCESS;
-} /* --- end _MD_AllocSegment() --- */
-
-
-/*
-** Free previously allocated memory segment.
-*/
-void _MD_FreeSegment(PRSegment *seg)
-{
- PR_ASSERT((seg->flags & _PR_SEG_VM) == 0);
-
- if (seg->vaddr != NULL)
- free( seg->vaddr );
- return;
-} /* --- end _MD_FreeSegment() --- */
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16null.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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"
-#include <sys/timeb.h>
-
-
-struct _MDLock _pr_ioq_lock;
-HINSTANCE _pr_hInstance = NULL;
-char * _pr_top_of_task_stack;
-_PRInterruptTable _pr_interruptTable[] = { { 0 } };
-
-/*
- *-----------------------------------------------------------------------
- *
- * PR_Now --
- *
- * Returns the current time in microseconds since the epoch.
- * The epoch is midnight January 1, 1970 GMT.
- * The implementation is machine dependent. This is the
- * implementation for Windows.
- * Cf. time_t time(time_t *tp)
- *
- *-----------------------------------------------------------------------
- */
-
-#if defined(HAVE_WATCOM_BUG_2)
-PRTime __pascal __export __loadds
-#else
-PR_IMPLEMENT(PRTime)
-#endif
-PR_Now(void)
-{
- PRInt64 s, ms, ms2us, s2us;
- struct timeb b;
-
- ftime(&b);
- LL_I2L(ms2us, PR_USEC_PER_MSEC);
- LL_I2L(s2us, PR_USEC_PER_SEC);
- LL_I2L(s, b.time);
- LL_I2L(ms, (PRInt32)b.millitm);
- LL_MUL(ms, ms, ms2us);
- LL_MUL(s, s, s2us);
- LL_ADD(s, s, ms);
- return s;
-}
-
-
-
-char *_PR_MD_GET_ENV(const char *name)
-{
- return NULL;
-}
-
-PRIntn
-_PR_MD_PUT_ENV(const char *name)
-{
- return NULL;
-}
-
-int CALLBACK LibMain( HINSTANCE hInst, WORD wDataSeg,
- WORD cbHeapSize, LPSTR lpszCmdLine )
-{
- _pr_hInstance = hInst;
- return TRUE;
-}
-
-
-
-void
-_PR_MD_EARLY_INIT()
-{
- _tzset();
- return;
-}
-
-void
-_PR_MD_WAKEUP_CPUS( void )
-{
- return;
-}
-
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16proc.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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"
-#include <sys/timeb.h>
-
-
-/*
-** Create Process.
-*/
-PRProcess * _PR_CreateWindowsProcess(
- const char *path,
- char *const *argv,
- char *const *envp,
- const PRProcessAttr *attr)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return NULL;
-}
-
-PRStatus _PR_DetachWindowsProcess(PRProcess *process)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return PR_FAILURE;
-}
-
-PRStatus _PR_WaitWindowsProcess(PRProcess *process,
- PRInt32 *exitCode)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return PR_FAILURE;
-}
-
-PRStatus _PR_KillWindowsProcess(PRProcess *process)
-{
- PR_ASSERT(!"Not implemented");
- PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
- return PR_FAILURE;
-}
-
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16sock.c
+++ /dev/null
@@ -1,1170 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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"
-
-static int winsockNotPresent = 0;
-
-void
-_PR_MD_INIT_IO()
-{
- int rv;
-
- WORD WSAVersion = 0x0101;
- WSADATA WSAData;
-
- rv = WSAStartup( WSAVersion, &WSAData );
- if ( rv != 0 )
- {
- _PR_MD_MAP_WSASTARTUP_ERROR(WSAGetLastError());
- winsockNotPresent = 1;
- }
- return;
-}
-
-void
-_PR_MD_CLEANUP_BEFORE_EXIT(void)
-{
- int rv;
- int err;
-
- rv = WSACleanup();
- if ( rv == SOCKET_ERROR )
- {
- err = WSAGetLastError();
- PR_ASSERT(0);
- }
- return;
-} /* end _PR_MD_CLEANUP_BEFORE_EXIT() */
-
-/* --- SOCKET IO --------------------------------------------------------- */
-
-PRStatus
-_MD_WindowsGetHostName(char *name, PRUint32 namelen)
-{
- PRIntn rv;
- PRInt32 syserror;
-
- rv = gethostname(name, (PRInt32) namelen);
- if (0 == rv) {
- return PR_SUCCESS;
- }
- syserror = WSAGetLastError();
- PR_ASSERT(WSANOTINITIALISED != syserror);
- _PR_MD_MAP_GETHOSTNAME_ERROR(syserror);
- return PR_FAILURE;
-}
-
-
-PRInt32
-_PR_MD_SOCKET(int af, int type, int flags)
-{
- SOCKET sock;
- PRUint32 one = 1;
- PRInt32 rv;
- PRInt32 err;
-
- if ( winsockNotPresent )
- return( (PRInt32)INVALID_SOCKET );
-
- sock = socket(af, type, flags);
-
- if (sock == INVALID_SOCKET )
- {
- int rv = GetLastError();
- closesocket(sock);
- _PR_MD_MAP_SOCKET_ERROR(rv);
- return (PRInt32)INVALID_SOCKET;
- }
-
- /*
- ** Make the socket Non-Blocking
- */
- rv = ioctlsocket( sock, FIONBIO, &one);
- if ( rv != 0 )
- {
- err = WSAGetLastError();
- return -1;
- }
-
- return (PRInt32)sock;
-}
-
-
-PRInt32
-_PR_MD_SOCKETAVAILABLE(PRFileDesc *fd)
-{
- PRUint32 result;
-
- if (ioctlsocket(fd->secret->md.osfd, FIONREAD, &result) < 0) {
- PR_SetError(PR_BAD_DESCRIPTOR_ERROR, WSAGetLastError());
- return -1;
- }
- return result;
-}
-
-
-/*
-** _MD_CloseSocket() -- Close a socket
-**
-*/
-PRInt32
-_PR_MD_CLOSE_SOCKET(PRInt32 osfd)
-{
- PRInt32 rv;
-
- rv = closesocket((SOCKET) osfd );
- if (rv < 0)
- _PR_MD_MAP_CLOSE_ERROR(WSAGetLastError());
-
- return rv;
-}
-
-PRInt32 _PR_MD_LISTEN(PRFileDesc *fd, PRIntn backlog)
-{
- int rv, err;
-
- rv = listen(fd->secret->md.osfd, backlog);
- if ( rv == SOCKET_ERROR ) {
- _PR_MD_MAP_LISTEN_ERROR(WSAGetLastError());
- return(-1);
- }
- return(rv);
-}
-
-PRInt32
-_PR_MD_ACCEPT(PRFileDesc *fd, PRNetAddr *addr, PRUint32 *addrlen,
- PRIntervalTime timeout )
-{
- PRInt32 osfd = fd->secret->md.osfd;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- PRInt32 err;
- PRIntn rv;
-
- MD_ASSERTINT( *addrlen );
-
- while ((rv = (SOCKET)accept(osfd, (struct sockaddr *) addr,
- (int *)addrlen)) == INVALID_SOCKET ) {
- err = WSAGetLastError();
- if ( err == WSAEWOULDBLOCK ) {
- if (fd->secret->nonblocking) {
- break;
- }
- if (_PR_WaitForFD(osfd, PR_POLL_READ, timeout) == 0) {
- if ( _PR_PENDING_INTERRUPT(me))
- {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- } else
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- }
- rv = -1;
- goto done;
- } else if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- rv = -1;
- goto done;
- }
- } else if ((err == WSAEINTR) && (!_PR_PENDING_INTERRUPT(me))){
- continue;
- } else {
- break;
- }
- }
- if (rv < 0) {
- _PR_MD_MAP_ACCEPT_ERROR(err);
- }
-done:
- if ( rv == INVALID_SOCKET )
- return(-1 );
- else
- return(rv);
-} /* end _MD_Accept() */
-
-
-PRInt32
-_PR_MD_CONNECT(PRFileDesc *fd, const PRNetAddr *addr, PRUint32 addrlen,
- PRIntervalTime timeout)
-{
- PRInt32 osfd = fd->secret->md.osfd;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- PRInt32 rv, err;
-
- while ((rv = connect(osfd, (struct sockaddr *)addr, addrlen)) == -1) {
- err = WSAGetLastError();
- if (err == WSAEISCONN) {
- rv = 0;
- break;
- }
- /* for winsock1.1, it reports EALREADY as EINVAL */
- if ((err == WSAEWOULDBLOCK)
- ||(err == WSAEALREADY)
- || (err = WSAEINVAL)) {
- if (fd->secret->nonblocking) {
- break;
- }
- if (_PR_WaitForFD(osfd, PR_POLL_WRITE, timeout) == 0) {
- if ( _PR_PENDING_INTERRUPT(me))
- {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- } else
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- }
- rv = -1;
- goto done;
- } else if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- rv = -1;
- goto done;
- }
- } else if ((err == WSAEINTR) && (!_PR_PENDING_INTERRUPT(me))){
- continue;
- } else {
- break;
- }
- }
-
- if (rv < 0) {
- _PR_MD_MAP_CONNECT_ERROR(err);
- }
-done:
- return rv;
-}
-
-PRInt32
-_PR_MD_BIND(PRFileDesc *fd, const PRNetAddr *addr, PRUint32 addrlen)
-{
- PRInt32 rv;
- int one = 1;
-
- rv = bind(fd->secret->md.osfd, (const struct sockaddr *)&(addr->inet), addrlen);
-
- if (rv == SOCKET_ERROR) {
- _PR_MD_MAP_BIND_ERROR(WSAGetLastError());
- return -1;
- }
-
- return 0;
-}
-
-
-PRInt32
-_PR_MD_RECV(PRFileDesc *fd, void *buf, PRInt32 amount, PRIntn flags,
- PRIntervalTime timeout)
-{
- PRInt32 osfd = fd->secret->md.osfd;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- PRInt32 rv, err;
-
- while ((rv = recv(osfd,buf,amount,flags)) == -1) {
- err = WSAGetLastError();
- if ( err == WSAEWOULDBLOCK ) {
- if (fd->secret->nonblocking) {
- break;
- }
- if (_PR_WaitForFD(osfd, PR_POLL_READ, timeout) == 0) {
- if ( _PR_PENDING_INTERRUPT(me))
- {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- } else
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- }
- rv = -1;
- goto done;
- } else if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- rv = -1;
- goto done;
- }
- } else if ((err == WSAEINTR) && (!_PR_PENDING_INTERRUPT(me))){
- continue;
- } else {
- break;
- }
- }
- if (rv < 0) {
- _PR_MD_MAP_RECV_ERROR(err);
- }
-done:
- return(rv);
-}
-
-PRInt32
-_PR_MD_SEND(PRFileDesc *fd, const void *buf, PRInt32 amount, PRIntn flags,
- PRIntervalTime timeout)
-{
- PRInt32 osfd = fd->secret->md.osfd;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- PRInt32 rv, err;
-
- while ((rv = send(osfd,buf,amount,flags)) == -1) {
- err = WSAGetLastError();
- if ( err == WSAEWOULDBLOCK ) {
- if (fd->secret->nonblocking) {
- break;
- }
- if (_PR_WaitForFD(osfd, PR_POLL_WRITE, timeout) == 0) {
- if ( _PR_PENDING_INTERRUPT(me))
- {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- } else
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- }
- rv = -1;
- goto done;
- } else if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- rv = -1;
- goto done;
- }
- } else if ((err == WSAEINTR) && (!_PR_PENDING_INTERRUPT(me))){
- continue;
- } else {
- break;
- }
- }
- if (rv < 0) {
- _PR_MD_MAP_SEND_ERROR(err);
- }
-done:
- return rv;
-}
-
-PRInt32
-_PR_MD_SENDTO(PRFileDesc*fd, const void *buf, PRInt32 amount, PRIntn flags,
- const PRNetAddr *addr, PRUint32 addrlen, PRIntervalTime timeout)
-{
- PRInt32 osfd = fd->secret->md.osfd;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- PRInt32 rv, err;
-
- while ((rv = sendto(osfd, buf, amount, flags,
- (struct sockaddr *) addr, addrlen)) == -1) {
- err = WSAGetLastError();
- if ( err == WSAEWOULDBLOCK ) {
- if (fd->secret->nonblocking) {
- break;
- }
- if (_PR_WaitForFD(osfd, PR_POLL_WRITE, timeout) == 0) {
- if ( _PR_PENDING_INTERRUPT(me))
- {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- } else
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- }
- rv = -1;
- goto done;
- } else if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- rv = -1;
- goto done;
- }
- } else if ((err == WSAEINTR) && (!_PR_PENDING_INTERRUPT(me))){
- continue;
- } else {
- break;
- }
- }
- if (rv < 0) {
- _PR_MD_MAP_SENDTO_ERROR(err);
- }
-done:
- return rv;
-}
-
-PRInt32
-_PR_MD_RECVFROM(PRFileDesc *fd, void *buf, PRInt32 amount, PRIntn flags,
- PRNetAddr *addr, PRUint32 *addrlen, PRIntervalTime timeout)
-{
- PRInt32 osfd = fd->secret->md.osfd;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- PRInt32 rv, err;
-
- while ((*addrlen = PR_NETADDR_SIZE(addr)),
- ((rv = recvfrom(osfd, buf, amount, flags,
- (struct sockaddr FAR *) addr,(int FAR *)addrlen)) == -1)) {
- err = WSAGetLastError();
- if ( err == WSAEWOULDBLOCK ) {
- if (fd->secret->nonblocking) {
- break;
- }
- if (_PR_WaitForFD(osfd, PR_POLL_READ, timeout) == 0) {
- if ( _PR_PENDING_INTERRUPT(me))
- {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- } else
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- }
- rv = -1;
- goto done;
- } else if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
- rv = -1;
- goto done;
- }
- } else if ((err == WSAEINTR) && (!_PR_PENDING_INTERRUPT(me))){
- continue;
- } else {
- break;
- }
- }
- if (rv < 0) {
- _PR_MD_MAP_RECVFROM_ERROR(err);
- }
-done:
- return(rv);
-}
-
-PRInt32
-_PR_MD_WRITEV(PRFileDesc *fd, const PRIOVec *iov, PRInt32 iov_size, PRIntervalTime timeout)
-{
- int index;
- int sent = 0;
- int rv;
-
- for (index=0; index < iov_size; index++)
- {
-
-/*
- * XXX To be fixed
- * should call PR_Send
- */
-
- rv = _PR_MD_SEND(fd, iov[index].iov_base, iov[index].iov_len, 0, timeout);
- if (rv > 0)
- sent += rv;
- if ( rv != iov[index].iov_len )
- {
- if (sent <= 0)
- return -1;
- return -1;
- }
- }
- return sent;
-}
-
-PRInt32
-_PR_MD_SHUTDOWN(PRFileDesc *fd, PRIntn how)
-{
-PRInt32 rv;
-
- rv = shutdown(fd->secret->md.osfd, how);
- if (rv < 0)
- _PR_MD_MAP_SHUTDOWN_ERROR(WSAGetLastError());
- return rv;
-}
-
-PRStatus
-_PR_MD_GETSOCKNAME(PRFileDesc *fd, PRNetAddr *addr, PRUint32 *len)
-{
- PRInt32 rv;
-
- rv = getsockname((SOCKET)fd->secret->md.osfd, (struct sockaddr *)addr, (int *)len);
- if (rv==0)
- return PR_SUCCESS;
- else {
- _PR_MD_MAP_GETSOCKNAME_ERROR(WSAGetLastError());
- return PR_FAILURE;
- }
-}
-
-PRStatus
-_PR_MD_GETPEERNAME(PRFileDesc *fd, PRNetAddr *addr, PRUint32 *len)
-{
- PRInt32 rv;
-
- rv = getpeername((SOCKET)fd->secret->md.osfd, (struct sockaddr *)addr, (int*)len);
- if (rv==0)
- return PR_SUCCESS;
- else {
- _PR_MD_MAP_GETPEERNAME_ERROR(WSAGetLastError());
- return PR_FAILURE;
- }
-}
-
-PRStatus
-_PR_MD_GETSOCKOPT(PRFileDesc *fd, PRInt32 level, PRInt32 optname, char* optval, PRInt32* optlen)
-{
- PRInt32 rv;
-
- rv = getsockopt((SOCKET)fd->secret->md.osfd, level, optname, optval, (int*)optlen);
- if (rv==0)
- return PR_SUCCESS;
- else {
- _PR_MD_MAP_GETSOCKOPT_ERROR(WSAGetLastError());
- return PR_FAILURE;
- }
-}
-
-PRStatus
-_PR_MD_SETSOCKOPT(PRFileDesc *fd, PRInt32 level, PRInt32 optname, const char* optval, PRInt32 optlen)
-{
- PRInt32 rv;
-
- rv = setsockopt((SOCKET)fd->secret->md.osfd, level, optname, optval, optlen);
- if (rv==0)
- return PR_SUCCESS;
- else {
- _PR_MD_MAP_SETSOCKOPT_ERROR(WSAGetLastError());
- return PR_FAILURE;
- }
-}
-
-void
-_PR_MD_MAKE_NONBLOCK(PRFileDesc *f)
-{
- return; // do nothing!
-}
-
-/*
-** Wait for I/O on a single descriptor.
- *
- * return 0, if timed-out, else return 1
-*/
-PRInt32
-_PR_WaitForFD(PRInt32 osfd, PRUintn how, PRIntervalTime timeout)
-{
- _PRWin16PollDesc *pd;
- PRPollQueue *pq;
- PRIntn is;
- PRInt32 rv = 1;
- PRThread *me = _PR_MD_CURRENT_THREAD();
-
- PR_ASSERT(!(me->flags & _PR_IDLE_THREAD));
-
- pd = &me->md.thr_pd;
- pq = &me->md.thr_pq;
- if (timeout == PR_INTERVAL_NO_WAIT) return 0;
-
- pd->osfd = osfd;
- pd->in_flags = how;
- pd->out_flags = 0;
-
- pq->pds = pd;
- pq->npds = 1;
-
- _PR_INTSOFF(is);
- _PR_MD_IOQ_LOCK();
- _PR_THREAD_LOCK(me);
-
- if (_PR_PENDING_INTERRUPT(me)) {
- _PR_THREAD_UNLOCK(me);
- _PR_MD_IOQ_UNLOCK();
- return 0;
- }
-
- pq->thr = me;
- pq->on_ioq = PR_TRUE;
- pq->timeout = timeout;
- _PR_ADD_TO_IOQ((*pq), me->cpu);
- if (how == PR_POLL_READ) {
- FD_SET(osfd, &_PR_FD_READ_SET(me->cpu));
- (_PR_FD_READ_CNT(me->cpu))[osfd]++;
- } else if (how == PR_POLL_WRITE) {
- FD_SET(osfd, &_PR_FD_WRITE_SET(me->cpu));
- (_PR_FD_WRITE_CNT(me->cpu))[osfd]++;
- } else {
- FD_SET(osfd, &_PR_FD_EXCEPTION_SET(me->cpu));
- (_PR_FD_EXCEPTION_CNT(me->cpu))[osfd]++;
- }
- if (_PR_IOQ_MAX_OSFD(me->cpu) < osfd)
- _PR_IOQ_MAX_OSFD(me->cpu) = osfd;
- if (_PR_IOQ_TIMEOUT(me->cpu) > timeout)
- _PR_IOQ_TIMEOUT(me->cpu) = timeout;
-
- _PR_THREAD_LOCK(me);
-
- _PR_SLEEPQ_LOCK(me->cpu);
- _PR_ADD_SLEEPQ(me, timeout);
- me->state = _PR_IO_WAIT;
- me->io_pending = PR_TRUE;
- me->io_suspended = PR_FALSE;
- _PR_SLEEPQ_UNLOCK(me->cpu);
- _PR_THREAD_UNLOCK(me);
- _PR_MD_IOQ_UNLOCK();
-
- _PR_MD_WAIT(me, timeout);
- me->io_pending = PR_FALSE;
- me->io_suspended = PR_FALSE;
-
- /*
- ** If we timed out the pollq might still be on the ioq. Remove it
- ** before continuing.
- */
- if (pq->on_ioq) {
- _PR_INTSOFF(is);
- _PR_MD_IOQ_LOCK();
- /*
- * Need to check pq.on_ioq again
- */
- if (pq->on_ioq) {
- PR_REMOVE_LINK(&pq->links);
- if (how == PR_POLL_READ) {
- if ((--(_PR_FD_READ_CNT(me->cpu))[osfd]) == 0)
- FD_CLR(osfd, &_PR_FD_READ_SET(me->cpu));
-
- } else if (how == PR_POLL_WRITE) {
- if ((--(_PR_FD_WRITE_CNT(me->cpu))[osfd]) == 0)
- FD_CLR(osfd, &_PR_FD_WRITE_SET(me->cpu));
- } else {
- if ((--(_PR_FD_EXCEPTION_CNT(me->cpu))[osfd]) == 0)
- FD_CLR(osfd, &_PR_FD_EXCEPTION_SET(me->cpu));
- }
- }
- _PR_MD_IOQ_UNLOCK();
- rv = 0;
- }
- _PR_FAST_INTSON(is);
- return(rv);
-}
-
-/*
- * Unblock threads waiting for I/O
- * used when interrupting threads
- *
- * NOTE: The thread lock should held when this function is called.
- * On return, the thread lock is released.
- */
-void _PR_Unblock_IO_Wait(PRThread *thr)
-{
- int pri = thr->priority;
- _PRCPU *cpu = thr->cpu;
-
- PR_ASSERT(thr->flags & (_PR_ON_SLEEPQ | _PR_ON_PAUSEQ));
- _PR_SLEEPQ_LOCK(cpu);
- _PR_DEL_SLEEPQ(thr, PR_TRUE);
- _PR_SLEEPQ_UNLOCK(cpu);
-
- PR_ASSERT(!(thr->flags & _PR_IDLE_THREAD));
- thr->state = _PR_RUNNABLE;
- _PR_RUNQ_LOCK(cpu);
- _PR_ADD_RUNQ(thr, cpu, pri);
- _PR_RUNQ_UNLOCK(cpu);
- _PR_THREAD_UNLOCK(thr);
- _PR_MD_WAKEUP_WAITER(thr);
-}
-
-/*
-** Scan through io queue and find any bad fd's that triggered the error
-** from _MD_SELECT
-*/
-static void FindBadFDs(void)
-{
- PRCList *q;
- PRThread *me = _MD_CURRENT_THREAD();
- int sockOpt;
- int sockOptLen = sizeof(sockOpt);
-
- PR_ASSERT(!_PR_IS_NATIVE_THREAD(me));
- q = (_PR_IOQ(me->cpu)).next;
- _PR_IOQ_MAX_OSFD(me->cpu) = -1;
- _PR_IOQ_TIMEOUT(me->cpu) = PR_INTERVAL_NO_TIMEOUT;
- while (q != &_PR_IOQ(me->cpu)) {
- PRPollQueue *pq = _PR_POLLQUEUE_PTR(q);
- PRBool notify = PR_FALSE;
- _PRWin16PollDesc *pds = pq->pds;
- _PRWin16PollDesc *epds = pds + pq->npds;
- PRInt32 pq_max_osfd = -1;
-
- q = q->next;
- for (; pds < epds; pds++) {
- PRInt32 osfd = pds->osfd;
- pds->out_flags = 0;
- PR_ASSERT(osfd >= 0 || pds->in_flags == 0);
- if (pds->in_flags == 0) {
- continue; /* skip this fd */
- }
- if ( getsockopt(osfd,
- (int)SOL_SOCKET,
- SO_TYPE,
- (char*)&sockOpt,
- &sockOptLen) == SOCKET_ERROR )
- {
- if ( WSAGetLastError() == WSAENOTSOCK )
- {
- PR_LOG(_pr_io_lm, PR_LOG_MAX,
- ("file descriptor %d is bad", osfd));
- pds->out_flags = PR_POLL_NVAL;
- notify = PR_TRUE;
- }
- }
- if (osfd > pq_max_osfd) {
- pq_max_osfd = osfd;
- }
- }
-
- if (notify) {
- PRIntn pri;
- PR_REMOVE_LINK(&pq->links);
- pq->on_ioq = PR_FALSE;
-
- /*
- * Decrement the count of descriptors for each desciptor/event
- * because this I/O request is being removed from the
- * ioq
- */
- pds = pq->pds;
- for (; pds < epds; pds++) {
- PRInt32 osfd = pds->osfd;
- PRInt16 in_flags = pds->in_flags;
- PR_ASSERT(osfd >= 0 || in_flags == 0);
- if (in_flags & PR_POLL_READ) {
- if (--(_PR_FD_READ_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_READ_SET(me->cpu));
- }
- if (in_flags & PR_POLL_WRITE) {
- if (--(_PR_FD_WRITE_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_WRITE_SET(me->cpu));
- }
- if (in_flags & PR_POLL_EXCEPT) {
- if (--(_PR_FD_EXCEPTION_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_EXCEPTION_SET(me->cpu));
- }
- }
-
- _PR_THREAD_LOCK(pq->thr);
- if (pq->thr->flags & (_PR_ON_PAUSEQ|_PR_ON_SLEEPQ)) {
- _PRCPU *cpu = pq->thr->cpu;
-
- _PR_SLEEPQ_LOCK(pq->thr->cpu);
- _PR_DEL_SLEEPQ(pq->thr, PR_TRUE);
- _PR_SLEEPQ_UNLOCK(pq->thr->cpu);
-
- pri = pq->thr->priority;
- pq->thr->state = _PR_RUNNABLE;
-
- _PR_RUNQ_LOCK(cpu);
- _PR_ADD_RUNQ(pq->thr, cpu, pri);
- _PR_RUNQ_UNLOCK(cpu);
- }
- _PR_THREAD_UNLOCK(pq->thr);
- } else {
- if (pq->timeout < _PR_IOQ_TIMEOUT(me->cpu))
- _PR_IOQ_TIMEOUT(me->cpu) = pq->timeout;
- if (_PR_IOQ_MAX_OSFD(me->cpu) < pq_max_osfd)
- _PR_IOQ_MAX_OSFD(me->cpu) = pq_max_osfd;
- }
- }
-} /* end FindBadFDs() */
-
-/*
-** Called by the scheduler when there is nothing to do. This means that
-** all threads are blocked on some monitor somewhere.
-**
-** Pause the current CPU. longjmp to the cpu's pause stack
-*/
-PRInt32 _PR_MD_PAUSE_CPU( PRIntervalTime ticks)
-{
- PRThread *me = _MD_CURRENT_THREAD();
- struct timeval timeout, *tvp;
- fd_set r, w, e;
- fd_set *rp, *wp, *ep;
- PRInt32 max_osfd, nfd;
- PRInt32 rv;
- PRCList *q;
- PRUint32 min_timeout;
-
- PR_ASSERT(_PR_MD_GET_INTSOFF() != 0);
-
- /*
- * assigment of fd_sets
- */
- r = _PR_FD_READ_SET(me->cpu);
- w = _PR_FD_WRITE_SET(me->cpu);
- e = _PR_FD_EXCEPTION_SET(me->cpu);
-
- rp = &r;
- wp = &w;
- ep = &e;
-
- max_osfd = _PR_IOQ_MAX_OSFD(me->cpu) + 1;
- min_timeout = _PR_IOQ_TIMEOUT(me->cpu);
- /*
- ** Compute the minimum timeout value: make it the smaller of the
- ** timeouts specified by the i/o pollers or the timeout of the first
- ** sleeping thread.
- */
- q = _PR_SLEEPQ(me->cpu).next;
-
- if (q != &_PR_SLEEPQ(me->cpu)) {
- PRThread *t = _PR_THREAD_PTR(q);
-
- if (t->sleep < min_timeout) {
- min_timeout = t->sleep;
- }
- }
- if (min_timeout > ticks) {
- min_timeout = ticks;
- }
-
- if (min_timeout == PR_INTERVAL_NO_TIMEOUT) {
- tvp = NULL;
- } else {
- timeout.tv_sec = PR_IntervalToSeconds(min_timeout);
- timeout.tv_usec = PR_IntervalToMicroseconds(min_timeout)
- % PR_USEC_PER_SEC;
- tvp = &timeout;
- }
-
- _PR_MD_IOQ_UNLOCK();
- _MD_CHECK_FOR_EXIT();
- /*
- * check for i/o operations
- */
-
- nfd = _MD_SELECT(max_osfd, rp, wp, ep, tvp);
-
- _MD_CHECK_FOR_EXIT();
- _PR_MD_IOQ_LOCK();
- /*
- ** Notify monitors that are associated with the selected descriptors.
- */
- if (nfd > 0) {
- q = _PR_IOQ(me->cpu).next;
- _PR_IOQ_MAX_OSFD(me->cpu) = -1;
- _PR_IOQ_TIMEOUT(me->cpu) = PR_INTERVAL_NO_TIMEOUT;
- while (q != &_PR_IOQ(me->cpu)) {
- PRPollQueue *pq = _PR_POLLQUEUE_PTR(q);
- PRBool notify = PR_FALSE;
- _PRWin16PollDesc *pds = pq->pds;
- _PRWin16PollDesc *epds = pds + pq->npds;
- PRInt32 pq_max_osfd = -1;
-
- q = q->next;
- for (; pds < epds; pds++) {
- PRInt32 osfd = pds->osfd;
- PRInt16 in_flags = pds->in_flags;
- PRInt16 out_flags = 0;
- PR_ASSERT(osfd >= 0 || in_flags == 0);
- if ((in_flags & PR_POLL_READ) && FD_ISSET(osfd, rp)) {
- out_flags |= PR_POLL_READ;
- }
- if ((in_flags & PR_POLL_WRITE) && FD_ISSET(osfd, wp)) {
- out_flags |= PR_POLL_WRITE;
- }
- if ((in_flags & PR_POLL_EXCEPT) && FD_ISSET(osfd, ep)) {
- out_flags |= PR_POLL_EXCEPT;
- }
- pds->out_flags = out_flags;
- if (out_flags) {
- notify = PR_TRUE;
- }
- if (osfd > pq_max_osfd) {
- pq_max_osfd = osfd;
- }
- }
- if (notify == PR_TRUE) {
- PRIntn pri;
- PRThread *thred;
-
- PR_REMOVE_LINK(&pq->links);
- pq->on_ioq = PR_FALSE;
-
- /*
- * Decrement the count of descriptors for each desciptor/event
- * because this I/O request is being removed from the
- * ioq
- */
- pds = pq->pds;
- for (; pds < epds; pds++) {
- PRInt32 osfd = pds->osfd;
- PRInt16 in_flags = pds->in_flags;
- PR_ASSERT(osfd >= 0 || in_flags == 0);
- if (in_flags & PR_POLL_READ) {
- if (--(_PR_FD_READ_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_READ_SET(me->cpu));
- }
- if (in_flags & PR_POLL_WRITE) {
- if (--(_PR_FD_WRITE_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_WRITE_SET(me->cpu));
- }
- if (in_flags & PR_POLL_EXCEPT) {
- if (--(_PR_FD_EXCEPTION_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_EXCEPTION_SET(me->cpu));
- }
- }
- thred = pq->thr;
- _PR_THREAD_LOCK(thred);
- if (pq->thr->flags & (_PR_ON_PAUSEQ|_PR_ON_SLEEPQ)) {
- _PRCPU *cpu = thred->cpu;
- _PR_SLEEPQ_LOCK(pq->thr->cpu);
- _PR_DEL_SLEEPQ(pq->thr, PR_TRUE);
- _PR_SLEEPQ_UNLOCK(pq->thr->cpu);
-
- pri = pq->thr->priority;
- pq->thr->state = _PR_RUNNABLE;
-
- pq->thr->cpu = cpu;
- _PR_RUNQ_LOCK(cpu);
- _PR_ADD_RUNQ(pq->thr, cpu, pri);
- _PR_RUNQ_UNLOCK(cpu);
- if (_pr_md_idle_cpus > 1)
- _PR_MD_WAKEUP_WAITER(thred);
- }
- _PR_THREAD_UNLOCK(thred);
- } else {
- if (pq->timeout < _PR_IOQ_TIMEOUT(me->cpu))
- _PR_IOQ_TIMEOUT(me->cpu) = pq->timeout;
- if (_PR_IOQ_MAX_OSFD(me->cpu) < pq_max_osfd)
- _PR_IOQ_MAX_OSFD(me->cpu) = pq_max_osfd;
- }
- }
- } else if (nfd < 0) {
- if ( WSAGetLastError() == WSAENOTSOCK )
- {
- FindBadFDs();
- } else {
- PR_LOG(_pr_io_lm, PR_LOG_MAX, ("select() failed with errno %d",
- errno));
- }
- }
- _PR_MD_IOQ_UNLOCK();
- return(0);
-
-} /* end _PR_MD_PAUSE_CPU() */
-
-
-/*
-** _MD_pr_poll() -- Implement MD polling
-**
-** The function was snatched (re-used) from the unix implementation.
-**
-** The native thread stuff was deleted.
-** The pollqueue is instantiated on the mdthread structure
-** to keep the stack frame from being corrupted when this
-** thread is waiting on the poll.
-**
-*/
-extern PRInt32
-_MD_PR_POLL(PRPollDesc *pds, PRIntn npds,
- PRIntervalTime timeout)
-{
- PRPollDesc *pd, *epd;
- PRInt32 n, err, pdcnt;
- PRIntn is;
- _PRWin16PollDesc *spds, *spd;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- PRPollQueue *pq;
-
- pq = &me->md.thr_pq;
-
- /*
- * XXX
- * PRPollDesc has a PRFileDesc field, fd, while the IOQ
- * is a list of PRPollQueue structures, each of which contains
- * a _PRWin16PollDesc. A _PRWin16PollDesc struct contains
- * the OS file descriptor, osfd, and not a PRFileDesc.
- * So, we have allocate memory for _PRWin16PollDesc structures,
- * copy the flags information from the pds list and have pq
- * point to this list of _PRWin16PollDesc structures.
- *
- * It would be better if the memory allocation can be avoided.
- */
-
- spds = (_PRWin16PollDesc*) PR_MALLOC(npds * sizeof(_PRWin16PollDesc));
- if (!spds) {
- PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
- return -1;
- }
- spd = spds;
-
- _PR_INTSOFF(is);
- _PR_MD_IOQ_LOCK();
- _PR_THREAD_LOCK(me);
-
- if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
- _PR_THREAD_UNLOCK(me);
- _PR_MD_IOQ_UNLOCK();
- PR_DELETE(spds);
- return -1;
- }
-
- pdcnt = 0;
- for (pd = pds, epd = pd + npds; pd < epd; pd++) {
- PRInt32 osfd;
- PRInt16 in_flags = pd->in_flags;
- PRFileDesc *bottom = pd->fd;
-
- if ((NULL == bottom) || (in_flags == 0)) {
- continue;
- }
- while (bottom->lower != NULL) {
- bottom = bottom->lower;
- }
- osfd = bottom->secret->md.osfd;
-
- PR_ASSERT(osfd >= 0 || in_flags == 0);
-
- spd->osfd = osfd;
- spd->in_flags = pd->in_flags;
- spd++;
- pdcnt++;
-
- if (in_flags & PR_POLL_READ) {
- FD_SET(osfd, &_PR_FD_READ_SET(me->cpu));
- _PR_FD_READ_CNT(me->cpu)[osfd]++;
- }
- if (in_flags & PR_POLL_WRITE) {
- FD_SET(osfd, &_PR_FD_WRITE_SET(me->cpu));
- (_PR_FD_WRITE_CNT(me->cpu))[osfd]++;
- }
- if (in_flags & PR_POLL_EXCEPT) {
- FD_SET(osfd, &_PR_FD_EXCEPTION_SET(me->cpu));
- (_PR_FD_EXCEPTION_CNT(me->cpu))[osfd]++;
- }
- if (osfd > _PR_IOQ_MAX_OSFD(me->cpu))
- _PR_IOQ_MAX_OSFD(me->cpu) = osfd;
- }
- if (timeout < _PR_IOQ_TIMEOUT(me->cpu))
- _PR_IOQ_TIMEOUT(me->cpu) = timeout;
-
-
- pq->pds = spds;
- pq->npds = pdcnt;
-
- pq->thr = me;
- pq->on_ioq = PR_TRUE;
- pq->timeout = timeout;
- _PR_ADD_TO_IOQ((*pq), me->cpu);
- _PR_SLEEPQ_LOCK(me->cpu);
- _PR_ADD_SLEEPQ(me, timeout);
- me->state = _PR_IO_WAIT;
- me->io_pending = PR_TRUE;
- me->io_suspended = PR_FALSE;
- _PR_SLEEPQ_UNLOCK(me->cpu);
- _PR_THREAD_UNLOCK(me);
- _PR_MD_IOQ_UNLOCK();
-
- _PR_MD_WAIT(me, timeout);
-
- me->io_pending = PR_FALSE;
- me->io_suspended = PR_FALSE;
-
- /*
- * Copy the out_flags from the _PRWin16PollDesc structures to the
- * user's PRPollDesc structures and free the allocated memory
- */
- spd = spds;
- for (pd = pds, epd = pd + npds; pd < epd; pd++) {
- if ((NULL == pd->fd) || (pd->in_flags == 0)) {
- pd->out_flags = 0;
- continue;
- }
- pd->out_flags = spd->out_flags;
- spd++;
- }
- PR_DELETE(spds);
-
- /*
- ** If we timed out the pollq might still be on the ioq. Remove it
- ** before continuing.
- */
- if (pq->on_ioq) {
- _PR_INTSOFF(is);
- _PR_MD_IOQ_LOCK();
- /*
- * Need to check pq.on_ioq again
- */
- if (pq->on_ioq == PR_TRUE) {
- PR_REMOVE_LINK(&pq->links);
- for (pd = pds, epd = pd + npds; pd < epd; pd++) {
- PRInt32 osfd;
- PRInt16 in_flags = pd->in_flags;
- PRFileDesc *bottom = pd->fd;
-
- if ((NULL == bottom) || (in_flags == 0)) {
- continue;
- }
- while (bottom->lower != NULL) {
- bottom = bottom->lower;
- }
- osfd = bottom->secret->md.osfd;
- PR_ASSERT(osfd >= 0 || in_flags == 0);
- if (in_flags & PR_POLL_READ) {
- if (--(_PR_FD_READ_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_READ_SET(me->cpu));
- }
- if (in_flags & PR_POLL_WRITE) {
- if (--(_PR_FD_WRITE_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_WRITE_SET(me->cpu));
- }
- if (in_flags & PR_POLL_EXCEPT) {
- if (--(_PR_FD_EXCEPTION_CNT(me->cpu))[osfd] == 0)
- FD_CLR(osfd, &_PR_FD_EXCEPTION_SET(me->cpu));
- }
- }
- }
- _PR_MD_IOQ_UNLOCK();
- _PR_INTSON(is);
- }
- if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
- return -1;
- } else {
- n = 0;
- if (pq->on_ioq == PR_FALSE) {
- /* Count the number of ready descriptors */
- while (--npds >= 0) {
- if (pds->out_flags) {
- n++;
- }
- pds++;
- }
- }
- return n;
- }
-} /* end _MD_pr_poll() */
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16stdio.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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 ***** */
-
-/*
-** w16stdio.c -- Callback functions for Win16 stdio read/write.
-**
-**
-*/
-#include "primpl.h"
-
-/*
-** _PL_MDStdioWrite() -- Win16 hackery to get console output
-**
-** Returns: number of bytes written.
-**
-*/
-PRInt32
-_PL_W16StdioWrite( void *buf, PRInt32 amount )
-{
- int rc;
-
- rc = fputs( buf, stdout );
- if ( rc == EOF )
- {
- // something about errno
- return(PR_FAILURE);
- }
- return( strlen(buf));
-} /* end _PL_fputs() */
-
-/*
-** _PL_W16StdioRead() -- Win16 hackery to get console input
-**
-*/
-PRInt32
-_PL_W16StdioRead( void *buf, PRInt32 amount )
-{
- char *bp;
-
- bp = fgets( buf, (int) amount, stdin );
- if ( bp == NULL )
- {
- // something about errno
- return(PR_FAILURE);
- }
-
- return( strlen(buf));
-} /* end _PL_fgets() */
-/* --- end w16stdio.c --- */
-
-/*
-** Wrappers, linked into the client, that call
-** functions in LibC
-**
-*/
-
-/*
-** _PL_W16CallBackPuts() -- Wrapper for puts()
-**
-*/
-int PR_CALLBACK _PL_W16CallBackPuts( const char *outputString )
-{
- return( puts( outputString ));
-} /* end _PL_W16CallBackPuts() */
-
-/*
-** _PL_W16CallBackStrftime() -- Wrapper for strftime()
-**
-*/
-size_t PR_CALLBACK _PL_W16CallBackStrftime(
- char *s,
- size_t len,
- const char *fmt,
- const struct tm *p )
-{
- return( strftime( s, len, fmt, p ));
-} /* end _PL_W16CallBackStrftime() */
-
-/*
-** _PL_W16CallBackMalloc() -- Wrapper for malloc()
-**
-*/
-void * PR_CALLBACK _PL_W16CallBackMalloc( size_t size )
-{
- return( malloc( size ));
-} /* end _PL_W16CallBackMalloc() */
-
-/*
-** _PL_W16CallBackCalloc() -- Wrapper for calloc()
-**
-*/
-void * PR_CALLBACK _PL_W16CallBackCalloc( size_t n, size_t size )
-{
- return( calloc( n, size ));
-} /* end _PL_W16CallBackCalloc() */
-
-/*
-** _PL_W16CallBackRealloc() -- Wrapper for realloc()
-**
-*/
-void * PR_CALLBACK _PL_W16CallBackRealloc(
- void *old_blk,
- size_t size )
-{
- return( realloc( old_blk, size ));
-} /* end _PL_W16CallBackRealloc() */
-
-/*
-** _PL_W16CallBackFree() -- Wrapper for free()
-**
-*/
-void PR_CALLBACK _PL_W16CallBackFree( void *ptr )
-{
- free( ptr );
- return;
-} /* end _PL_W16CallBackFree() */
-
-/*
-** _PL_W16CallBackGetenv() -- Wrapper for getenv()
-**
-*/
-void * PR_CALLBACK _PL_W16CallBackGetenv( const char *name )
-{
- return( getenv( name ));
-} /* end _PL_W16CallBackGetenv */
-
-
-/*
-** _PL_W16CallBackPutenv() -- Wrapper for putenv()
-**
-*/
-int PR_CALLBACK _PL_W16CallBackPutenv( const char *assoc )
-{
- return( putenv( assoc ));
-} /* end _PL_W16CallBackGetenv */
deleted file mode 100644
--- a/nsprpub/pr/src/md/windows/w16thred.c
+++ /dev/null
@@ -1,426 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** 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 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
- * 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"
-#include <sys/timeb.h>
-#include <stdio.h>
-
-/*
-** DispatchTrace -- define a thread dispatch trace entry
-**
-** The DispatchTrace oject(s) are instantiated in a single
-** array. Think of the array as a push-down stack; entry
-** zero is the most recent, entry one the next most recent, etc.
-** For each time PR_MD_RESTORE_CONTEXT() is called, the array
-** is Pushed down and entry zero is overwritten with data
-** for the newly dispatched thread.
-**
-** Function TraceDispatch() manages the DispatchTrace array.
-**
-*/
-typedef struct DispatchTrace
-{
- PRThread * thread;
- PRUint32 state;
- PRInt16 mdThreadNumber;
- PRInt16 unused;
- PRThreadPriority priority;
-
-} DispatchTrace, *DispatchTracePtr ;
-
-static void TraceDispatch( PRThread *thread );
-
-
-PRThread *_pr_primordialThread;
-
-/*
-** Note: the static variables must be on the data-segment because
-** the stack is destroyed during shadow-stack copy operations.
-**
-*/
-static char * pSource; /* ptr to sourc of a "shadow-stack" copy */
-static char * pTarget; /* ptr to target of a "shadow-stack" copy */
-static int cxByteCount; /* number of bytes for "shadow-stack" copy */
-static int bytesMoved; /* instrumentation: WRT "shadow-stack" copy */
-static FILE * file1 = 0; /* instrumentation: WRT debug */
-
-#define NUM_DISPATCHTRACE_OBJECTS 24
-static DispatchTrace dt[NUM_DISPATCHTRACE_OBJECTS] = {0}; /* instrumentation: WRT dispatch */
-static PRUint32 dispatchCount = 0; /* instrumentation: number of thread dispatches */
-
-static int OldPriorityOfPrimaryThread = -1;
-static int TimeSlicesOnNonPrimaryThread = 0;
-static PRUint32 threadNumber = 1; /* Instrumentation: monotonically increasing number */
-
-
-
-/*
-** _PR_MD_FINAL_INIT() -- Final MD Initialization
-**
-** Poultry Problems! ... The stack, as allocated by PR_NewStack()
-** is called from here, late in initialization, because PR_NewStack()
-** requires lots of things working. When some elements of the
-** primordial thread are created, early in initialization, the
-** shadow stack is not one of these things. The "shadow stack" is
-** created here, late in initiailization using PR_NewStack(), to
-** ensure consistency in creation of the related objects.
-**
-** A new ThreadStack, and all its affiliated structures, is allocated
-** via the call to PR_NewStack(). The PRThread structure in the
-** new stack is ignored; the old PRThread structure is used (why?).
-** The old PRThreadStack structure is abandoned.
-**
-*/
-void
-_PR_MD_FINAL_INIT()
-{
- PRThreadStack * stack = 0;
- PRInt32 stacksize = 0;
- PRThread * me = _PR_MD_CURRENT_THREAD();
-
- _PR_ADJUST_STACKSIZE( stacksize );
- stack = _PR_NewStack( stacksize );
-
- me->stack = stack;
- stack->thr = me;
-
- return;
-} /* --- end _PR_MD_FINAL_INIT() --- */
-
-
-void
-_MD_INIT_RUNNING_CPU( struct _PRCPU *cpu )
-{
- PR_INIT_CLIST(&(cpu->md.ioQ));
- cpu->md.ioq_max_osfd = -1;
- cpu->md.ioq_timeout = PR_INTERVAL_NO_TIMEOUT;
-}
-
-
-void
-_PR_MD_YIELD( void )
-{
- PR_ASSERT(0);
-}
-
-/*
-** _PR_MD_INIT_STACK() -- Win16 specific Stack initialization.
-**
-**
-*/
-
-void
-_PR_MD_INIT_STACK( PRThreadStack *ts, PRIntn redzone )
-{
- ts->md.stackTop = ts->stackTop - sizeof(PRThread);
- ts->md.cxByteCount = 0;
-
- return;
-} /* --- end _PR_MD_INIT_STACK() --- */
-
-/*
-** _PR_MD_INIT_THREAD() -- Win16 specific Thread initialization.
-**
-*/
-PRStatus
-_PR_MD_INIT_THREAD(PRThread *thread)
-{
- if ( thread->flags & _PR_PRIMORDIAL)
- {
- _pr_primordialThread = thread;
- thread->md.threadNumber = 1;
- }
- else
- {
- thread->md.threadNumber = ++threadNumber;
- }
-
- thread->md.magic = _MD_MAGIC_THREAD;
- strcpy( thread->md.guardBand, "GuardBand" );
-
- return PR_SUCCESS;
-}
-
-
-PRStatus
-_PR_MD_WAIT(PRThread *thread, PRIntervalTime ticks)
-{
- _MD_SWITCH_CONTEXT( thread );
-
- return( PR_SUCCESS );
-}
-
-void *PR_W16GetExceptionContext(void)
-{
- return _MD_CURRENT_THREAD()->md.exceptionContext;
-}
-
-void
-PR_W16SetExceptionContext(void *context)
-{
- _MD_CURRENT_THREAD()->md.exceptionContext = context;
-}
-
-
-
-
-/*
-** _MD_RESTORE_CONTEXT() -- Resume execution of thread 't'.
-**
-** Win16 threading is based on the NSPR 2.0 general model of
-** user threads. It differs from the general model in that a
-** single "real" stack segment is used for execution of all
-** threads. The context of the suspended threads is preserved
-** in the md.context [and related members] of the PRThread
-** structure. The stack context of the suspended thread is
-** preserved in a "shadow stack" object.
-**
-** _MD_RESTORE_CONTEXT() implements most of the thread switching
-** for NSPR's implementation of Win16 theads.
-**
-** Operations Notes:
-**
-** Function PR_NewStack() in prustack.c allocates a new
-** PRThreadStack, PRStack, PRSegment, and a "shadow" stack
-** for a thread. These structures are wired together to
-** form the basis of Win16 threads. The thread and shadow
-** stack structures are created as part of PR_CreateThread().
-**
-** Note! Some special "magic" is applied to the "primordial"
-** thread. The physical layout of the PRThread, PRThreadStack,
-** shadow stack, ... is somewhat different. Watch yourself when
-** mucking around with it. ... See _PR_MD_FINAL_INIT() for most
-** of the special treatment of the primordial thread.
-**
-** Function _PR_MD_INIT_STACK() initializes the value of
-** PRThreadStack member md.cxByteCount to zero; there
-** is no context to be restored for a thread's initial
-** dispatch. The value of member md.stackTop is set to
-** point to the highest usable address on the shadow stack.
-** This point corresponds to _pr_top_of_task_stack on the
-** system's operating stack.
-**
-** _pr_top_of_task_stack points to a place on the system stack
-** considered to be "close to the top". Stack context is preserved
-** relative to this point.
-**
-** Reminder: In x86 architecture, the stack grows "down".
-** That is: the stack pointer (SP register) is decremented
-** to push objects onto the stack or when a call is made.
-**
-** Function _PR_MD_WAIT() invokes macro _MD_SWITCH_CONTEXT();
-** this causes the hardware registers to be preserved in a
-** CATCHBUF structure using function Catch() [see _win16.h],
-** then calls PR_Schedule() to select a new thread for dispatch.
-** PR_Schedule() calls _MD_RESTORE_CONTEXT() to cause the thread
-** being suspended's stack to be preserved, to restore the
-** stack of the to-be-dispactched thread, and to restore the
-** to-be-dispactched thread's hardware registers.
-**
-** At the moment _PR_MD_RESTORE_CONTEXT() is called, the stack
-** pointer (SP) is less than the reference pointer
-** _pr_top_of_task_stack. The distance difference between the SP and
-** _pr_top_of_task_stack is the amount of stack that must be preserved.
-** This value, cxByteCount, is calculated then preserved in the
-** PRThreadStack.md.cxByteCount for later use (size of stack
-** context to restore) when this thread is dispatched again.
-**
-** A C language for() loop is used to copy, byte-by-byte, the
-** stack data being preserved starting at the "address of t"
-** [Note: 't' is the argument passed to _PR_MD_RESTORE_CONTEXT()]
-** for the length of cxByteCount.
-**
-** variables pSource and pTarget are the calculated source and
-** destination pointers for the stack copy operation. These
-** variables are static scope because they cannot be instantiated
-** on the stack itself, since the stack is clobbered by restoring
-** the to-be-dispatched thread's stack context.
-**
-** After preserving the suspended thread's stack and architectural
-** context, the to-be-dispatched thread's stack context is copied
-** from its shadow stack to the system operational stack. The copy
-** is done in a small fragment of in-line assembly language. Note:
-** In NSPR 1.0, a while() loop was used to do the copy; when compiled
-** with the MS C 1.52c compiler, the short while loop used no
-** stack variables. The Watcom compiler, specified for use on NSPR 2.0,
-** uses stack variables to implement the same while loop. This is
-** a no-no! The copy operation clobbers these variables making the
-** results of the copy ... unpredictable ... So, a short piece of
-** inline assembly language is used to effect the copy.
-**
-** Following the restoration of the to-be-dispatched thread's
-** stack context, another short inline piece of assemble language
-** is used to set the SP register to correspond to what it was
-** when the to-be-dispatched thread was suspended. This value
-** uses the thread's stack->md.cxByteCount as a negative offset
-** from _pr_top_of_task_stack as the new value of SP.
-**
-** Finally, Function Throw() is called to restore the architectural
-** context of the to-be-dispatched thread.
-**
-** At this point, the newly dispatched thread appears to resume
-** execution following the _PR_MD_SWITCH_CONTEXT() macro.
-**
-** OK, this ain't rocket-science, but it can confuse you easily.
-** If you have to work on this stuff, please take the time to
-** draw, on paper, the structures (PRThread, PRThreadStack,
-** PRSegment, the "shadow stack", the system stack and the related
-** global variables). Hand step it thru the debugger to make sure
-** you understand it very well before making any changes. ...
-** YMMV.
-**
-*/
-void _MD_RESTORE_CONTEXT(PRThread *t)
-{
- dispatchCount++;
- TraceDispatch( t );
- /*
- ** This is a good opportunity to make sure that the main
- ** mozilla thread actually gets some time. If interrupts
- ** are on, then we know it is safe to check if the main
- ** thread is being starved. If moz has not been scheduled
- ** for a long time, then then temporarily bump the fe priority
- ** up so that it gets to run at least one.
- */
-// #if 0 // lth. condition off for debug.
- if (_pr_primordialThread == t) {
- if (OldPriorityOfPrimaryThread != -1) {
- PR_SetThreadPriority(_pr_primordialThread, OldPriorityOfPrimaryThread);
- OldPriorityOfPrimaryThread = -1;
- }
- TimeSlicesOnNonPrimaryThread = 0;
- } else {
- TimeSlicesOnNonPrimaryThread++;
- }
-
- if ((TimeSlicesOnNonPrimaryThread >= 20) && (OldPriorityOfPrimaryThread == -1)) {
- OldPriorityOfPrimaryThread = PR_GetThreadPriority(_pr_primordialThread);
- PR_SetThreadPriority(_pr_primordialThread, 31);
- TimeSlicesOnNonPrimaryThread = 0;
- }
-// #endif
- /*
- ** Save the Task Stack into the "shadow stack" of the current thread
- */
- cxByteCount = (int) ((PRUint32) _pr_top_of_task_stack - (PRUint32) &t );
- pSource = (char *) &t;
- pTarget = (char *)((PRUint32)_pr_currentThread->stack->md.stackTop
- - (PRUint32)cxByteCount );
- _pr_currentThread->stack->md.cxByteCount = cxByteCount;
-
- for( bytesMoved = 0; bytesMoved < cxByteCount; bytesMoved++ )
- *(pTarget + bytesMoved ) = *(pSource + bytesMoved );
-
- /* Mark the new thread as the current thread */
- _pr_currentThread = t;
-
- /*
- ** Now copy the "shadow stack" of the new thread into the Task Stack
- **
- ** REMEMBER:
- ** After the stack has been copied, ALL local variables in this function
- ** are invalid !!
- */
- cxByteCount = t->stack->md.cxByteCount;
- pSource = t->stack->md.stackTop - cxByteCount;
- pTarget = _pr_top_of_task_stack - cxByteCount;
-
- errno = (_pr_currentThread)->md.errcode;
-
- __asm
- {
- mov cx, cxByteCount
- mov si, WORD PTR [pSource]
- mov di, WORD PTR [pTarget]
- mov ax, WORD PTR [pTarget + 2]
- mov es, ax
- mov ax, WORD PTR [pSource + 2]
- mov bx, ds
- mov ds, ax
- rep movsb
- mov ds, bx
- }
-
- /*
- ** IMPORTANT:
- ** ----------
- ** SS:SP is now invalid :-( This means that all local variables and
- ** function arguments are invalid and NO function calls can be
- ** made !!! We must fix up SS:SP so that function calls can safely
- ** be made...
- */
-
- __asm {
- mov ax, WORD PTR [_pr_top_of_task_stack]
- sub ax, cxByteCount
- mov sp, ax
- };
-
- /*
- ** Resume execution of thread: t by restoring the thread's context.
- **
- */
- Throw((_pr_currentThread)->md.context, 1);
-} /* --- end MD_RESTORE_CONTEXT() --- */
-
-
-static void TraceDispatch( PRThread *thread )
-{
- int i;
-
- /*
- ** push all DispatchTrace objects to down one slot.
- ** Note: the last entry is lost; last-1 becomes last, etc.
- */
- for( i = NUM_DISPATCHTRACE_OBJECTS -2; i >= 0; i-- )
- {
- dt[i +1] = dt[i];
- }
-
- /*
- ** Build dt[0] from t
- */
- dt->thread = thread;
- dt->state = thread->state;
- dt->mdThreadNumber = thread->md.threadNumber;
- dt->priority = thread->priority;
-
- return;
-} /* --- end TraceDispatch() --- */
-
-
-/* $$ end W16thred.c */
--- a/nsprpub/pr/src/misc/prdtoa.c
+++ b/nsprpub/pr/src/misc/prdtoa.c
@@ -30,16 +30,26 @@
* 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 ***** */
+/*
+ * This file is based on the third-party code dtoa.c. We minimize our
+ * modifications to third-party code to make it easy to merge new versions.
+ * The author of dtoa.c was not willing to add the parentheses suggested by
+ * GCC, so we suppress these warnings.
+ */
+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+#pragma GCC diagnostic ignored "-Wparentheses"
+#endif
+
#include "primpl.h"
#define MULTIPLE_THREADS
#define ACQUIRE_DTOA_LOCK(n) PR_Lock(dtoa_lock[n])
#define FREE_DTOA_LOCK(n) PR_Unlock(dtoa_lock[n])
static PRLock *dtoa_lock[2];
@@ -212,21 +222,16 @@ void _PR_CleanupDtoa(void)
* You must also invoke freedtoa(s) to free the value s returned by
* dtoa. You may do so whether or not MULTIPLE_THREADS is #defined.
* #define NO_IEEE_Scale to disable new (Feb. 1997) logic in strtod that
* avoids underflows on inputs whose result does not underflow.
* If you #define NO_IEEE_Scale on a machine that uses IEEE-format
* floating-point numbers and flushes underflows to zero rather
* than implementing gradual underflow, then you must also #define
* Sudden_Underflow.
- * #define YES_ALIAS to permit aliasing certain double values with
- * arrays of ULongs. This leads to slightly better code with
- * some compilers and was always used prior to 19990916, but it
- * is not strictly legal and can cause trouble with aggressively
- * optimizing compilers (e.g., gcc 2.95.1 under -O2).
* #define USE_LOCALE to use the current locale's decimal_point value.
* #define SET_INEXACT if IEEE arithmetic is being used and extra
* computation should be done to set the inexact flag when the
* result is inexact and avoid setting inexact when the result
* is exact. In this case, dtoa.c must be compiled in
* an environment, perhaps provided by #include "dtoa.c" in a
* suitable wrapper, that defines two functions,
* int get_inexact(void);
@@ -353,34 +358,23 @@ extern "C" {
#endif
#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(IEEE_ARM) + defined(VAX) + defined(IBM) != 1
Exactly one of IEEE_8087, IEEE_MC68k, IEEE_ARM, VAX, or IBM should be defined.
#endif
typedef union { double d; ULong L[2]; } U;
-#ifdef YES_ALIAS
-#define dval(x) x
+#define dval(x) (x).d
#ifdef IEEE_8087
-#define word0(x) ((ULong *)&x)[1]
-#define word1(x) ((ULong *)&x)[0]
+#define word0(x) (x).L[1]
+#define word1(x) (x).L[0]
#else
-#define word0(x) ((ULong *)&x)[0]
-#define word1(x) ((ULong *)&x)[1]
-#endif
-#else
-#ifdef IEEE_8087
-#define word0(x) ((U*)&x)->L[1]
-#define word1(x) ((U*)&x)->L[0]
-#else
-#define word0(x) ((U*)&x)->L[0]
-#define word1(x) ((U*)&x)->L[1]
-#endif
-#define dval(x) ((U*)&x)->d
+#define word0(x) (x).L[0]
+#define word1(x) (x).L[1]
#endif
/* The following definition of Storeinc is appropriate for MIPS processors.
* An alternative that might be better on some machines is
* #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
*/
#if defined(IEEE_8087) + defined(IEEE_ARM) + defined(VAX)
#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
@@ -1179,24 +1173,25 @@ diff
wa--;
c->wds = wa;
return c;
}
static double
ulp
#ifdef KR_headers
- (x) double x;
+ (dx) double dx;
#else
- (double x)
+ (double dx)
#endif
{
register Long L;
- double a;
+ U x, a;
+ dval(x) = dx;
L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
#ifndef Avoid_Underflow
#ifndef Sudden_Underflow
if (L > 0) {
#endif
#endif
#ifdef IBM
L |= Exp_msk1 >> 4;
@@ -1228,17 +1223,17 @@ b2d
#ifdef KR_headers
(a, e) Bigint *a; int *e;
#else
(Bigint *a, int *e)
#endif
{
ULong *xa, *xa0, w, y, z;
int k;
- double d;
+ U d;
#ifdef VAX
ULong d0, d1;
#else
#define d0 word0(d)
#define d1 word1(d)
#endif
xa0 = a->x;
@@ -1291,29 +1286,34 @@ b2d
#undef d1
#endif
return dval(d);
}
static Bigint *
d2b
#ifdef KR_headers
- (d, e, bits) double d; int *e, *bits;
+ (dd, e, bits) double dd; int *e, *bits;
#else
- (double d, int *e, int *bits)
+ (double dd, int *e, int *bits)
#endif
{
+ U d;
Bigint *b;
int de, k;
ULong *x, y, z;
#ifndef Sudden_Underflow
int i;
#endif
#ifdef VAX
ULong d0, d1;
+#endif
+
+ dval(d) = dd;
+#ifdef VAX
d0 = word0(d) >> 16 | word0(d) << 16;
d1 = word1(d) >> 16 | word1(d) << 16;
#else
#define d0 word0(d)
#define d1 word1(d)
#endif
#ifdef Pack_32
@@ -1434,17 +1434,17 @@ d2b
static double
ratio
#ifdef KR_headers
(a, b) Bigint *a, *b;
#else
(Bigint *a, Bigint *b)
#endif
{
- double da, db;
+ U da, db;
int k, ka, kb;
dval(da) = b2d(a, &ka);
dval(db) = b2d(b, &kb);
#ifdef Pack_32
k = ka - kb + 32*(a->wds - b->wds);
#else
k = ka - kb + 16*(a->wds - b->wds);
@@ -1608,17 +1608,18 @@ PR_strtod
#endif
{
#ifdef Avoid_Underflow
int scale;
#endif
int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign,
e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
CONST char *s, *s0, *s1;
- double aadj, aadj1, adj, rv, rv0;
+ double aadj, aadj1, adj;
+ U aadj2, rv, rv0;
Long L;
ULong y, z;
Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
#ifdef SET_INEXACT
int inexact, oldinexact;
#endif
#ifdef Honor_FLT_ROUNDS
int rounding;
@@ -2371,17 +2372,19 @@ PR_strtod
#ifdef Avoid_Underflow
if (scale && y <= 2*P*Exp_msk1) {
if (aadj <= 0x7fffffff) {
if ((z = aadj) <= 0)
z = 1;
aadj = z;
aadj1 = dsign ? aadj : -aadj;
}
- word0(aadj1) += (2*P+1)*Exp_msk1 - y;
+ dval(aadj2) = aadj1;
+ word0(aadj2) += (2*P+1)*Exp_msk1 - y;
+ aadj1 = dval(aadj2);
}
adj = aadj1 * ulp(dval(rv));
dval(rv) += adj;
#else
#ifdef Sudden_Underflow
if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
dval(rv0) = dval(rv);
word0(rv) += P*Exp_msk1;
@@ -2706,20 +2709,20 @@ freedtoa(char *s)
* "uniformly" distributed input, the probability is
* something like 10^(k-15) that we must resort to the Long
* calculation.
*/
static char *
dtoa
#ifdef KR_headers
- (d, mode, ndigits, decpt, sign, rve)
- double d; int mode, ndigits, *decpt, *sign; char **rve;
+ (dd, mode, ndigits, decpt, sign, rve)
+ double dd; int mode, ndigits, *decpt, *sign; char **rve;
#else
- (double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
+ (double dd, int mode, int ndigits, int *decpt, int *sign, char **rve)
#endif
{
/* Arguments ndigits, decpt, sign are similar to those
of ecvt and fcvt; trailing zeros are suppressed from
the returned string. If not null, *rve is set to point
to the end of the return value. If d is +-Infinity or NaN,
then *decpt is set to 9999.
@@ -2755,32 +2758,34 @@ dtoa
j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
spec_case, try_quick;
Long L;
#ifndef Sudden_Underflow
int denorm;
ULong x;
#endif
Bigint *b, *b1, *delta, *mlo, *mhi, *S;
- double d2, ds, eps;
+ U d, d2, eps;
+ double ds;
char *s, *s0;
#ifdef Honor_FLT_ROUNDS
int rounding;
#endif
#ifdef SET_INEXACT
int inexact, oldinexact;
#endif
#ifndef MULTIPLE_THREADS
if (dtoa_result) {
freedtoa(dtoa_result);
dtoa_result = 0;
}
#endif
+ dval(d) = dd;
if (word0(d) & Sign_bit) {
/* set sign for everything, including 0's and NaNs */
*sign = 1;
word0(d) &= ~Sign_bit; /* clear sign bit */
}
else
*sign = 0;
@@ -3351,17 +3356,19 @@ dtoa
if (s == s0) {
k++;
*s++ = '1';
goto ret;
}
++*s++;
}
else {
+#ifdef Honor_FLT_ROUNDS
trimzeros:
+#endif
while(*--s == '0');
s++;
}
ret:
Bfree(S);
if (mhi) {
if (mlo && mlo != mhi)
Bfree(mlo);
@@ -3430,23 +3437,25 @@ PR_dtoa(PRFloat64 d, PRIntn mode, PRIntn
** This should be reparameterized so that you can send in a
** prcn for the positive and negative ranges. For now,
** conform to the ECMA JavaScript spec which says numbers
** less than 1e-6 are in scientific notation.
** Also, the ECMA spec says that there should always be a
** '+' or '-' after the 'e' in scientific notation
*/
PR_IMPLEMENT(void)
-PR_cnvtf(char *buf,int bufsz, int prcsn,double fval)
+PR_cnvtf(char *buf, int bufsz, int prcsn, double dfval)
{
PRIntn decpt, sign, numdigits;
char *num, *nump;
char *bufp = buf;
char *endnum;
+ U fval;
+ dval(fval) = dfval;
/* If anything fails, we store an empty string in 'buf' */
num = (char*)PR_MALLOC(bufsz);
if (num == NULL) {
buf[0] = '\0';
return;
}
/* XXX Why use mode 1? */
if (PR_dtoa(dval(fval),1,prcsn,&decpt,&sign,&endnum,num,bufsz)
--- a/nsprpub/pr/src/misc/prlong.c
+++ b/nsprpub/pr/src/misc/prlong.c
@@ -37,31 +37,20 @@
#include "primpl.h"
static PRInt64 ll_zero = LL_INIT( 0x00000000,0x00000000 );
static PRInt64 ll_maxint = LL_INIT( 0x7fffffff, 0xffffffff );
static PRInt64 ll_minint = LL_INIT( 0x80000000, 0x00000000 );
static PRUint64 ll_maxuint = LL_INIT( 0xffffffff, 0xffffffff );
-#if defined(HAVE_WATCOM_BUG_2)
-PRInt64 __pascal __loadds __export
- LL_Zero(void) { return ll_zero; }
-PRInt64 __pascal __loadds __export
- LL_MaxInt(void) { return ll_maxint; }
-PRInt64 __pascal __loadds __export
- LL_MinInt(void) { return ll_minint; }
-PRUint64 __pascal __loadds __export
- LL_MaxUint(void) { return ll_maxuint; }
-#else
PR_IMPLEMENT(PRInt64) LL_Zero(void) { return ll_zero; }
PR_IMPLEMENT(PRInt64) LL_MaxInt(void) { return ll_maxint; }
PR_IMPLEMENT(PRInt64) LL_MinInt(void) { return ll_minint; }
PR_IMPLEMENT(PRUint64) LL_MaxUint(void) { return ll_maxuint; }
-#endif
#ifndef HAVE_LONG_LONG
/*
** Divide 64-bit a by 32-bit b, which must be normalized so its high bit is 1.
*/
static void norm_udivmod32(PRUint32 *qp, PRUint32 *rp, PRUint64 a, PRUint32 b)
{
PRUint32 d1, d0, q1, q0;
--- a/nsprpub/pr/src/misc/prtime.c
+++ b/nsprpub/pr/src/misc/prtime.c
@@ -45,20 +45,18 @@
#include "prinit.h"
#include "prtime.h"
#include "prlock.h"
#include "prprf.h"
#include "prlog.h"
#include <string.h>
#include <ctype.h>
-
-#ifdef XP_MAC
+#include <errno.h> /* for EINVAL */
#include <time.h>
-#endif
/*
* The COUNT_LEAPS macro counts the number of leap years passed by
* till the start of the given year Y. At the start of the year 4
* A.D. the number of leap years passed by is 0, while at the start of
* the year 5 A.D. this count is 1. The number of years divisible by
* 100 but not divisible by 400 (the non-leap years) is deducted from
* the count to get the correct number of leap years.
@@ -160,30 +158,30 @@ ComputeGMT(PRTime time, PRExplodedTime *
/* Compute day of week. Epoch started on a Thursday. */
gmt->tm_wday = (numDays + 4) % 7;
if (gmt->tm_wday < 0) {
gmt->tm_wday += 7;
}
/* Compute the time of day. */
-
+
gmt->tm_hour = rem / 3600;
rem %= 3600;
gmt->tm_min = rem / 60;
gmt->tm_sec = rem % 60;
/*
* Compute the year by finding the 400 year period, then working
* down from there.
*
* Since numDays is originally the number of days since January 1, 1970,
* we must change it to be the number of days from January 1, 0001.
*/
-
+
numDays += 719162; /* 719162 = days from year 1 up to 1970 */
tmp = numDays / 146097; /* 146097 = days in 400 years */
rem = numDays % 146097;
gmt->tm_year = tmp * 400 + 1;
/* Compute the 100 year period. */
tmp = rem / 36524; /* 36524 = days in 100 years */
@@ -194,17 +192,17 @@ ComputeGMT(PRTime time, PRExplodedTime *
}
gmt->tm_year += tmp * 100;
/* Compute the 4 year period. */
tmp = rem / 1461; /* 1461 = days in 4 years */
rem %= 1461;
gmt->tm_year += tmp * 4;
-
+
/* Compute which year in the 4. */
tmp = rem / 365;
rem %= 365;
if (tmp == 4) { /* the 4th year is a leap year */
tmp = 3;
rem = 365;
}
@@ -254,21 +252,17 @@ PR_ExplodeTime(
*
* PR_ImplodeTime --
*
* Cf. time_t mktime(struct tm *tp)
* Note that 1 year has < 2^25 seconds. So an PRInt32 is large enough.
*
*------------------------------------------------------------------------
*/
-#if defined(HAVE_WATCOM_BUG_2)
-PRTime __pascal __export __loadds
-#else
PR_IMPLEMENT(PRTime)
-#endif
PR_ImplodeTime(const PRExplodedTime *exploded)
{
PRExplodedTime copy;
PRTime retVal;
PRInt64 secPerDay, usecPerSec;
PRInt64 temp;
PRInt64 numSecs64;
PRInt32 numDays;
@@ -508,18 +502,16 @@ PR_NormalizeTime(PRExplodedTime *time, P
* The following uses localtime() from the standard C library.
* (time.h) This is our fallback implementation. Unix and PC
* use this version. Mac has its own machine-dependent
* implementation of this function.
*
*-------------------------------------------------------------------------
*/
-#include <time.h>
-
#if defined(HAVE_INT_LOCALTIME_R)
/*
* In this case we could define the macro as
* #define MT_safe_localtime(timer, result) \
* (localtime_r(timer, result) == 0 ? result : NULL)
* I chose to compare the return value of localtime_r with -1 so
* that I can catch the cases where localtime_r returns a pointer
@@ -1562,16 +1554,22 @@ PR_ParseTimeStringToExplodedTime(
if (date != -1)
result->tm_mday = date;
if (month != TT_UNKNOWN)
result->tm_month = (((int)month) - ((int)TT_JAN));
if (year != -1)
result->tm_year = year;
if (dotw != TT_UNKNOWN)
result->tm_wday = (((int)dotw) - ((int)TT_SUN));
+ /*
+ * Mainly to compute wday and yday, but normalized time is also required
+ * by the check below that works around a Visual C++ 2005 mktime problem.
+ */
+ PR_NormalizeTime(result, PR_GMTParameters);
+ /* The remaining work is to set the gmt and dst offsets in tm_params. */
if (zone == TT_UNKNOWN && default_to_gmt)
{
/* No zone was specified, so pretend the zone was GMT. */
zone = TT_GMT;
zone_offset = 0;
}
@@ -1611,17 +1609,42 @@ PR_ParseTimeStringToExplodedTime(
localTime.tm_mday = result->tm_mday;
localTime.tm_mon = result->tm_month;
localTime.tm_year = result->tm_year - 1900;
/* Set this to -1 to tell mktime "I don't care". If you set
it to 0 or 1, you are making assertions about whether the
date you are handing it is in daylight savings mode or not;
and if you're wrong, it will "fix" it for you. */
localTime.tm_isdst = -1;
+
+#if _MSC_VER == 1400 /* 1400 = Visual C++ 2005 (8.0) */
+ /*
+ * mktime will return (time_t) -1 if the input is a date
+ * after 23:59:59, December 31, 3000, US Pacific Time (not
+ * UTC as documented):
+ * http://msdn.microsoft.com/en-us/library/d1y53h2a(VS.80).aspx
+ * But if the year is 3001, mktime also invokes the invalid
+ * parameter handler, causing the application to crash. This
+ * problem has been reported in
+ * http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=266036.
+ * We avoid this crash by not calling mktime if the date is
+ * out of range. To use a simple test that works in any time
+ * zone, we consider year 3000 out of range as well. (See
+ * bug 480740.)
+ */
+ if (result->tm_year >= 3000) {
+ /* Emulate what mktime would have done. */
+ errno = EINVAL;
+ secs = (time_t) -1;
+ } else {
+ secs = mktime(&localTime);
+ }
+#else
secs = mktime(&localTime);
+#endif
if (secs != (time_t) -1)
{
PRTime usecs64;
LL_I2L(usecs64, secs);
LL_I2L(usec_per_sec, PR_USEC_PER_SEC);
LL_MUL(usecs64, usecs64, usec_per_sec);
PR_ExplodeTime(usecs64, PR_LocalTimeParameters, result);
return PR_SUCCESS;
@@ -1633,18 +1656,16 @@ PR_ParseTimeStringToExplodedTime(
the zone offset on 00:00:00 2 Jan 1970 GMT. */
secs = 86400;
(void) MT_safe_localtime(&secs, &localTime);
zone_offset = localTime.tm_min
+ 60 * localTime.tm_hour
+ 1440 * (localTime.tm_mday - 2);
}
- /* mainly to compute wday and yday */
- PR_NormalizeTime(result, PR_GMTParameters);
result->tm_params.tp_gmt_offset = zone_offset * 60;
result->tm_params.tp_dst_offset = dst_offset * 60;
return PR_SUCCESS;
}
PR_IMPLEMENT(PRStatus)
PR_ParseTimeString(
--- a/nsprpub/pr/src/misc/prtrace.c
+++ b/nsprpub/pr/src/misc/prtrace.c
@@ -416,17 +416,17 @@ PR_IMPLEMENT(void)
PR_Unlock( logLock );
/*
** Gh0D! This is awful!
** Anyway, to minimize lost trace data segments,
** I inserted the PR_Sleep(0) to cause a context switch
** so that the log thread could run.
** I know, it perturbs the universe and may cause
** funny things to happen in the optimized builds.
- ** Take it out, loose data; leave it in risk Heisenberg.
+ ** Take it out, lose data; leave it in risk Heisenberg.
*/
/* PR_Sleep(0); */
}
return;
} /* end PR_Trace() */
/*
--- a/nsprpub/pr/src/nspr.def
+++ b/nsprpub/pr/src/nspr.def
@@ -464,8 +464,13 @@ EXPORTS ;-
;+NSPR_4.6 {
;+ global:
PR_GetPhysicalMemorySize;
;+} NSPR_4.5;
;+NSPR_4.7 {
;+ global:
PR_ParseTimeStringToExplodedTime;
;+} NSPR_4.6;
+;+NSPR_4.8 {
+;+ global:
+ PR_AssertCurrentThreadOwnsLock;
+ PR_AssertCurrentThreadInMonitor;
+;+} NSPR_4.7;
--- a/nsprpub/pr/src/pthreads/ptsynch.c
+++ b/nsprpub/pr/src/pthreads/ptsynch.c
@@ -203,18 +203,22 @@ PR_IMPLEMENT(void) PR_Lock(PRLock *lock)
{
PRIntn rv;
PR_ASSERT(lock != NULL);
rv = pthread_mutex_lock(&lock->mutex);
PR_ASSERT(0 == rv);
PR_ASSERT(0 == lock->notified.length);
PR_ASSERT(NULL == lock->notified.link);
PR_ASSERT(PR_FALSE == lock->locked);
+ /* Nb: the order of the next two statements is not critical to
+ * the correctness of PR_AssertCurrentThreadOwnsLock(), but
+ * this particular order makes the assertion more likely to
+ * catch errors. */
+ lock->owner = pthread_self();
lock->locked = PR_TRUE;
- lock->owner = pthread_self();
#if defined(DEBUG)
pt_debug.locks_acquired += 1;
#endif
} /* PR_Lock */
PR_IMPLEMENT(PRStatus) PR_Unlock(PRLock *lock)
{
PRIntn rv;
@@ -236,16 +240,24 @@ PR_IMPLEMENT(PRStatus) PR_Unlock(PRLock
else pt_PostNotifies(lock, PR_TRUE);
#if defined(DEBUG)
pt_debug.locks_released += 1;
#endif
return PR_SUCCESS;
} /* PR_Unlock */
+PR_IMPLEMENT(void) PR_AssertCurrentThreadOwnsLock(PRLock *lock)
+{
+ /* Nb: the order of the |locked| and |owner==me| checks is not critical
+ * to the correctness of PR_AssertCurrentThreadOwnsLock(), but
+ * this particular order makes the assertion more likely to
+ * catch errors. */
+ PR_ASSERT(lock->locked && pthread_equal(lock->owner, pthread_self()));
+}
/**************************************************************/
/**************************************************************/
/***************************CONDITIONS*************************/
/**************************************************************/
/**************************************************************/
@@ -511,16 +523,21 @@ PR_IMPLEMENT(void) PR_DestroyMonitor(PRM
PR_IMPLEMENT(PRIntn) PR_GetMonitorEntryCount(PRMonitor *mon)
{
pthread_t self = pthread_self();
if (pthread_equal(mon->owner, self))
return mon->entryCount;
return 0;
}
+PR_IMPLEMENT(void) PR_AssertCurrentThreadInMonitor(PRMonitor *mon)
+{
+ PR_ASSERT_CURRENT_THREAD_OWNS_LOCK(&mon->lock);
+}
+
PR_IMPLEMENT(void) PR_EnterMonitor(PRMonitor *mon)
{
pthread_t self = pthread_self();
PR_ASSERT(mon != NULL);
/*
* This is safe only if mon->owner (a pthread_t) can be
* read in one instruction. Perhaps mon->owner should be
--- a/nsprpub/pr/src/pthreads/ptthread.c
+++ b/nsprpub/pr/src/pthreads/ptthread.c
@@ -47,16 +47,23 @@
#include "primpl.h"
#include "prpdce.h"
#include <pthread.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
+#ifdef SYMBIAN
+/* In Open C sched_get_priority_min/max do not work properly, so we undefine
+ * _POSIX_THREAD_PRIORITY_SCHEDULING here.
+ */
+#undef _POSIX_THREAD_PRIORITY_SCHEDULING
+#endif
+
/*
* Record whether or not we have the privilege to set the scheduling
* policy and priority of threads. 0 means that privilege is available.
* EPERM means that privilege is not available.
*/
static PRIntn pt_schedpriv = 0;
extern PRLock *_pr_sleeplock;
--- a/nsprpub/pr/src/threads/combined/prulock.c
+++ b/nsprpub/pr/src/threads/combined/prulock.c
@@ -399,16 +399,26 @@ PR_IMPLEMENT(PRStatus) PR_Unlock(PRLock
_PR_LOCK_UNLOCK(lock);
if (!_PR_IS_NATIVE_THREAD(me))
_PR_INTSON(is);
return PR_SUCCESS;
#endif /* _PR_GLOBAL_THREADS_ONLY */
}
/*
+** If the current thread owns |lock|, this assertion is guaranteed to
+** succeed. Otherwise, the behavior of this function is undefined.
+*/
+PR_IMPLEMENT(void) PR_AssertCurrentThreadOwnsLock(PRLock *lock)
+{
+ PRThread *me = _PR_MD_CURRENT_THREAD();
+ PR_ASSERT(lock->owner == me);
+}
+
+/*
** Test and then lock the lock if it's not already locked by some other
** thread. Return PR_FALSE if some other thread owned the lock at the
** time of the call.
*/
PR_IMPLEMENT(PRBool) PR_TestAndLock(PRLock *lock)
{
PRThread *me = _PR_MD_CURRENT_THREAD();
PRBool rv = PR_FALSE;
--- a/nsprpub/pr/src/threads/prmon.c
+++ b/nsprpub/pr/src/threads/prmon.c
@@ -140,16 +140,25 @@ PR_IMPLEMENT(PRStatus) PR_ExitMonitor(PR
*/
PR_IMPLEMENT(PRIntn) PR_GetMonitorEntryCount(PRMonitor *mon)
{
return (mon->cvar->lock->owner == _PR_MD_CURRENT_THREAD()) ?
mon->entryCount : 0;
}
/*
+** If the current thread is in |mon|, this assertion is guaranteed to
+** succeed. Otherwise, the behavior of this function is undefined.
+*/
+PR_IMPLEMENT(void) PR_AssertCurrentThreadInMonitor(PRMonitor *mon)
+{
+ PR_ASSERT_CURRENT_THREAD_OWNS_LOCK(mon->cvar->lock);
+}
+
+/*
** Wait for a notify on the condition variable. Sleep for "ticks" amount
** of time (if "tick" is 0 then the sleep is indefinite). While
** the thread is waiting it exits the monitors lock (as if it called
** PR_ExitMonitor as many times as it had called PR_EnterMonitor). When
** the wait has finished the thread regains control of the monitors lock
** with the same entry count as before the wait began.
**
** The thread waiting on the monitor will be resumed when the monitor is
--- a/nsprpub/pr/tests/Makefile.in
+++ b/nsprpub/pr/tests/Makefile.in
@@ -120,16 +120,17 @@ CSRCS = \
op_2long.c \
op_excl.c \
op_filnf.c \
op_filok.c \
op_noacc.c \
op_nofil.c \
openfile.c \
parent.c \
+ parsetm.c \
peek.c \
perf.c \
pipeping.c \
pipeping2.c \
pipepong.c \
pipepong2.c \
pipeself.c \
poll_er.c \
@@ -198,48 +199,78 @@ CSRCS = \
udpsrv.c \
writev.c \
xnotify.c \
y2k.c \
y2ktmo.c \
zerolen.c \
$(NULL)
+ifeq ($(OS_ARCH),WINCE)
+TESTPROGS = \
+ wince_tester.cpp \
+ $(NULL)
+endif
+
ifeq ($(OS_TARGET),OS2)
CSRCS += \
sleep.c \
stat.c \
yield.c \
$(NULL)
endif
-ifeq (,$(filter-out WINNT OS2,$(OS_ARCH)))
+ifeq (,$(filter-out WINCE WINNT OS2,$(OS_ARCH)))
PROG_SUFFIX = .exe
+DLL_SUFFIX = .dll
else
PROG_SUFFIX =
+DLL_SUFFIX =
endif
+ifeq ($(OS_ARCH),WINCE)
+PROGS = $(addprefix $(OBJDIR)/, $(CSRCS:.c=$(DLL_SUFFIX))) $(addprefix $(OBJDIR)/, $(TESTPROGS:.cpp=$(PROG_SUFFIX)))
+else
PROGS = $(addprefix $(OBJDIR)/, $(CSRCS:.c=$(PROG_SUFFIX)))
+endif
TARGETS = $(PROGS)
INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private
ifeq ($(OS_ARCH), WINNT)
ifdef NS_USE_GCC
EXTRA_LIBS += -lwsock32
else
EXTRA_LIBS += wsock32.lib
LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO
- ifdef PROFILE
- LDOPTS += -PROFILE -MAP
+ ifdef PROFILE
+ LDOPTS += -PROFILE -MAP
endif # profile
endif # NS_USE_GCC
endif
+ifeq ($(OS_ARCH),WINCE)
+ifdef NS_USE_GCC
+ EXTRA_LIBS += -lws2 -lcoredll
+else
+ INCLUDES += -FInst_wince.h
+ EXTRA_LIBS += ws2.lib coredll.lib
+ LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO -PDB:$(@:.dll=.pdb)
+ EXE_EXTRA_LDOPTS = -SUBSYSTEM:CONSOLE
+ ifdef PROFILE
+ LDOPTS += -PROFILE -MAP
+ endif # profile
+endif # NS_USE_GCC
+
+# Use CC to compile all CPP files / also use all CC flags
+CCC = $(CC)
+CXXFLAGS = $(CFLAGS)
+endif
+
ifeq ($(OS_ARCH),OS2)
EXTRA_LIBS = $(OS_LIBS)
LDOPTS = -Zomf -Zlinker /PM:VIO -Zlinker /ST:0x64000
endif
ifneq ($(OS_ARCH), WINNT)
# Use an absolute pathname as the runtime library path (for the -R
# or -rpath linker option or the LD_RUN_PATH environment variable).
@@ -481,20 +512,46 @@ ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
link $(LDOPTS) $(EXTRA_LDOPTS) $< $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -out:$@
ifdef MT
@if test -f $@.manifest; then \
$(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
rm -f $@.manifest; \
fi
endif
else
+ifeq ($(OS_ARCH),WINCE)
+ $(PURE) $(LD) $(XCFLAGS) $< $(LDOPTS:.exe=.pdb) $(EXE_EXTRA_LDOPTS) $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -OUT:$@
+else
$(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -o $@
+endif # wince
endif # WINNT
endif # AIX_PRE_4_2
+
+ifeq ($(OS_ARCH),WINCE)
+$(OBJS): $(OBJDIR)/%.$(OBJ_SUFFIX): nst_wince.h
+
+# WinCE HAS to be different. Turns out that the OS swallows crashes
+# and returns a result code of zero -- an indication of success for
+# the shell script. AND, WinCE does not really have a good shell
+# to use for testing, anyway.
+#
+# To combat both issues, we need to build the tests as stand-alone
+# DLLs, then dynamically load the DLLs one at a time inside a test
+# program. Each DLL's test will be run inside a TRY/CATCH construct,
+# allowing the testing program to do what the shell script already
+# does naturally.
+#
+# This section builds DLLs instead of EXEs for each of the tests.
+# - wolfe@lobo.us
+$(OBJDIR)/%$(DLL_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
+ @$(MAKE_OBJDIR)
+ $(PURE) $(LD) $(XCFLAGS) $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -DLL -OUT:$@ $<
+endif # wince
+
export:: $(TARGETS)
clean::
rm -f $(TARGETS)
# The following tests call BSD socket functions, so they need to link
# with -lsocket on some platforms.
ifeq ($(OS_ARCH),SunOS)
ifneq ($(OS_RELEASE),4.1.3_U1)
--- a/nsprpub/pr/tests/accept.c
+++ b/nsprpub/pr/tests/accept.c
@@ -78,17 +78,17 @@
#define ACCEPT_READ_FAST_CB 0x5
#define CLIENT_NORMAL 0x1
#define CLIENT_TIMEOUT_ACCEPT 0x2
#define CLIENT_TIMEOUT_SEND 0x3
#define SERVER_MAX_BIND_COUNT 100
-#if defined(XP_MAC) || defined(XP_OS2)
+#if defined(XP_MAC) || defined(XP_OS2) || defined(SYMBIAN)
#define TIMEOUTSECS 10
#else
#define TIMEOUTSECS 2
#endif
PRIntervalTime timeoutTime;
static PRInt32 count = 1;
static PRFileDesc *output;
--- a/nsprpub/pr/tests/acceptread.c
+++ b/nsprpub/pr/tests/acceptread.c
@@ -60,17 +60,21 @@ static PRStatus PrintAddress(const PRNet
std_out, "Accepted connection from (0x%p)%s:%d\n",
address, buffer, address->inet.port);
return rv;
} /* PrintAddress */
static void ConnectingThread(void *arg)
{
PRInt32 nbytes;
+#ifdef SYMBIAN
+ char buf[256];
+#else
char buf[1024];
+#endif
PRFileDesc *sock;
PRNetAddr peer_addr, *addr;
addr = (PRNetAddr*)arg;
sock = PR_NewTCPSocket();
if (sock == NULL)
{
@@ -177,17 +181,17 @@ static void AcceptingThread(void *arg)
PL_FPrintError(err_out, "PR_Close (server) failed");
}
rv = PR_Close(listen_sock);
if (PR_FAILURE == rv)
PL_FPrintError(err_out, "PR_Close (server) failed");
} /* AcceptingThread */
-PRIntn main(PRIntn argc, char **argv)
+int main(int argc, char **argv)
{
PRHostEnt he;
PRStatus status;
PRIntn next_index;
PRUint16 port_number;
char netdb_buf[PR_NETDB_BUF_SIZE];
PRNetAddr client_addr, server_addr;
PRThread *client_thread, *server_thread;
--- a/nsprpub/pr/tests/acceptreademu.c
+++ b/nsprpub/pr/tests/acceptreademu.c
@@ -75,17 +75,21 @@ static PRStatus PrintAddress(const PRNet
std_out, "Accepted connection from (0x%p)%s:%d\n",
address, buffer, address->inet.port);
return rv;
} /* PrintAddress */
static void ConnectingThread(void *arg)
{
PRInt32 nbytes;
+#ifdef SYMBIAN
+ char buf[256];
+#else
char buf[1024];
+#endif
PRFileDesc *sock;
PRNetAddr peer_addr, *addr;
addr = (PRNetAddr*)arg;
sock = PR_NewTCPSocket();
if (sock == NULL)
{
@@ -204,17 +208,17 @@ static void AcceptingThread(void *arg)
PL_FPrintError(err_out, "PR_Close (server) failed");
}
rv = PR_Close(listen_sock);
if (PR_FAILURE == rv)
PL_FPrintError(err_out, "PR_Close (server) failed");
} /* AcceptingThread */
-PRIntn main(PRIntn argc, char **argv)
+int main(int argc, char **argv)
{
PRHostEnt he;
PRStatus status;
PRIntn next_index;
PRUint16 port_number;
char netdb_buf[PR_NETDB_BUF_SIZE];
PRNetAddr client_addr, server_addr;
PRThread *client_thread, *server_thread;
--- a/nsprpub/pr/tests/addrstr.c
+++ b/nsprpub/pr/tests/addrstr.c
@@ -66,17 +66,17 @@ const char *badaddrs[] = {
"1:2:3:4:5:6:7::8",
"1:2:3:4:5:6::7:8",
"::ff99.2.3.4",
0
};
int failed_already = 0;
-int main()
+int main(int argc, char **argv)
{
const char **nexttestaddr = testaddrs;
const char **nextbadaddr = badaddrs;
const char *in, *expected_out;
PRNetAddr addr;
char buf[256];
PRStatus rv;
--- a/nsprpub/pr/tests/anonfm.c
+++ b/nsprpub/pr/tests/anonfm.c
@@ -282,17 +282,17 @@ static void ServerOne( void )
*/
static void ServerTwo( void )
{
PR_LOG(lm, msgLevel,
("ServerTwo(): Not implemented yet" ));
} /* end ServerTwo() */
-PRIntn main(PRIntn argc, char *argv[])
+int main(int argc, char **argv)
{
{
/*
** Get command line options
*/
PLOptStatus os;
PLOptState *opt = PL_CreateOptState(argc, argv, "hdC:");
--- a/nsprpub/pr/tests/append.c
+++ b/nsprpub/pr/tests/append.c
@@ -57,17 +57,17 @@
PRIntn debug = 0;
PRIntn verbose = 0;
PRBool failedAlready = PR_FALSE;
const PRInt32 addedBytes = 1000;
const PRInt32 buf = 1; /* constant written to fd, addedBytes times */
PRInt32 inBuf; /* read it back into here */
-PRIntn main(PRIntn argc, char *argv[])
+int main(int argc, char **argv)
{
PRStatus rc;
PRInt32 rv;
PRFileDesc *fd;
PRIntn i;
PRInt32 sum = 0;
{ /* Get command line options */
--- a/nsprpub/pr/tests/atomic.c
+++ b/nsprpub/pr/tests/atomic.c
@@ -42,17 +42,17 @@
/*
* TODO: create a macro to generate the six lines of code that are repeated
* for every test. Also rewrite the statement
* result = result | ((EXPRESSION) ? 0 : 1);
* as
* result |= !(EXPRESSION);
*/
-PRIntn main(PRIntn argc, char **argv)
+int main(int argc, char **argv)
{
PRInt32 rv, oldval, test, result = 0;
PRFileDesc *output = PR_GetSpecialFD(PR_StandardOutput);
/***********************/
/* Test the functions. */
/***********************/
--- a/nsprpub/pr/tests/bigfile.c
+++ b/nsprpub/pr/tests/bigfile.c
@@ -124,17 +124,17 @@ static void PrintInfo(PRFileInfo64 *info
(void)PR_FormatTime(ctime, sizeof(ctime), "%c GMT", &tm);
PR_ExplodeTime(info->modifyTime, PR_GMTParameters, &tm);
(void)PR_FormatTime(mtime, sizeof(mtime), "%c GMT", &tm);
PR_fprintf(
output, " creation: %s,\n modify: %s\n", ctime, mtime);
} /* PrintInfo */
-PRIntn main(PRIntn argc, char **argv)
+int main(int argc, char **argv)
{
PRStatus rv;
char *buffer;
PLOptStatus os;
PRInt32 loop, bytes;
PRFileInfo small_info;
PRFileInfo64 big_info;
PRBool keep = PR_FALSE;
@@ -178,18 +178,23 @@ PRIntn main(PRIntn argc, char **argv)
}
}
PL_DestroyOptState(opt);
if (0 == count) count = DEFAULT_COUNT;
if (0 == filesize) filesize = DEFAULT_FILESIZE;
if (NULL == filename)
{
+#ifdef SYMBIAN
+#define FILE_NAME "c:\\data\\bigfile.dat"
+#else
+#define FILE_NAME "bigfile.dat"
+#endif
if (DE