summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcvs2hg <devnull@localhost>2003-01-21 02:02:30 +0000
committercvs2hg <devnull@localhost>2003-01-21 02:02:30 +0000
commit2f63f74cc6157463ccd1f8e354a8233966f421f1 (patch)
treeddca953328027961e7ee583b5b93cb8e226aa84b
parent57c2cc83bfe90fe3b51c3c8ba1e0cd8a7dc9636a (diff)
downloadnspr-hg-MINOTAUR_20030218_BRANCH.tar.gz
fixup commit for branch 'MINOTAUR_20030218_BRANCH'MINOTAUR_20030218_BRANCH
-rw-r--r--Makefile.in10
-rwxr-xr-xadmin/repackage.sh20
-rwxr-xr-xbuild/autoconf/config.guess141
-rwxr-xr-xbuild/autoconf/config.sub153
-rwxr-xr-xbuild/cygwin-wrapper17
-rw-r--r--config/Linux.mk12
-rw-r--r--config/Makefile.in6
-rw-r--r--config/autoconf.mk.in5
-rw-r--r--config/config.mk4
-rw-r--r--config/module.df6
-rw-r--r--config/now.c22
-rw-r--r--config/nsinstall.c16
-rw-r--r--config/prdepend.h1
-rw-r--r--config/rules.mk62
-rwxr-xr-xconfigure749
-rw-r--r--configure.in330
-rw-r--r--lib/ds/Makefile.in20
-rw-r--r--lib/ds/plarena.c8
-rw-r--r--lib/ds/plds.def33
-rw-r--r--lib/ds/plds_symvec.opt37
-rw-r--r--lib/libc/src/Makefile.in19
-rw-r--r--lib/libc/src/base64.c2
-rw-r--r--lib/libc/src/plc.def49
-rw-r--r--lib/libc/src/plc_symvec.opt53
-rw-r--r--lib/libc/src/strstr.c6
-rw-r--r--lib/msgc/src/Makefile.in4
-rw-r--r--macbuild/NSPR.Debug.Prefix1
-rw-r--r--macbuild/NSPR.Prefix11
-rw-r--r--macbuild/NSPR20.toc69
-rw-r--r--macbuild/NSPR20PPC.mcpbin163973 -> 0 bytes
-rw-r--r--macbuild/NSPR20PPC.xml8232
-rw-r--r--macbuild/NSPRCarbon.Prefix7
-rw-r--r--macbuild/NSPRCarbonDebug.Prefix10
-rw-r--r--macbuild/NSPRConfig.h1
-rw-r--r--macbuild/NSPRDebug.Prefix7
-rw-r--r--pkg/solaris/Makefile.com30
-rw-r--r--pkg/solaris/Makefile.in60
-rw-r--r--pkg/solaris/Makefile.targ33
-rw-r--r--pkg/solaris/SUNWpr/Makefile.in22
-rw-r--r--pkg/solaris/SUNWpr/depend27
-rw-r--r--pkg/solaris/SUNWpr/pkginfo.tmpl34
-rw-r--r--pkg/solaris/SUNWpr/prototype_com31
-rw-r--r--pkg/solaris/SUNWpr/prototype_i38630
-rw-r--r--pkg/solaris/SUNWpr/prototype_sparc33
-rw-r--r--pkg/solaris/SUNWprx/Makefile.in22
-rw-r--r--pkg/solaris/SUNWprx/depend30
-rw-r--r--pkg/solaris/SUNWprx/pkginfo.tmpl35
-rw-r--r--pkg/solaris/SUNWprx/prototype_com28
-rw-r--r--pkg/solaris/SUNWprx/prototype_sparc35
-rw-r--r--pkg/solaris/bld_awk_pkginfo.ksh105
-rw-r--r--pkg/solaris/common_files/copyright28
-rw-r--r--pr/include/md/Makefile.in9
-rw-r--r--pr/include/md/_aix.h6
-rw-r--r--pr/include/md/_aix32.cfg3
-rw-r--r--pr/include/md/_aix32in6.cfg142
-rw-r--r--pr/include/md/_beos.h16
-rw-r--r--pr/include/md/_bsdi.h11
-rw-r--r--pr/include/md/_darwin.cfg4
-rw-r--r--pr/include/md/_darwin.h21
-rw-r--r--pr/include/md/_freebsd.cfg9
-rw-r--r--pr/include/md/_freebsd.h25
-rw-r--r--pr/include/md/_hpux.h20
-rw-r--r--pr/include/md/_hpux64.cfg4
-rw-r--r--pr/include/md/_irix.h6
-rw-r--r--pr/include/md/_linux.h3
-rw-r--r--pr/include/md/_macos.h76
-rw-r--r--pr/include/md/_netbsd.h1
-rw-r--r--pr/include/md/_nto.h2
-rw-r--r--pr/include/md/_openvms.h5
-rw-r--r--pr/include/md/_os2.h65
-rw-r--r--pr/include/md/_os2_errors.h10
-rw-r--r--pr/include/md/_osf1.h11
-rw-r--r--pr/include/md/_pth.h27
-rw-r--r--pr/include/md/_solaris.h12
-rw-r--r--pr/include/md/_solaris32.cfg4
-rw-r--r--pr/include/md/_solaris64.cfg4
-rw-r--r--pr/include/md/_unixos.h3
-rw-r--r--pr/include/md/_win16.h7
-rw-r--r--pr/include/md/_win95.h24
-rw-r--r--pr/include/md/_winnt.h8
-rw-r--r--pr/include/obsolete/Makefile.in2
-rw-r--r--pr/include/prcountr.h78
-rw-r--r--pr/include/prerr.h5
-rw-r--r--pr/include/prinet.h2
-rw-r--r--pr/include/prinit.h12
-rw-r--r--pr/include/prio.h56
-rw-r--r--pr/include/private/Makefile.in2
-rw-r--r--pr/include/private/primpl.h66
-rw-r--r--pr/include/prlink.h8
-rw-r--r--pr/include/prolock.h59
-rw-r--r--pr/include/prthread.h2
-rw-r--r--pr/include/prtrace.h72
-rw-r--r--pr/include/prtypes.h54
-rw-r--r--pr/include/prwin16.h2
-rw-r--r--pr/src/Makefile.in39
-rw-r--r--pr/src/io/prdir.c50
-rw-r--r--pr/src/io/prfdcach.c4
-rw-r--r--pr/src/io/prfile.c66
-rw-r--r--pr/src/io/prio.c11
-rw-r--r--pr/src/io/priometh.c10
-rw-r--r--pr/src/io/prlayer.c4
-rw-r--r--pr/src/io/prlog.c27
-rw-r--r--pr/src/io/prmapopt.c13
-rw-r--r--pr/src/io/prmwait.c39
-rw-r--r--pr/src/io/prprf.c103
-rw-r--r--pr/src/io/prsocket.c106
-rw-r--r--pr/src/linking/Makefile.in10
-rw-r--r--pr/src/linking/prlink.c813
-rw-r--r--pr/src/malloc/prmem.c74
-rw-r--r--pr/src/md/beos/bfile.c423
-rw-r--r--pr/src/md/beos/bmisc.c7
-rw-r--r--pr/src/md/beos/bmmap.c3
-rw-r--r--pr/src/md/beos/bnet.c773
-rw-r--r--pr/src/md/beos/bproc.c184
-rw-r--r--pr/src/md/mac/macdll.c106
-rw-r--r--pr/src/md/mac/macio.c22
-rw-r--r--pr/src/md/mac/macsocket.h1
-rw-r--r--pr/src/md/mac/macsockotpt.c346
-rw-r--r--pr/src/md/mac/macthr.c170
-rw-r--r--pr/src/md/mac/mdcriticalregion.c1
-rw-r--r--pr/src/md/mac/mdmac.c5
-rw-r--r--pr/src/md/os2/os2_errors.c125
-rw-r--r--pr/src/md/os2/os2cv.c108
-rw-r--r--pr/src/md/os2/os2inrval.c43
-rw-r--r--pr/src/md/os2/os2io.c6
-rw-r--r--pr/src/md/os2/os2misc.c351
-rw-r--r--pr/src/md/os2/os2poll.c270
-rw-r--r--pr/src/md/os2/os2sock.c1020
-rw-r--r--pr/src/md/os2/os2thred.c10
-rw-r--r--pr/src/md/os2/os2vacpp.asm199
-rw-r--r--pr/src/md/unix/Makefile.in22
-rw-r--r--pr/src/md/unix/darwin.c27
-rw-r--r--pr/src/md/unix/irix.c8
-rw-r--r--pr/src/md/unix/openvms.c18
-rw-r--r--pr/src/md/unix/unix.c53
-rw-r--r--pr/src/md/unix/unix_errors.c7
-rw-r--r--pr/src/md/unix/uxpoll.c5
-rw-r--r--pr/src/md/unix/uxproces.c2
-rw-r--r--pr/src/md/unix/uxrng.c19
-rw-r--r--pr/src/md/unix/uxshm.c7
-rw-r--r--pr/src/md/windows/Makefile.in10
-rw-r--r--pr/src/md/windows/ntinrval.c47
-rw-r--r--pr/src/md/windows/ntio.c18
-rw-r--r--pr/src/md/windows/ntmisc.c24
-rw-r--r--pr/src/md/windows/ntthread.c22
-rw-r--r--pr/src/md/windows/w32poll.c4
-rw-r--r--pr/src/md/windows/w95io.c420
-rw-r--r--pr/src/md/windows/w95sock.c26
-rw-r--r--pr/src/md/windows/w95thred.c8
-rw-r--r--pr/src/misc/Makefile.in8
-rw-r--r--pr/src/misc/compile-et.pl2
-rw-r--r--pr/src/misc/pralarm.c4
-rw-r--r--pr/src/misc/prcountr.c12
-rw-r--r--pr/src/misc/prdtoa.c209
-rw-r--r--pr/src/misc/prenv.c2
-rw-r--r--pr/src/misc/prerr.c5
-rw-r--r--pr/src/misc/prerr.et1
-rw-r--r--pr/src/misc/prerr.properties2
-rw-r--r--pr/src/misc/prerror.c4
-rw-r--r--pr/src/misc/prinit.c56
-rw-r--r--pr/src/misc/prinrval.c4
-rw-r--r--pr/src/misc/prnetdb.c319
-rw-r--r--pr/src/misc/prolock.c11
-rw-r--r--pr/src/misc/prsystem.c14
-rw-r--r--pr/src/misc/prtime.c46
-rw-r--r--pr/src/misc/prtpool.c6
-rw-r--r--pr/src/misc/prtrace.c11
-rw-r--r--pr/src/nspr.def397
-rw-r--r--pr/src/nspr_symvec.opt421
-rw-r--r--pr/src/pthreads/Makefile.in5
-rw-r--r--pr/src/pthreads/ptio.c407
-rw-r--r--pr/src/pthreads/ptsynch.c9
-rw-r--r--pr/src/pthreads/ptthread.c73
-rw-r--r--pr/src/threads/combined/prucpu.c204
-rw-r--r--pr/src/threads/combined/pruthr.c1
-rw-r--r--pr/src/threads/prcthr.c2
-rw-r--r--pr/src/threads/prtpd.c2
-rw-r--r--pr/tests/Makefile.in22
-rw-r--r--pr/tests/affinity.c10
-rw-r--r--pr/tests/dll/Makefile.in4
-rw-r--r--pr/tests/libfilename.c126
-rwxr-xr-xpr/tests/runtests.ksh3
-rwxr-xr-xpr/tests/runtests.sh287
-rw-r--r--pr/tests/sigpipe.c26
-rw-r--r--pr/tests/vercheck.c11
185 files changed, 17169 insertions, 3510 deletions
diff --git a/Makefile.in b/Makefile.in
index ac081b6b..55180c70 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -41,6 +41,8 @@ VPATH = @srcdir@
include $(MOD_DEPTH)/config/autoconf.mk
+MAKE := $(patsubst -j%,,$(MAKE)) -j1
+
DIRS = config pr lib
ifdef MOZILLA_CLIENT
@@ -108,12 +110,12 @@ ifeq ($(OS_ARCH),WINNT)
@if test ! -d $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); then \
rm -rf $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); \
echo "making directory $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)"; \
- config/prmkdir.bat $(MDIST_DOS)\\$(MOD_NAME)\\$(BUILD_NUMBER); \
+ $(topsrcdir)/config/prmkdir.bat $(MDIST_DOS)\\$(MOD_NAME)\\$(BUILD_NUMBER); \
fi
@if test ! -d $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(RELEASE_OBJDIR_NAME); then \
rm -rf $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(RELEASE_OBJDIR_NAME); \
echo "making directory $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(RELEASE_OBJDIR_NAME)"; \
- config/prmkdir.bat $(MDIST_DOS)\\$(MOD_NAME)\\$(BUILD_NUMBER)\\$(RELEASE_OBJDIR_NAME); \
+ $(topsrcdir)/config/prmkdir.bat $(MDIST_DOS)\\$(MOD_NAME)\\$(BUILD_NUMBER)\\$(RELEASE_OBJDIR_NAME); \
fi
else
@if test ! -d $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); then \
@@ -140,5 +142,9 @@ endif
cp -f mdheader.jar $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(RELEASE_OBJDIR_NAME); \
chmod 664 $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(RELEASE_OBJDIR_NAME)/mdheader.jar
+solarispkg:
+ @echo Making Solaris packages.
+ $(MAKE) -C pkg/solaris publish
+
depend:
@echo "NSPR20 has no dependencies. Skipped."
diff --git a/admin/repackage.sh b/admin/repackage.sh
index 2a705c49..81439e2d 100755
--- a/admin/repackage.sh
+++ b/admin/repackage.sh
@@ -60,10 +60,10 @@
#
# These variables should be modified for each NSPR release.
#
-FROMTOP=/share/builds/components/nspr20/v4.1.1
-TOTOP=./v4.1.1
-NSPRDIR=nspr-4.1.1
-SOURCETAG=NSPRPUB_RELEASE_4_1_1
+FROMTOP=/share/builds/components/nspr20/v4.3
+TOTOP=./v4.3
+NSPRDIR=nspr-4.3
+SOURCETAG=NSPR_4_3_RELEASE
#
# enumerate Unix object directories on /s/b/c
@@ -80,12 +80,16 @@ IRIX6.5_n32_PTH_DBG.OBJ
IRIX6.5_n32_PTH_OPT.OBJ
Linux2.2_x86_glibc_PTH_DBG.OBJ
Linux2.2_x86_glibc_PTH_OPT.OBJ
-OSF1V4.0D_DBG.OBJ
-OSF1V4.0D_OPT.OBJ
+Linux2.4_x86_glibc_PTH_DBG.OBJ
+Linux2.4_x86_glibc_PTH_OPT.OBJ
+OSF1V5.0_DBG.OBJ
+OSF1V5.0_OPT.OBJ
SunOS5.6_DBG.OBJ
SunOS5.6_OPT.OBJ
-SunOS5.7_64_DBG.OBJ
-SunOS5.7_64_OPT.OBJ
+SunOS5.8_64_DBG.OBJ
+SunOS5.8_64_OPT.OBJ
+SunOS5.8_DBG.OBJ
+SunOS5.8_OPT.OBJ
"
#
# enumerate Windows object directories on /s/b/c
diff --git a/build/autoconf/config.guess b/build/autoconf/config.guess
index 627c6158..a903c1da 100755
--- a/build/autoconf/config.guess
+++ b/build/autoconf/config.guess
@@ -1,9 +1,9 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002 Free Software Foundation, Inc.
-timestamp='2001-10-05'
+timestamp='2002-03-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -24,7 +24,7 @@ timestamp='2001-10-05'
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
-# Originally written by Per Bothner <bothner@cygnus.com>.
+# Originally written by Per Bothner <per@bothner.com>.
# Please send patches to <config-patches@gnu.org>. Submit a context
# diff and a properly formatted ChangeLog entry.
#
@@ -98,7 +98,7 @@ trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
,,) echo "int dummy(){}" > $dummy.c ;
- for c in cc gcc c89 ; do
+ for c in cc gcc c89 c99 ; do
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
if test $? = 0 ; then
CC_FOR_BUILD="$c"; break ;
@@ -135,23 +135,22 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# object file format. This provides both forward
# compatibility and a consistent mechanism for selecting the
# object file format.
- # Determine the machine/vendor (is the vendor relevant).
- case "${UNAME_MACHINE}" in
- amiga) machine=m68k-unknown ;;
- arm32) machine=arm-unknown ;;
- atari*) machine=m68k-atari ;;
- sun3*) machine=m68k-sun ;;
- mac68k) machine=m68k-apple ;;
- macppc) machine=powerpc-apple ;;
- hp3[0-9][05]) machine=m68k-hp ;;
- ibmrt|romp-ibm) machine=romp-ibm ;;
- sparc*) machine=`uname -p`-unknown ;;
- *) machine=${UNAME_MACHINE}-unknown ;;
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
- case "${UNAME_MACHINE}" in
- i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep __ELF__ >/dev/null
@@ -291,6 +290,9 @@ EOF
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
exit 0 ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit 0 ;;
*:OS/390:*:*)
echo i370-ibm-openedition
exit 0 ;;
@@ -339,7 +341,7 @@ EOF
echo m68k-sun-sunos${UNAME_RELEASE}
exit 0 ;;
sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
case "`/bin/arch`" in
sun3)
@@ -508,7 +510,7 @@ EOF
fi
exit 0 ;;
*:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
@@ -682,9 +684,6 @@ EOF
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
exit 0 ;;
- CRAY*X-MP:*:*:*)
- echo xmp-cray-unicos
- exit 0 ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
@@ -706,9 +705,6 @@ EOF
CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
- CRAY-2:*:*:*)
- echo cray2-cray-unicos
- exit 0 ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
@@ -746,6 +742,9 @@ EOF
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit 0 ;;
+ x86:Interix*:3*)
+ echo i386-pc-interix3
+ exit 0 ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -771,16 +770,30 @@ EOF
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit 0 ;;
ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit 0 ;;
m68*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit 0 ;;
mips:Linux:*:*)
- case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
- big) echo mips-unknown-linux-gnu && exit 0 ;;
- little) echo mipsel-unknown-linux-gnu && exit 0 ;;
- esac
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ rm -f $dummy.c
+ test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
;;
ppc:Linux:*:*)
echo powerpc-unknown-linux-gnu
@@ -829,7 +842,8 @@ EOF
# The BFD linker knows what the default object file format is, so
# first see if it will tell us. cd to the root directory to prevent
# problems with other programs or directories called `ld' in the path.
- ld_supported_targets=`cd /; ld --help 2>&1 \
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
| sed -ne '/supported targets:/!d
s/[ ][ ]*/ /g
s/.*supported targets: *//
@@ -853,32 +867,29 @@ EOF
esac
# Determine whether the default compiler is a.out or elf
eval $set_cc_for_build
- cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-# if __GLIBC__ >= 2
- printf ("%s-pc-linux-gnu\n", argv[1]);
-# else
- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-# else
- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-#else
- printf ("%s-pc-linux-gnuaout\n", argv[1]);
-#endif
- return 0;
-}
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #ifdef __INTEL_COMPILER
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ rm -f $dummy.c
+ test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
;;
i*86:DYNIX/ptx:4*:*)
@@ -957,7 +968,7 @@ EOF
exit 0 ;;
M68*:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -1068,15 +1079,17 @@ EOF
echo `uname -p`-apple-darwin${UNAME_RELEASE}
exit 0 ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
- if test "${UNAME_MACHINE}" = "x86pc"; then
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
- echo `uname -p`-${UNAME_MACHINE}-nto-qnx
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
exit 0 ;;
*:QNX:*:4*)
echo i386-pc-qnx
exit 0 ;;
- NSR-[KW]:NONSTOP_KERNEL:*:*)
+ NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE}
exit 0 ;;
*:NonStop-UX:*:*)
@@ -1100,7 +1113,9 @@ EOF
echo ${UNAME_MACHINE}-unknown-plan9
exit 0 ;;
i*86:OS/2:*:*)
- echo ${UNAME_MACHINE}-pc-os2-emx
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
exit 0 ;;
*:TOPS-10:*:*)
echo pdp10-unknown-tops10
diff --git a/build/autoconf/config.sub b/build/autoconf/config.sub
index 0cee56fb..e3d3d3ca 100755
--- a/build/autoconf/config.sub
+++ b/build/autoconf/config.sub
@@ -1,9 +1,9 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002 Free Software Foundation, Inc.
-timestamp='2001-10-05'
+timestamp='2002-04-26'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -118,7 +118,7 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
+ nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
@@ -224,9 +224,13 @@ esac
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
+#### MozillaHack
+# mips*el
+#### End MozillaHack
1750a | 580 \
| a29k \
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
| c4x | clipper \
| d10v | d30v | dsp16xx \
@@ -234,25 +238,24 @@ case $basic_machine in
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \
| m32r | m68000 | m68k | m88k | mcore \
- | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
+ | mips | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
| mips64vr4100 | mips64vr4100el | mips64vr4300 \
| mips64vr4300el | mips64vr5000 | mips64vr5000el \
| mipsbe | mipseb | mips*el | mipsle | mipstx39 | mipstx39el \
- | mipsisa32 \
+ | mipsisa32 | mipsisa64 \
| mn10200 | mn10300 \
| ns16k | ns32k \
- | openrisc \
+ | openrisc | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
| pyramid \
- | s390 | s390x \
- | sh | sh[34] | sh[34]eb | shbe | shle \
- | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
- | stormy16 | strongarm \
+ | sh | sh[34] | sh[34]eb | shbe | shle | sh64 \
+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+ | strongarm \
| tahoe | thumb | tic80 | tron \
- | v850 \
+ | v850 | v850e \
| we32k \
- | x86 | xscale \
+ | x86 | xscale | xstormy16 | xtensa \
| z8k)
basic_machine=$basic_machine-unknown
;;
@@ -276,15 +279,19 @@ case $basic_machine in
exit 1
;;
# Recognize the basic CPU types with company name.
+#### MozillaHack
+# mips*el
+#### End MozillaHack
580-* \
| a29k-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alphapca5[67]-* | arc-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armv*-* \
| avr-* \
| bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c54x-* \
- | clipper-* | cray2-* | cydra-* \
+ | clipper-* | cydra-* \
| d10v-* | d30v-* \
| elxsi-* \
| f30[01]-* | f700-* | fr30-* | fx80-* \
@@ -292,7 +299,7 @@ case $basic_machine in
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| m32r-* \
- | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | mcore-* \
| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
@@ -304,14 +311,14 @@ case $basic_machine in
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
| pyramid-* \
| romp-* | rs6000-* \
- | s390-* | s390x-* \
- | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
- | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
- | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
- | v850-* | vax-* \
+ | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
+ | v850-* | v850e-* | vax-* \
| we32k-* \
- | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+ | xtensa-* \
| ymp-* \
| z8k-*)
;;
@@ -376,6 +383,10 @@ case $basic_machine in
basic_machine=ns32k-sequent
os=-dynix
;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
convex-c1)
basic_machine=c1-convex
os=-bsd
@@ -396,16 +407,8 @@ case $basic_machine in
basic_machine=c38-convex
os=-bsd
;;
- cray | ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- cray2)
- basic_machine=cray2-cray
- os=-unicos
- ;;
- [cjt]90)
- basic_machine=${basic_machine}-cray
+ cray | j90)
+ basic_machine=j90-cray
os=-unicos
;;
crds | unos)
@@ -420,6 +423,14 @@ case $basic_machine in
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
basic_machine=mips-dec
;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
basic_machine=m68k-motorola
@@ -610,14 +621,6 @@ case $basic_machine in
basic_machine=m68k-atari
os=-mint
;;
- mipsel*-linux*)
- basic_machine=mipsel-unknown
- os=-linux-gnu
- ;;
- mips*-linux*)
- basic_machine=mips-unknown
- os=-linux-gnu
- ;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
@@ -632,6 +635,10 @@ case $basic_machine in
basic_machine=m68k-rom68k
os=-coff
;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
msdos)
basic_machine=i386-pc
os=-msdos
@@ -711,6 +718,10 @@ case $basic_machine in
basic_machine=hppa1.1-oki
os=-proelf
;;
+ or32 | or32-*)
+ basic_machine=or32-unknown
+ os=-coff
+ ;;
OSE68000 | ose68000)
basic_machine=m68000-ericsson
os=-ose
@@ -796,6 +807,12 @@ case $basic_machine in
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
sa29200)
basic_machine=a29k-amd
os=-udi
@@ -865,7 +882,7 @@ case $basic_machine in
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
;;
- sv1)
+ sv1)
basic_machine=sv1-cray
os=-unicos
;;
@@ -873,8 +890,16 @@ case $basic_machine in
basic_machine=i386-sequent
os=-dynix
;;
+ t3d)
+ basic_machine=alpha-cray
+ os=-unicos
+ ;;
t3e)
- basic_machine=t3e-cray
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
os=-unicos
;;
tic54x | c54x*)
@@ -887,6 +912,10 @@ case $basic_machine in
tx39el)
basic_machine=mipstx39el-unknown
;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
tower | tower-32)
basic_machine=m68k-ncr
;;
@@ -937,13 +966,13 @@ case $basic_machine in
basic_machine=i386-pc
os=-windows32-msvcrt
;;
- xmp)
- basic_machine=xmp-cray
- os=-unicos
- ;;
xps | xps100)
basic_machine=xps100-honeywell
;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
z8k-*-coff)
basic_machine=z8k-unknown
os=-sim
@@ -964,13 +993,6 @@ case $basic_machine in
op60c)
basic_machine=hppa1.1-oki
;;
- mips)
- if [ x$os = x-linux-gnu ]; then
- basic_machine=mips-unknown
- else
- basic_machine=mips-mips
- fi
- ;;
romp)
basic_machine=romp-ibm
;;
@@ -993,6 +1015,9 @@ case $basic_machine in
sh3 | sh4 | sh3eb | sh4eb)
basic_machine=sh-unknown
;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
sparc | sparcv9 | sparcv9b)
basic_machine=sparc-sun
;;
@@ -1063,6 +1088,9 @@ case $os in
# The portable systems comes first.
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
+#### MozillaHack
+# msvc | mksnt
+#### End MozillaHack
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
@@ -1078,10 +1106,11 @@ case $os in
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -msvc* | -mksnt* \
+ | -msvc* | -mksnt* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos*)
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* )
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1133,12 +1162,18 @@ case $os in
-acis*)
os=-aos
;;
+ -atheos*)
+ os=-atheos
+ ;;
-386bsd)
os=-bsd
;;
-ctix* | -uts*)
os=-sysv
;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
-ns2 )
os=-nextstep2
;;
@@ -1213,6 +1248,7 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
+ # This must come before the *-dec entry.
pdp10-*)
os=-tops20
;;
@@ -1243,6 +1279,9 @@ case $basic_machine in
mips*-*)
os=-elf
;;
+ or32-*)
+ os=-coff
+ ;;
*-tti) # must be before sparc entry or we get the wrong os.
os=-sysv3
;;
@@ -1390,7 +1429,7 @@ case $basic_machine in
-ptx*)
vendor=sequent
;;
- -vxsim* | -vxworks*)
+ -vxsim* | -vxworks* | -windiss*)
vendor=wrs
;;
-aux*)
diff --git a/build/cygwin-wrapper b/build/cygwin-wrapper
new file mode 100755
index 00000000..c510a7d7
--- /dev/null
+++ b/build/cygwin-wrapper
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Stupid wrapper to avoid win32 dospath/cygdrive issues
+#
+prog=$1
+shift
+if test -z "$prog"; then
+ exit 0
+fi
+if test "$prog" = "-up"; then
+ prog=$1
+ shift
+ args=`echo $* | sed -e 's|-I\(.\):|-I/cygdrive/\1|g;'`
+else
+ args=`echo $* | sed -e 's|/cygdrive/\(.\)/|\1:/|g;'`
+fi
+exec $prog $args
diff --git a/config/Linux.mk b/config/Linux.mk
index eabdb5b1..66fa6a52 100644
--- a/config/Linux.mk
+++ b/config/Linux.mk
@@ -81,7 +81,7 @@ RANLIB = ranlib
OS_INCLUDES =
G++INCLUDES = -I/usr/include/g++
-PLATFORM_FLAGS = -ansi -Wall -pipe -DLINUX -Dlinux
+PLATFORM_FLAGS = -ansi -Wall -pipe -DLINUX
PORT_FLAGS = -D_POSIX_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -DHAVE_STRERROR -DHAVE_FCNTL_FILE_LOCKING
OS_CFLAGS = $(DSO_CFLAGS) $(PLATFORM_FLAGS) $(PORT_FLAGS)
@@ -97,15 +97,7 @@ ifeq ($(CPU_ARCH),x86)
PLATFORM_FLAGS += -Di386
endif
ifeq ($(CPU_ARCH),m68k)
-#
-# gcc on Linux/m68k either has a bug or triggers a code-sequence
-# bug in the 68060 which causes gcc to crash. The simplest way to
-# avoid this is to enable a minimum level of optimization.
-#
-ifndef BUILD_OPT
-OPTIMIZER += -O
-endif
-PLATFORM_FLAGS += -m68020-40
+PLATFORM_FLAGS += -m68020-60
endif
#
diff --git a/config/Makefile.in b/config/Makefile.in
index 0360255b..2e07307a 100644
--- a/config/Makefile.in
+++ b/config/Makefile.in
@@ -90,7 +90,7 @@ endif
ifeq ($(OS_ARCH), HP-UX)
ifeq ($(USE_64),1)
- XLDOPTS += +DA2.0W
+ XLDOPTS += +DD64
endif
endif
@@ -119,8 +119,10 @@ endif
OUTOPTION = -o # end of the line
ifeq (,$(filter-out WINNT WIN95,$(OS_TARGET)))
+ifndef NS_USE_GCC
OUTOPTION = /Fe
endif
+endif
# Redefine MAKE_OBJDIR for just this directory
define MAKE_OBJDIR
@@ -135,7 +137,7 @@ $(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
ifeq ($(MOZ_OS2_TOOLS),VACPP)
$(LD) $(EXEFLAGS) $<
else
- $(CC) $(XCFLAGS) $< $(XLDOPTS) $(OUTOPTION)$@
+ $(CC) $(XCFLAGS) $< $(LDFLAGS) $(XLDOPTS) $(OUTOPTION)$@
endif
real_install:: nspr.m4
diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in
index 3a049f60..9135f1af 100644
--- a/config/autoconf.mk.in
+++ b/config/autoconf.mk.in
@@ -60,13 +60,13 @@ AR_FLAGS = @AR_FLAGS@
LD = @LD@
RANLIB = @RANLIB@
PERL = @PERL@
-DLLTOOL = @DLLTOOL@
-WINDRES = @WINDRES@
RC = @RC@
+RCFLAGS = @RCFLAGS@
STRIP = @STRIP@
NSINSTALL = @NSINSTALL@
FILTER = @FILTER@
IMPLIB = @IMPLIB@
+CYGWIN_WRAPPER = @CYGWIN_WRAPPER@
OS_CPPFLAGS = @CPPFLAGS@
OS_CFLAGS = $(OS_CPPFLAGS) @CFLAGS@ $(DSO_CFLAGS)
@@ -104,7 +104,6 @@ NOSUCHFILE = @NOSUCHFILE@
AIX_LINK_OPTS = @AIX_LINK_OPTS@
MOZ_OBJFORMAT = @MOZ_OBJFORMAT@
ULTRASPARC_LIBRARY = @ULTRASPARC_LIBRARY@
-ULTRASPARC_FILTER_LIBRARY = @ULTRASPARC_FILTER_LIBRARY@
OBJECT_MODE = @OBJECT_MODE@
ifdef OBJECT_MODE
diff --git a/config/config.mk b/config/config.mk
index 623a0aae..c57687c9 100644
--- a/config/config.mk
+++ b/config/config.mk
@@ -127,6 +127,10 @@ ifeq ($(USE_IPV6),1)
DEFINES += -D_PR_INET6
endif
+ifeq ($(MOZ_UNICODE),1)
+DEFINES += -DMOZ_UNICODE
+endif
+
####################################################################
#
# Configuration for the release process
diff --git a/config/module.df b/config/module.df
index e8b78485..bc047843 100644
--- a/config/module.df
+++ b/config/module.df
@@ -36,5 +36,7 @@
#
# A module is also called a component or a subsystem.
-MOD_NAME = nspr20
-MOD_VERSION = 4
+MOD_NAME = $(NSPR_MODNAME)
+MOD_VERSION = $(MOD_MAJOR_VERSION)
+MOD_MINOR = $(MOD_MINOR_VERSION)
+MOD_PATCH = $(MOD_REVISION_VERSION)
diff --git a/config/now.c b/config/now.c
index 784b5cea..28beb7be 100644
--- a/config/now.c
+++ b/config/now.c
@@ -39,7 +39,9 @@
#include <sys/timeb.h>
#elif defined(XP_UNIX) || defined(XP_OS2_EMX) || defined(XP_BEOS)
#include <sys/time.h>
-#elif defined(WIN32) || defined(XP_OS2_VACPP)
+#elif defined(WIN32)
+#include <windows.h>
+#elif defined(XP_OS2_VACPP)
#include <sys/timeb.h>
#else
#error "Architecture not supported"
@@ -86,12 +88,20 @@ int main(int argc, char **argv)
#elif defined(WIN32)
__int64 now;
- struct timeb b;
- ftime(&b);
- now = b.time;
- now *= 1000000;
- now += (1000 * b.millitm);
+ FILETIME ft;
+ GetSystemTimeAsFileTime(&ft);
+ CopyMemory(&now, &ft, sizeof(now));
+ /*
+ * 116444736000000000 is the number of 100-nanosecond intervals
+ * between Jan. 1, 1601 and Jan. 1, 1970.
+ */
+#ifdef __GNUC__
+ now = (now - 116444736000000000LL) / 10LL;
+ fprintf(stdout, "%lld", now);
+#else
+ now = (now - 116444736000000000i64) / 10i64;
fprintf(stdout, "%I64d", now);
+#endif
#elif defined(XP_OS2_VACPP)
/* no long long or i64 so we use a string */
diff --git a/config/nsinstall.c b/config/nsinstall.c
index 0f3cd3e2..a5ef8dca 100644
--- a/config/nsinstall.c
+++ b/config/nsinstall.c
@@ -365,6 +365,11 @@ main(int argc, char **argv)
if (ftruncate(tofd, sb.st_size) < 0)
fail("cannot truncate %s", toname);
+ /*
+ ** On OpenVMS we can't chmod() until the file is closed, and we
+ ** have to utime() last since fchown/chmod alter the timestamps.
+ */
+#ifndef VMS
if (dotimes) {
utb.actime = sb.st_atime;
utb.modtime = sb.st_mtime;
@@ -377,6 +382,7 @@ main(int argc, char **argv)
if (chmod(toname, mode) < 0)
#endif
fail("cannot change mode of %s", toname);
+#endif
if ((owner || group) && fchown(tofd, uid, gid) < 0)
fail("cannot change owner of %s", toname);
@@ -384,6 +390,16 @@ main(int argc, char **argv)
if (close(tofd) < 0)
fail("cannot write to %s", toname);
close(fromfd);
+#ifdef VMS
+ if (chmod(toname, mode) < 0)
+ fail("cannot change mode of %s", toname);
+ if (dotimes) {
+ utb.actime = sb.st_atime;
+ utb.modtime = sb.st_mtime;
+ if (utime(toname, &utb) < 0)
+ fail("cannot set times of %s", toname);
+ }
+#endif
}
free(toname);
diff --git a/config/prdepend.h b/config/prdepend.h
index 8bebd56b..28c1b139 100644
--- a/config/prdepend.h
+++ b/config/prdepend.h
@@ -39,3 +39,4 @@
*/
#error "Do not include this header file."
+
diff --git a/config/rules.mk b/config/rules.mk
index ffd63dfc..3cecd88d 100644
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -160,6 +160,19 @@ ALL_TRASH = $(TARGETS) $(OBJS) $(filter-out . .., $(OBJDIR)) LOGS TAGS $(GARBAG
$(NOSUCHFILE) \
so_locations
+ifeq ($(OS_ARCH),OpenVMS)
+ALL_TRASH += $(wildcard *.c*_defines)
+ifdef SHARED_LIBRARY
+VMS_SYMVEC_FILE = $(SHARED_LIBRARY:.$(DLL_SUFFIX)=_symvec.opt)
+VMS_SYMVEC_FILE_MODULE = $(srcdir)/$(LIBRARY_NAME)_symvec.opt
+ALL_TRASH += $(VMS_SYMVEC_FILE)
+endif
+endif
+
+ifndef RELEASE_LIBS_DEST
+RELEASE_LIBS_DEST = $(RELEASE_LIB_DIR)
+endif
+
ifdef DIRS
LOOP_OVER_DIRS = \
@for d in $(DIRS); do \
@@ -206,10 +219,10 @@ ifdef RELEASE_BINS
$(NSINSTALL) -t -m 0755 $(RELEASE_BINS) $(DESTDIR)$(bindir)
endif
ifdef RELEASE_HEADERS
- $(NSINSTALL) -t -m 0644 $(RELEASE_HEADERS) $(DESTDIR)$(includedir)
+ $(NSINSTALL) -t -m 0644 $(RELEASE_HEADERS) $(DESTDIR)$(includedir)/$(include_subdir)
endif
ifdef RELEASE_LIBS
- $(NSINSTALL) -t -m 0755 $(RELEASE_LIBS) $(DESTDIR)$(libdir)
+ $(NSINSTALL) -t -m 0755 $(RELEASE_LIBS) $(DESTDIR)$(libdir)/$(lib_subdir)
endif
+$(LOOP_OVER_DIRS)
@@ -238,13 +251,13 @@ ifdef RELEASE_LIBS
else \
true; \
fi
- @if test ! -d $(RELEASE_LIB_DIR); then \
- rm -rf $(RELEASE_LIB_DIR); \
- $(NSINSTALL) -D $(RELEASE_LIB_DIR);\
+ @if test ! -d $(RELEASE_LIBS_DEST); then \
+ rm -rf $(RELEASE_LIBS_DEST); \
+ $(NSINSTALL) -D $(RELEASE_LIBS_DEST);\
else \
true; \
fi
- cp $(RELEASE_LIBS) $(RELEASE_LIB_DIR)
+ cp $(RELEASE_LIBS) $(RELEASE_LIBS_DEST)
endif
ifdef RELEASE_HEADERS
@echo "Copying header files to release directory"
@@ -274,7 +287,7 @@ $(NFSPWD):
$(PROGRAM): $(OBJS)
@$(MAKE_OBJDIR)
-ifeq ($(OS_ARCH),WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
$(CC) $(OBJS) -Fe$@ -link $(LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS)
else
ifeq ($(MOZ_OS2_TOOLS),VACPP)
@@ -301,8 +314,8 @@ ifeq ($(OS_TARGET), OS2)
$(IMPORT_LIBRARY): $(SHARED_LIBRARY)
$(IMPLIB) $@ $(SHARED_LIBRARY).def
endif
-
-$(SHARED_LIBRARY): $(OBJS)
+
+$(SHARED_LIBRARY): $(OBJS) $(MAPFILE)
@$(MAKE_OBJDIR)
rm -f $@
ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
@@ -314,7 +327,7 @@ ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
$(LD) $(XCFLAGS) -o $@ $(OBJS) -bE:$(OBJDIR)/lib$(LIBRARY_NAME)_syms \
-bM:SRE -bnoentry $(OS_LIBS) $(EXTRA_LIBS)
else # AIX 4.1
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
$(LINK_DLL) -MAP $(DLLBASE) $(DLL_LIBS) $(EXTRA_LIBS) $(OBJS)
else
ifeq ($(OS_ARCH),OS2)
@@ -328,14 +341,14 @@ ifeq ($(OS_ARCH),OS2)
$(LINK_DLL) $(DLLBASE) $(OBJS) $(OS_LIBS) $(EXTRA_LIBS) $@.def
else # OS2
ifeq ($(OS_TARGET), OpenVMS)
- @if test ! -f $(OBJDIR)/VMSuni.opt; then \
- echo "Creating universal symbol option file $(OBJDIR)/VMSuni.opt";\
- create_opt_uni $(OBJS); \
+ @if test ! -f $(VMS_SYMVEC_FILE); then \
+ if test -f $(VMS_SYMVEC_FILE_MODULE); then \
+ echo Creating component options file $(VMS_SYMVEC_FILE); \
+ cp $(VMS_SYMVEC_FILE_MODULE) $(VMS_SYMVEC_FILE); \
+ fi; \
fi
- $(MKSHLIB) -o $@ $(OBJS) $(EXTRA_LIBS) $(OBJDIR)/VMSuni.opt
-else # OpenVMS
- $(MKSHLIB) $(OBJS) $(EXTRA_LIBS)
endif # OpenVMS
+ $(MKSHLIB) $(OBJS) $(EXTRA_LIBS)
endif # OS2
endif # WINNT
endif # AIX 4.1
@@ -350,14 +363,25 @@ ifeq ($(OS_TARGET),OS2)
$(RC) -DOS2 -r $< $@
else
# The resource compiler does not understand the -U option.
- $(RC) $(filter-out -U%,$(DEFINES)) $(INCLUDES) -Fo$@ $<
+ifdef NS_USE_GCC
+ $(RC) $(RCFLAGS) $(filter-out -U%,$(DEFINES)) $(INCLUDES:-I%=--include-dir %) -o $@ $<
+else
+ $(RC) $(RCFLAGS) $(filter-out -U%,$(DEFINES)) $(INCLUDES) -Fo$@ $<
+endif # GCC
endif
@echo $(RES) finished
endif
+$(MAPFILE): $(LIBRARY_NAME).def
+ @$(MAKE_OBJDIR)
+ifeq ($(OS_ARCH),SunOS)
+ grep -v ';-' $< | \
+ sed -e 's,;+,,' -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,;,' > $@
+endif
+
$(OBJDIR)/%.$(OBJ_SUFFIX): %.cpp
@$(MAKE_OBJDIR)
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
$(CCC) -Fo$@ -c $(CCCFLAGS) $<
else
ifeq ($(MOZ_OS2_TOOLS),VACPP)
@@ -372,7 +396,7 @@ WCCFLAGS2 = $(subst -I,-i=,$(WCCFLAGS1))
WCCFLAGS3 = $(subst -D,-d,$(WCCFLAGS2))
$(OBJDIR)/%.$(OBJ_SUFFIX): %.c
@$(MAKE_OBJDIR)
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
$(CC) -Fo$@ -c $(CFLAGS) $<
else
ifeq ($(MOZ_OS2_TOOLS),VACPP)
diff --git a/configure b/configure
index e5d01dbe..05bcb355 100755
--- a/configure
+++ b/configure
@@ -39,6 +39,9 @@ ac_help="$ac_help
ac_help="$ac_help
--enable-mdupdate Enable use of certain compilers' mdupdate feature"
ac_help="$ac_help
+ --enable-macos-target=VER (default=10.1)
+ Set the minimum MacOS version needed at runtime"
+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"
@@ -614,7 +617,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:618: checking host system type" >&5
+echo "configure:621: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -635,7 +638,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:639: checking target system type" >&5
+echo "configure:642: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@@ -653,7 +656,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:657: checking build system type" >&5
+echo "configure:660: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -677,7 +680,7 @@ test "$host_alias" != "$target_alias" &&
MOD_MAJOR_VERSION=4
-MOD_MINOR_VERSION=2
+MOD_MINOR_VERSION=3
MOD_REVISION_VERSION=0
NSPR_MODNAME=nspr20
_HAVE_PTHREADS=
@@ -689,6 +692,7 @@ USE_64=
USE_CPLUS=
USE_IPV6=
USE_MDUPDATE=
+MACOS_DEPLOYMENT_TARGET=
_OPTIMIZE_FLAGS=-O
_DEBUG_FLAGS=-g
MOZ_DEBUG=1
@@ -700,6 +704,7 @@ NSINSTALL='$(MOD_DEPTH)/config/$(OBJDIR_NAME)/nsinstall'
NOSUCHFILE=/no-such-file
LIBNSPR='-L$(dist_libdir) -lnspr$(MOD_MAJOR_VERSION)'
LIBPLC='-L$(dist_libdir) -lplc$(MOD_MAJOR_VERSION)'
+CYGWIN_WRAPPER=
RESOLVE_LINK_SYMBOLS=
@@ -710,16 +715,51 @@ HOST_CFLAGS="${HOST_CFLAGS=}"
HOST_LDFLAGS="${HOST_LDFLAGS=}"
case "$target" in
-*-cygwin*)
+*-cygwin*|*-mingw*)
# Check to see if we are really running in a msvc environemnt
_WIN32_MSVC=
- if test "$CC" = "cl" || test "$CXX" = "cl"; then
- _WIN32_MSVC=1
- elif test -z "$CC"; then
+ 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:727: 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"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$CC" && break
+done
+
+ if test "$CC" = "cl"; then
echo 'main() { return 0; }' > dummy.c
- cl -o dummy dummy.c
+ ${CC} -o dummy dummy.c >/dev/null 2>&1
if test $? = 0; then
_WIN32_MSVC=1
+ CXX=$CC
+ else
+ echo "configure: warning: $(CC) test failed. Using normal feature tests" 1>&2
fi
rm -f dummy dummy.o dummy.obj dummy.exe dummy.c
fi
@@ -871,6 +911,15 @@ if test "${enable_mdupdate+set}" = set; then
fi
+# Check whether --enable-macos-target or --disable-macos-target was given.
+if test "${enable_macos_target+set}" = set; then
+ enableval="$enable_macos_target"
+ MACOS_DEPLOYMENT_TARGET_STR=$enableval
+else
+ MACOS_DEPLOYMENT_TARGET_STR=10.1
+fi
+
+
case "$target" in
*-aix*)
@@ -905,6 +954,10 @@ if test -z "$CC"; then
CC=cc
;;
+ *-openvms*)
+ CC=cc
+ ;;
+
*-osf*)
CC=cc
;;
@@ -945,6 +998,10 @@ if test -z "$CXX"; then
CXX=CC
;;
+ *-openvms*)
+ CXX=cxx
+ ;;
+
*-osf*)
CXX=cxx
;;
@@ -960,7 +1017,7 @@ if test -z "$SKIP_PATH_CHECKS"; then
# Extract the first word of "$WHOAMI whoami", so it can be a program name with args.
set dummy $WHOAMI whoami; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:964: checking for $ac_word" >&5
+echo "configure:1021: 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
@@ -993,8 +1050,6 @@ else
echo "$ac_t""no" 1>&6
fi
-elif test -z "$WHOAMI"; then
- WHOAMI=whoami
fi
if test -n "$MOZ_DEBUG"; then
@@ -1002,11 +1057,19 @@ if test -n "$MOZ_DEBUG"; then
#define DEBUG 1
EOF
- cat >> confdefs.h <<EOF
-#define DEBUG_`$WHOAMI` 1
-EOF
-
DEFINES="$DEFINES -UNDEBUG"
+
+ case "${target_os}" in
+ beos*)
+ DEFINES="$DEFINES -DDEBUG_${USER}"
+ ;;
+ msvc*|mksnt*|cygwin*|mingw*)
+ DEFINES="$DEFINES -DDEBUG_`echo ${USERNAME} | sed -e 's| |_|g'`"
+ ;;
+ *)
+ DEFINES="$DEFINES -DDEBUG_`$WHOAMI`"
+ ;;
+ esac
else
cat >> confdefs.h <<\EOF
#define NDEBUG 1
@@ -1025,14 +1088,14 @@ if test "$target" != "$host"; then
_SAVE_LDFLAGS="$LDFLAGS"
echo $ac_n "checking for $host compiler""... $ac_c" 1>&6
-echo "configure:1029: checking for $host compiler" >&5
+echo "configure:1092: checking for $host compiler" >&5
if test -z "$HOST_CC"; then
for ac_prog in 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:1036: checking for $ac_word" >&5
+echo "configure:1099: 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
@@ -1079,16 +1142,16 @@ test -n "$HOST_CC" || HOST_CC=""""
LDFLAGS="$HOST_LDFLAGS"
echo $ac_n "checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1083: checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5
+echo "configure:1146: checking whether the $host compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5
cat > conftest.$ac_ext <<EOF
-#line 1085 "configure"
+#line 1148 "configure"
#include "confdefs.h"
int main() {
return(0);
; return 0; }
EOF
-if { (eval echo configure:1092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1155: \"$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
@@ -1109,7 +1172,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1113: checking for $ac_word" >&5
+echo "configure:1176: 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
@@ -1144,7 +1207,7 @@ test -n "$CC" || CC="echo"
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1148: checking for $ac_word" >&5
+echo "configure:1211: 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
@@ -1174,7 +1237,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1178: checking for $ac_word" >&5
+echo "configure:1241: 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
@@ -1225,7 +1288,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1229: checking for $ac_word" >&5
+echo "configure:1292: 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
@@ -1257,7 +1320,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1261: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1324: 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.
@@ -1268,12 +1331,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 1272 "configure"
+#line 1335 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1340: \"$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
@@ -1299,12 +1362,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1303: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1366: 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:1308: checking whether we are using GNU C" >&5
+echo "configure:1371: 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
@@ -1313,7 +1376,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1317: \"$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:1380: \"$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
@@ -1332,7 +1395,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1336: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1399: 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
@@ -1369,7 +1432,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1373: checking for $ac_word" >&5
+echo "configure:1436: 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
@@ -1406,7 +1469,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1410: checking for $ac_word" >&5
+echo "configure:1473: 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
@@ -1438,7 +1501,7 @@ test -n "$CXX" || CXX="gcc"
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1442: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1505: 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.
@@ -1449,12 +1512,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext << EOF
-#line 1453 "configure"
+#line 1516 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
-if { (eval echo configure:1458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1521: \"$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
@@ -1480,12 +1543,12 @@ if test $ac_cv_prog_cxx_works = no; then
{ echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1484: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1547: 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:1489: checking whether we are using GNU C++" >&5
+echo "configure:1552: 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
@@ -1494,7 +1557,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1498: \"$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:1561: \"$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
@@ -1513,7 +1576,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS=
echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1517: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1580: 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
@@ -1550,7 +1613,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1554: checking for $ac_word" >&5
+echo "configure:1617: 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
@@ -1587,7 +1650,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1591: checking for $ac_word" >&5
+echo "configure:1654: 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
@@ -1624,7 +1687,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1628: checking for $ac_word" >&5
+echo "configure:1691: 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
@@ -1661,7 +1724,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1665: checking for $ac_word" >&5
+echo "configure:1728: 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
@@ -1698,7 +1761,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1702: checking for $ac_word" >&5
+echo "configure:1765: 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
@@ -1729,50 +1792,13 @@ done
test -n "$STRIP" || STRIP="echo"
fi
- if test -z "$DLLTOOL"; then
- for ac_prog in "${target_alias}-dlltool" "${target}-dlltool"
-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:1739: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$DLLTOOL"; then
- ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_DLLTOOL="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-DLLTOOL="$ac_cv_prog_DLLTOOL"
-if test -n "$DLLTOOL"; then
- echo "$ac_t""$DLLTOOL" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$DLLTOOL" && break
-done
-test -n "$DLLTOOL" || DLLTOOL="echo"
-
- fi
if test -z "$WINDRES"; then
for ac_prog in "${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:1776: checking for $ac_word" >&5
+echo "configure:1802: 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
@@ -1810,7 +1836,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1814: checking for $ac_word" >&5
+echo "configure:1840: 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
@@ -1842,7 +1868,7 @@ test -n "$CXX" || CXX="gcc"
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1846: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1872: 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.
@@ -1853,12 +1879,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext << EOF
-#line 1857 "configure"
+#line 1883 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
-if { (eval echo configure:1862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1888: \"$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
@@ -1884,12 +1910,12 @@ if test $ac_cv_prog_cxx_works = no; then
{ echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1888: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1914: 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:1893: checking whether we are using GNU C++" >&5
+echo "configure:1919: 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
@@ -1898,7 +1924,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1902: \"$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:1928: \"$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
@@ -1917,7 +1943,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS=
echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1921: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1947: 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
@@ -1954,7 +1980,7 @@ fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1958: checking for $ac_word" >&5
+echo "configure:1984: 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
@@ -1984,7 +2010,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1988: checking for $ac_word" >&5
+echo "configure:2014: 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
@@ -2035,7 +2061,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2039: checking for $ac_word" >&5
+echo "configure:2065: 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
@@ -2067,7 +2093,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2071: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2097: 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.
@@ -2078,12 +2104,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 2082 "configure"
+#line 2108 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:2087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2113: \"$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
@@ -2109,12 +2135,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2113: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2139: 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:2118: checking whether we are using GNU C" >&5
+echo "configure:2144: 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
@@ -2123,7 +2149,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2127: \"$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:2153: \"$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
@@ -2142,7 +2168,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2146: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2172: 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
@@ -2175,7 +2201,7 @@ fi
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2179: checking how to run the C preprocessor" >&5
+echo "configure:2205: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -2190,13 +2216,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 2194 "configure"
+#line 2220 "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:2200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2226: \"$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
:
@@ -2207,13 +2233,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 2211 "configure"
+#line 2237 "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:2217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2243: \"$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
:
@@ -2224,13 +2250,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 2228 "configure"
+#line 2254 "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:2234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2260: \"$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
:
@@ -2257,7 +2283,7 @@ echo "$ac_t""$CPP" 1>&6
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2261: checking for $ac_word" >&5
+echo "configure:2287: 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
@@ -2289,7 +2315,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2293: checking for $ac_word" >&5
+echo "configure:2319: 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
@@ -2330,7 +2356,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2334: checking for $ac_word" >&5
+echo "configure:2360: 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
@@ -2371,7 +2397,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2375: checking for $ac_word" >&5
+echo "configure:2401: 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
@@ -2412,7 +2438,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2416: checking for $ac_word" >&5
+echo "configure:2442: 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
@@ -2448,53 +2474,12 @@ test -n "$STRIP" && break
done
test -n "$STRIP" || STRIP="echo not_strip"
- for ac_prog in dlltool
-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:2457: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_DLLTOOL'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$DLLTOOL" in
- /*)
- ac_cv_path_DLLTOOL="$DLLTOOL" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_DLLTOOL="$DLLTOOL" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_DLLTOOL="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac
-fi
-DLLTOOL="$ac_cv_path_DLLTOOL"
-if test -n "$DLLTOOL"; then
- echo "$ac_t""$DLLTOOL" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$DLLTOOL" && break
-done
-test -n "$DLLTOOL" || DLLTOOL="echo not_dlltool"
-
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:2498: checking for $ac_word" >&5
+echo "configure:2483: 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
@@ -2556,10 +2541,10 @@ else
fi
echo $ac_n "checking for gcc -pipe support""... $ac_c" 1>&6
-echo "configure:2560: checking for gcc -pipe support" >&5
+echo "configure:2545: 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"); exit(0); }' >> 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
@@ -2571,14 +2556,14 @@ if test -n "$GNU_CC" && test -n "$GNU_CXX" && test -n "$GNU_AS"; then
_SAVE_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -pipe"
cat > conftest.$ac_ext <<EOF
-#line 2575 "configure"
+#line 2560 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
printf("Hello World\n");
; return 0; }
EOF
-if { (eval echo configure:2582: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
_res_gcc_pipe="yes"
else
@@ -2611,7 +2596,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2615: checking for $ac_word" >&5
+echo "configure:2600: 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
@@ -2671,12 +2656,21 @@ if test "$OS_ARCH" = "IRIX64"; then
OS_ARCH=IRIX
fi
+if test "$OS_ARCH" = "AIX"; then
+ OS_RELEASE=`uname -v`.`uname -r`
+fi
+
+if test "$OS_ARCH" = "FreeBSD"; then
+ OS_RELEASE=`echo $OS_RELEASE | sed 's/-.*//'`
+fi
+
if test "$OS_ARCH" = "Linux"; then
OS_RELEASE=`echo $OS_RELEASE | sed 's/-.*//'`
+ OS_RELEASE=`echo $OS_RELEASE | awk -F\. '{ print $1 "." $2 }'`
fi
-if test "$OS_ARCH" = "POSIX_for_OpenVMS_AXP"; then
- OS_ARCH=OpenVMS
+if test "$OS_ARCH" = "OpenVMS"; then
+ OS_RELEASE=`uname -v`
fi
#######################################################################
@@ -2714,10 +2708,7 @@ elif test "$OS_ARCH" = 'Windows_95'; then
elif test "$OS_ARCH" = 'Windows_98'; then
OS_ARCH=Windows_NT
OS_TARGET=WIN95
-elif test "$OS_ARCH" = "CYGWIN_95-4.0"; then
- OS_ARCH='CYGWIN_NT-4.0'
- OS_TARGET=WIN95
-elif test "$OS_ARCH" = "CYGWIN_98-4.10"; then
+elif test "`echo $OS_ARCH | egrep -c '^(CYGWIN_9|CYGWIN_ME)' 2>/dev/null`" != 0; then
OS_ARCH='CYGWIN_NT-4.0'
OS_TARGET=WIN95
elif test "$OS_ARCH" = "OS_2"; then
@@ -2835,17 +2826,17 @@ EOF
DSO_LDOPTS='-brtl -bM:SRE -bnoentry -bexpall'
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:2839: checking for sys/atomic_op.h" >&5
+echo "configure:2830: 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 2844 "configure"
+#line 2835 "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:2849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2840: \"$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*
@@ -2922,7 +2913,7 @@ EOF
EOF
cat >> confdefs.h <<\EOF
-#define AIX4_3 1
+#define AIX4_3_PLUS 1
EOF
cat >> confdefs.h <<\EOF
@@ -2946,6 +2937,10 @@ EOF
EOF
cat >> confdefs.h <<\EOF
+#define AIX4_3_PLUS 1
+EOF
+
+ cat >> confdefs.h <<\EOF
#define HAVE_SOCKLEN_T 1
EOF
@@ -2967,11 +2962,7 @@ EOF
MDCPUCFG_H=_aix64.cfg
OBJECT_MODE=64
else
- if test -n "$USE_IPV6"; then
- MDCPUCFG_H=_aix32in6.cfg
- else
- MDCPUCFG_H=_aix32.cfg
- fi
+ MDCPUCFG_H=_aix32.cfg
fi
PR_MD_CSRCS=aix.c
RESOLVE_LINK_SYMBOLS=1
@@ -3004,6 +2995,46 @@ EOF
_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:3000: 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 3008 "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:3019: \"$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
+ OS_LIBS="$OS_LIBS -lbind -lsocket"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
;;
powerpc)
CC=mwcc
@@ -3087,7 +3118,7 @@ EOF
PR_MD_ASFILES=os_BSD_OS_386_2.s
;;
- bsdi4.*)
+ bsdi4.* | bsdi5.*)
cat >> confdefs.h <<\EOF
#define _PR_SELECT_CONST_TIMEVAL 1
EOF
@@ -3113,7 +3144,7 @@ EOF
DSO_LDOPTS='-shared -Wl,-soname,$(@:$(OBJDIR)/%.so=%.so)'
STRIP="$STRIP -d"
case "$target_os" in
- bsdi4.2*)
+ bsdi4.2* | bsdi4.3* | bsdi5.*)
cat >> confdefs.h <<\EOF
#define _PR_HAVE_GETPROTO_R 1
EOF
@@ -3166,7 +3197,6 @@ EOF
CFLAGS="$CFLAGS -Wmost -fno-common"
if echo $OS_TEST | grep -c 86 2>/dev/null; then
- CFLAGS="$CFLAGS -mno-486"
cat >> confdefs.h <<\EOF
#define i386 1
EOF
@@ -3188,6 +3218,31 @@ EOF
USE_PTHREADS=1
MDCPUCFG_H=_darwin.cfg
PR_MD_CSRCS=darwin.c
+
+ # Add Mac OS X support for loading CFM & CFBundle plugins
+ if test -f /System/Library/Frameworks/Carbon.framework/Carbon; then
+ cat >> confdefs.h <<\EOF
+#define XP_MACOSX 1
+EOF
+
+ OS_TARGET=MacOSX
+
+
+ MACOS_VERSION_MAJOR=`echo $MACOS_DEPLOYMENT_TARGET_STR | cut -d . -f 1`
+ MACOS_VERSION_MINOR=`echo $MACOS_DEPLOYMENT_TARGET_STR | cut -d . -f 2`
+ MACOS_VERSION_MICRO=`echo $MACOS_DEPLOYMENT_TARGET_STR | cut -d . -f 3`
+ if test -z "$MACOS_VERSION_MINOR"; then
+ MACOS_VERSION_MINOR=0
+ fi
+ if test -z "$MACOS_VERSION_MICRO"; then
+ MACOS_VERSION_MICRO=0
+ fi
+ MACOS_DEPLOYMENT_TARGET=`printf "%02d%02d%02d" "$MACOS_VERSION_MAJOR" "$MACOS_VERSION_MINOR" "$MACOS_VERSION_MICRO"`
+ cat >> confdefs.h <<EOF
+#define MACOS_DEPLOYMENT_TARGET $MACOS_DEPLOYMENT_TARGET
+EOF
+
+ fi
;;
*-dgux*)
@@ -3249,8 +3304,9 @@ EOF
else
DLL_SUFFIX=so.1.0
fi
+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
DSO_CFLAGS=-fPIC
- DSO_LDOPTS=-Bshareable
+ DSO_LDOPTS='-shared -Wl,-soname -Wl,$(notdir $@)'
MDCPUCFG_H=_freebsd.cfg
PR_MD_CSRCS=freebsd.c
;;
@@ -3272,10 +3328,24 @@ EOF
#define hppa 1
EOF
+ # OSF1 and HPUX report the POLLHUP event for a socket when the
+ # shutdown(SHUT_WR) operation is called for the remote end, even though
+ # the socket is still writeable. Use select(), instead of poll(), to
+ # workaround this problem.
+ cat >> confdefs.h <<\EOF
+#define _PR_POLL_WITH_SELECT 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define _USE_BIG_FDS 1
+EOF
+
DLL_SUFFIX=sl
DSO_LDOPTS='-b +h $(notdir $@)'
PR_MD_CSRCS=hpux.c
- PR_MD_ASFILES=os_HPUX.s
+ if test "$OS_TEST" != "ia64"; then
+ PR_MD_ASFILES=os_HPUX.s
+ fi
if test -n "$USE_64"; then
MDCPUCFG_H=_hpux64.cfg
else
@@ -3284,8 +3354,6 @@ EOF
if test -z "$GNU_CC"; then
CC="$CC -Ae"
CXX="$CXX -ext"
- CFLAGS="$CFLAGS +ESlit"
- CXXFLAGS="$CXXFLAGS +ESlit"
DSO_CFLAGS=+Z
else
DSO_CFLAGS=-fPIC
@@ -3329,7 +3397,7 @@ EOF
fi
- if echo "$OS_RELEASE" | egrep '^(B.10.30|B.11.00|B.11.11)' >/dev/null; then
+ if echo "$OS_RELEASE" | egrep '^(B.10.30|B.11.00|B.11.11|B.11.20)' >/dev/null; then
cat >> confdefs.h <<\EOF
#define HAVE_POINTER_LOCALTIME_R 1
EOF
@@ -3388,7 +3456,7 @@ EOF
DEFAULT_IMPL_STRATEGY=_PTH
fi
- if echo "$OS_RELEASE" | egrep '^(B.11.00|B.11.11)' >/dev/null; then
+ if echo "$OS_RELEASE" | egrep '^(B.11.00|B.11.11|B.11.20)' >/dev/null; then
cat >> confdefs.h <<\EOF
#define HPUX10 1
EOF
@@ -3411,11 +3479,21 @@ EOF
if test -z "$GNU_CC"; then
if test -z "$USE_64"; then
- CFLAGS="$CFLAGS +DAportable +DS2.0"
- CXXFLAGS="$CXXFLAGS +DAportable +DS2.0"
+ if test "$OS_TEST" = "ia64"; then
+ CFLAGS="$CFLAGS +DD32"
+ CXXFLAGS="$CXXFLAGS +DD32"
+ else
+ CFLAGS="$CFLAGS +DAportable +DS2.0"
+ CXXFLAGS="$CXXFLAGS +DAportable +DS2.0"
+ fi
else
- CFLAGS="$CFLAGS +DA2.0W +DS2.0"
- CXXFLAGS="$CXXFLAGS +DA2.0W +DS2.0"
+ if test "$OS_TEST" = "ia64"; then
+ CFLAGS="$CFLAGS +DD64"
+ CXXFLAGS="$CXXFLAGS +DD64"
+ else
+ CFLAGS="$CFLAGS +DA2.0W +DS2.0"
+ CXXFLAGS="$CXXFLAGS +DA2.0W +DS2.0"
+ fi
fi
fi
DEFAULT_IMPL_STRATEGY=_PTH
@@ -3597,10 +3675,6 @@ EOF
#define LINUX 1
EOF
- cat >> confdefs.h <<\EOF
-#define linux 1
-EOF
-
CFLAGS="$CFLAGS -ansi -Wall"
CXXFLAGS="$CXXFLAGS -ansi -Wall"
MDCPUCFG_H=_linux.cfg
@@ -3608,8 +3682,11 @@ EOF
MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
DSO_CFLAGS=-fPIC
DSO_LDOPTS='-shared -Wl,-soname -Wl,$(notdir $@)'
- OS_LIBS="$OS_LIBS -lc"
_OPTIMIZE_FLAGS=-O2
+ _DEBUG_FLAGS="-g -fno-inline" # most people on linux use gcc/gdb, and that
+ # combo is not yet good at debugging inlined
+ # functions (even when using DWARF2 as the
+ # debugging format)
COMPILER_TAG=_glibc
if echo "$OS_TEST" | grep -c 86 >/dev/null; then
CPU_ARCH=x86
@@ -3641,14 +3718,8 @@ EOF
PR_MD_ASFILES=os_Linux_ia64.s
;;
m68k)
- CFLAGS="$CFLAGS -m68020-40"
- CXXFLAGS="$CXXFLAGS -m68020-40"
- #
- # gcc on Linux/m68k either has a bug or triggers a code-sequence
- # bug in the 68060 which causes gcc to crash. The simplest way to
- # avoid this is to enable a minimum level of optimization.
- #
- _DEBUG_FLAGS="$_DEBUG_FLAGS -O"
+ CFLAGS="$CFLAGS -m68020-60"
+ CXXFLAGS="$CXXFLAGS -m68020-60"
;;
esac
;;
@@ -3664,13 +3735,16 @@ EOF
PR_MD_ARCH_DIR=windows
RESOLVE_LINK_SYMBOLS=1
+ NSINSTALL='$(CYGWIN_WRAPPER) nsinstall'
+ CYGWIN_WRAPPER='sh $(topsrcdir)/build/cygwin-wrapper'
if test -n "$GNU_CC"; then
- cat >> confdefs.h <<\EOF
-#define NONAMELESSUNION 1
-EOF
-
- MKSHLIB='$(DLLTOOL) --as=$(AS) -k --dllname $*.dll --output-lib $@'
+ CC="$CC -mno-cygwin"
+ CXX="$CXX -mno-cygwin"
+ DLL_SUFFIX=dll
+ MKSHLIB='$(CC) -shared -Wl,--export-all-symbols -Wl,--out-implib -Wl,$(IMPORT_LIBRARY) $(DLLBASE) -o $(subst $(OBJDIR)/,,$(SHARED_LIBRARY))'
+ RC=$WINDRES
+ RCFLAGS='-O coff'
else
CC=cl
CXX=cl
@@ -3679,12 +3753,11 @@ EOF
AR_FLAGS=
RANLIB='echo not_ranlib'
STRIP='echo not_strip'
- NSINSTALL=nsinstall
RC=rc.exe
GARBAGE='$(OBJDIR)/vc20.pdb $(OBJDIR)/vc40.pdb'
- OBJ_SUFFIX=obj
- LIB_SUFFIX=lib
- DLL_SUFFIX=dll
+ OBJ_SUFFIX=obj
+ LIB_SUFFIX=lib
+ DLL_SUFFIX=dll
CFLAGS="$CFLAGS -W3 -nologo -GF -Gy"
@@ -3756,6 +3829,8 @@ EOF
#define WIN95 1
EOF
+ # undefine WINNT as some versions of mingw gcc define it by default
+ DEFINES="$DEFINES -UWINNT"
cat >> confdefs.h <<\EOF
#define _PR_GLOBAL_THREADS_ONLY 1
EOF
@@ -4058,32 +4133,16 @@ EOF
#define VMS 1
EOF
- cat >> confdefs.h <<\EOF
-#define VMS_AS_IS 1
-EOF
-
- cat >> confdefs.h <<\EOF
-#define _SOCKADDR_LEN 1
-EOF
-
- cat >> confdefs.h <<\EOF
-#define GENERIC_PTHREAD_REDEFINES 1
-EOF
-
RESOLVE_LINK_SYMBOLS=1
- CROSS_COMPILE=1
- _HAVE_PTHREADS=1
- HOST_CC=c89
- HOST_CXX=cxx
- HOST_CFLAGS=-O
- HOST_CXXFLAGS=-O
- CC=ccc
- CXX=ccc
- CFLAGS="$CFLAGS -Wc,names=\(short,as\)"
- CXXFLAGS="$CXXFLAGS -Wc,names=\(short,as\)"
+ AR_FLAGS='c $@'
MDCPUCFG_H=_openvms.cfg
PR_MD_CSRCS=openvms.c
- MKSHLIB='vmsld $(OPTIMIZER)'
+ DSO_LDOPTS='-shared -auto_symvec $(LDFLAGS)'
+ if test -n "$MOZ_DEBUG"; then
+ DSO_LDOPTS="$DSO_LDOPTS $_DEBUG_FLAGS"
+ else
+ DSO_LDOPTS="$DSO_LDOPTS $_OPTIMIZE_FLAGS"
+ fi
;;
*-osf*)
@@ -4100,19 +4159,38 @@ EOF
#define _REENTRANT 1
EOF
- ac_safe=`echo "machine/builtins.h" | sed 'y%./+-%__p_%'`
+ # OSF1 and HPUX report the POLLHUP event for a socket when the
+ # shutdown(SHUT_WR) operation is called for the remote end, even though
+ # the socket is still writeable. Use select(), instead of poll(), to
+ # workaround this problem.
+ cat >> confdefs.h <<\EOF
+#define _PR_POLL_WITH_SELECT 1
+EOF
+
+
+ if echo "$OS_RELEASE" | egrep -c '(V2.0|V3.2)' 2>/dev/null ; then
+ USE_NSPR_THREADS=1
+ fi
+
+ 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:4106: checking for machine/builtins.h" >&5
+echo "configure:4184: 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 4111 "configure"
+#line 4189 "configure"
#include "confdefs.h"
#include <machine/builtins.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4116: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4194: \"$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*
@@ -4136,17 +4214,9 @@ else
echo "$ac_t""no" 1>&6
fi
-
- if echo "$OS_RELEASE" | egrep -c '(V2.0|V3.2)' 2>/dev/null ; then
- USE_NSPR_THREADS=1
- fi
-
- 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"
+ else
+ CFLAGS="$CFLAGS -mieee"
+ CXXFLAGS="$CXXFLAGS -mieee"
fi
if echo $OS_RELEASE | egrep -c '(V2.0|V3.2)' 2>/dev/null; then
@@ -4355,11 +4425,15 @@ EOF
MDCPUCFG_H=_solaris32.cfg
fi
PR_MD_CSRCS=solaris.c
- DSO_LDOPTS='-G -h $(notdir $@)'
+ LD=/usr/ccs/bin/ld
+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
+ RESOLVE_LINK_SYMBOLS=1
if test -n "$GNU_CC"; then
DSO_CFLAGS=-fPIC
+ DSO_LDOPTS='-B/usr/ccs/bin/ -shared -Wl,-h,$(notdir $@),-z,combreloc,-z,defs'
else
DSO_CFLAGS=-KPIC
+ DSO_LDOPTS='-G -h $(notdir $@) -z combreloc -z defs'
fi
if test -z "$GNU_AS"; then
ASFLAGS="$ASFLAGS -Wa,-P"
@@ -4372,8 +4446,8 @@ EOF
CXXFLAGS="$CXXFLAGS -MDupdate \$(DEPENDENCIES)"
fi
else
- CC="$CC -xstrconst"
- CXX="$CXX -Qoption cg -xstrconst"
+ CFLAGS="$CFLAGS -xstrconst"
+ CXXFLAGS="$CXXFLAGS -Qoption cg -xstrconst"
if test -z "$MOZ_OPTIMIZE"; then
CFLAGS="$CFLAGS -xs"
CXXFLAGS="$CXXFLAGS -xs"
@@ -4443,11 +4517,14 @@ EOF
# 64-bit Solaris requires SPARC V9 architecture, so the following
# is not needed.
if test -z "$USE_64"; then
- ULTRASPARC_LIBRARY=ultrasparc
- ULTRASPARC_FILTER_LIBRARY=libatomic.so
- DSO_LDOPTS="$DSO_LDOPTS -f "'$(ULTRASPARC_FILTER_LIBRARY)'
+ ULTRASPARC_LIBRARY=nspr_flt
fi
fi
+ # Purify requires that binaries linked against nspr also
+ # be linked against -lrt (or -lposix4) so add it to OS_LIBS
+ _rev=`uname -r`
+ _librt=`echo $_rev 5.6 | awk '{ if ($1 > $2) print "-lrt"; else print "-lposix4" }'`
+ OS_LIBS="$OS_LIBS $_librt"
;;
*-sco-sysv5*)
@@ -4502,11 +4579,11 @@ EOF
EOF
cat >> confdefs.h <<\EOF
-#define BSD_SELECT 1
+#define XP_PC 1
EOF
cat >> confdefs.h <<\EOF
-#define XP_PC 1
+#define BSD_SELECT 1
EOF
cat >> confdefs.h <<\EOF
@@ -4517,7 +4594,6 @@ EOF
LIB_SUFFIX=lib
DLL_SUFFIX=dll
ASM_SUFFIX=asm
- DLLTOOL=''
RC=rc.exe
PR_MD_ARCH_DIR=os2
PROG_SUFFIX=.exe
@@ -4622,12 +4698,12 @@ esac
if test -z "$SKIP_LIBRARY_CHECKS"; then
echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "configure:4626: checking for dlopen" >&5
+echo "configure:4702: checking for dlopen" >&5
if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4631 "configure"
+#line 4707 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char dlopen(); below. */
@@ -4650,7 +4726,7 @@ dlopen();
; return 0; }
EOF
-if { (eval echo configure:4654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_dlopen=yes"
else
@@ -4669,7 +4745,7 @@ else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:4673: checking for dlopen in -ldl" >&5
+echo "configure:4749: 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
@@ -4677,7 +4753,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4681 "configure"
+#line 4757 "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
@@ -4688,7 +4764,7 @@ int main() {
dlopen()
; return 0; }
EOF
-if { (eval echo configure:4692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4768: \"$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
@@ -4716,13 +4792,13 @@ fi
if test $ac_cv_prog_gcc = yes; then
echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:4720: checking whether ${CC-cc} needs -traditional" >&5
+echo "configure:4796: 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 4726 "configure"
+#line 4802 "configure"
#include "confdefs.h"
#include <sgtty.h>
Autoconf TIOCGETP
@@ -4740,7 +4816,7 @@ rm -f conftest*
if test $ac_cv_prog_gcc_traditional = no; then
cat > conftest.$ac_ext <<EOF
-#line 4744 "configure"
+#line 4820 "configure"
#include "confdefs.h"
#include <termio.h>
Autoconf TCGETA
@@ -4764,12 +4840,12 @@ fi
for ac_func in lchown strerror
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4768: checking for $ac_func" >&5
+echo "configure:4844: 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 4773 "configure"
+#line 4849 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4792,7 +4868,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4872: \"$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
@@ -4826,20 +4902,55 @@ if test "${enable_strip+set}" = set; then
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:4911: 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
+ if test -z "`egrep -i '(unrecognize|unknown)' conftest.out`"; then
+ ac_cv_hpux_usable_olit_option=yes
+ fi
+ fi
+ rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_hpux_usable_olit_option" 1>&6
+
+ if test "$ac_cv_hpux_usable_olit_option" = "yes"; then
+ CFLAGS="$CFLAGS +Olit=all"
+ CXXFLAGS="$CXXFLAGS +Olit=all"
+ else
+ CFLAGS="$CFLAGS +ESlit"
+ CXXFLAGS="$CXXFLAGS +ESlit"
+ fi
+fi
+;;
+esac
+
echo $ac_n "checking for pthread_create in -lpthreads""... $ac_c" 1>&6
-echo "configure:4834: checking for pthread_create in -lpthreads" >&5
+echo "configure:4945: checking for pthread_create in -lpthreads" >&5
echo "
#include <pthread.h>
- void *foo(void *v) { int a = 1; }
+ void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
- exit(0);
+ return 0;
}" > dummy.c ;
echo "${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -lpthreads $LDFLAGS $LIBS" 1>&5;
${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -lpthreads $LDFLAGS $LIBS 2>&5;
@@ -4852,16 +4963,16 @@ echo "
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:4856: checking for pthread_create in -lpthread" >&5
+echo "configure:4967: checking for pthread_create in -lpthread" >&5
echo "
#include <pthread.h>
- void *foo(void *v) { int a = 1; }
+ void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
- exit(0);
+ return 0;
}" > dummy.c ;
echo "${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -lpthread $LDFLAGS $LIBS" 1>&5;
${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -lpthread $LDFLAGS $LIBS 2>&5;
@@ -4874,16 +4985,16 @@ echo "
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6
-echo "configure:4878: checking for pthread_create in -lc_r" >&5
+echo "configure:4989: checking for pthread_create in -lc_r" >&5
echo "
#include <pthread.h>
- void *foo(void *v) { int a = 1; }
+ void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
- exit(0);
+ return 0;
}" > dummy.c ;
echo "${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -lc_r $LDFLAGS $LIBS" 1>&5;
${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -lc_r $LDFLAGS $LIBS 2>&5;
@@ -4896,16 +5007,16 @@ echo "
echo "$ac_t""no" 1>&6
echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6
-echo "configure:4900: checking for pthread_create in -lc" >&5
+echo "configure:5011: checking for pthread_create in -lc" >&5
echo "
#include <pthread.h>
- void *foo(void *v) { int a = 1; }
+ void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
- exit(0);
+ return 0;
}" > dummy.c ;
echo "${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -lc $LDFLAGS $LIBS" 1>&5;
${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -lc $LDFLAGS $LIBS 2>&5;
@@ -4946,7 +5057,7 @@ if test "${with_pthreads+set}" = set; then
_PTHREAD_LDFLAGS=
fi
else
- if test -n "$_HAVE_PTHREADS" && test -z "$USE_USER_PTHREADS" && test -z "$USER_NSPR_THREADS"; then
+ if test -n "$_HAVE_PTHREADS" && test -z "$USE_USER_PTHREADS" && test -z "$USE_NSPR_THREADS"; then
USE_PTHREADS=1
USE_USER_PTHREADS=
USE_NSPR_THREADS=
@@ -5024,6 +5135,8 @@ if test "${enable_ipv6+set}" = set; then
enableval="$enable_ipv6"
if test "$enableval" = "yes"; then
USE_IPV6=1
+ else
+ USE_IPV6=
fi
fi
@@ -5046,14 +5159,21 @@ 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:5050: checking whether ${CC-cc} accepts -pthread" >&5
+echo "configure:5163: 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
- CFLAGS="$CFLAGS -pthread"
- CXXFLAGS="$CXXFLAGS -pthread"
+ case "$target_os" in
+ freebsd*)
+# Freebsd doesn't use -pthread for compiles, it uses them for linking
+ ;;
+ *)
+ CFLAGS="$CFLAGS -pthread"
+ CXXFLAGS="$CXXFLAGS -pthread"
+ ;;
+ esac
fi
fi
rm -f conftest*
@@ -5062,7 +5182,7 @@ echo "configure:5050: checking whether ${CC-cc} accepts -pthread" >&5
ac_cv_have_dash_pthreads=no
if test "$ac_cv_have_dash_pthread" = "no"; then
echo $ac_n "checking whether ${CC-cc} accepts -pthreads""... $ac_c" 1>&6
-echo "configure:5066: checking whether ${CC-cc} accepts -pthreads" >&5
+echo "configure:5186: 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
@@ -5082,7 +5202,22 @@ echo "configure:5066: checking whether ${CC-cc} accepts -pthreads" >&5
_PTHREAD_LDFLAGS=
fi
;;
- *-freebsd*|*-openbsd*|*-bsdi*|*-netbsd*)
+ *-freebsd*)
+ cat >> confdefs.h <<\EOF
+#define _REENTRANT 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define _THREAD_SAFE 1
+EOF
+
+ if test "$ac_cv_have_dash_pthread" = "yes"; then
+ _PTHREAD_LDFLAGS="-pthread"
+ else
+ _PTHREAD_LDFLAGS="-lc_r"
+ fi
+ ;;
+ *-openbsd*|*-bsdi*|*-netbsd*)
cat >> confdefs.h <<\EOF
#define _THREAD_SAFE 1
EOF
@@ -5147,6 +5282,20 @@ EOF
fi
;;
+ *)
+ if test -z "$USE_NSPR_THREADS"; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_POINTER_LOCALTIME_R 1
+EOF
+
+ fi
+ if test -n "$USE_PTHREADS"; then
+ cat >> confdefs.h <<\EOF
+#define _PR_HAVE_THREADSAFE_GETHOST 1
+EOF
+
+ fi
+ ;;
esac
;;
*-bsdi*)
@@ -5227,7 +5376,7 @@ EOF
_PTHREAD_LDFLAGS=
USE_USER_PTHREADS=
;;
-*-netbsd*)
+*-netbsd*|*-openbsd*)
if test -n "$USE_NSPR_THREADS"; then
cat >> confdefs.h <<\EOF
#define _PR_LOCAL_THREADS_ONLY 1
@@ -5328,6 +5477,14 @@ fi
RELEASE_OBJDIR_NAME="${OS_CONFIG}${CPU_ARCH_TAG}${COMPILER_TAG}${IMPL_STRATEGY}${OBJDIR_TAG}.${OBJDIR_SUFFIX}"
+case "$target_os" in
+mingw*|cygwin*|msvc*|mksnt*)
+ CC="\$(CYGWIN_WRAPPER) $CC"
+ CXX="\$(CYGWIN_WRAPPER) $CXX"
+ RC="\$(CYGWIN_WRAPPER) $RC"
+ ;;
+esac
+
@@ -5430,6 +5587,9 @@ lib/libc/Makefile
lib/libc/include/Makefile
lib/libc/src/Makefile
lib/tests/Makefile
+pkg/solaris/Makefile
+pkg/solaris/SUNWpr/Makefile
+pkg/solaris/SUNWprx/Makefile
pr/Makefile
pr/include/Makefile
pr/include/md/Makefile
@@ -5461,6 +5621,10 @@ if test -n "$USE_CPLUS"; then
MAKEFILES="$MAKEFILES pr/src/cplus/Makefile pr/src/cplus/tests/Makefile"
fi
+if test ! -d pkg; then
+ mkdir pkg
+fi
+
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
@@ -5620,20 +5784,19 @@ s%@build_alias@%$build_alias%g
s%@build_cpu@%$build_cpu%g
s%@build_vendor@%$build_vendor%g
s%@build_os@%$build_os%g
+s%@CC@%$CC%g
s%@dist_prefix@%$dist_prefix%g
s%@dist_bindir@%$dist_bindir%g
s%@dist_includedir@%$dist_includedir%g
s%@dist_libdir@%$dist_libdir%g
s%@WHOAMI@%$WHOAMI%g
s%@HOST_CC@%$HOST_CC%g
-s%@CC@%$CC%g
s%@CXX@%$CXX%g
s%@RANLIB@%$RANLIB%g
s%@AR@%$AR%g
s%@AS@%$AS%g
s%@LD@%$LD%g
s%@STRIP@%$STRIP%g
-s%@DLLTOOL@%$DLLTOOL%g
s%@WINDRES@%$WINDRES%g
s%@CPP@%$CPP%g
s%@PERL@%$PERL%g
@@ -5677,6 +5840,7 @@ s%@OS_TARGET@%$OS_TARGET%g
s%@OS_ARCH@%$OS_ARCH%g
s%@OS_RELEASE@%$OS_RELEASE%g
s%@OS_TEST@%$OS_TEST%g
+s%@MACOS_DEPLOYMENT_TARGET@%$MACOS_DEPLOYMENT_TARGET%g
s%@DEFINES@%$DEFINES%g
s%@AR_FLAGS@%$AR_FLAGS%g
s%@ASFLAGS@%$ASFLAGS%g
@@ -5688,16 +5852,17 @@ s%@AIX_LINK_OPTS@%$AIX_LINK_OPTS%g
s%@NOSUCHFILE@%$NOSUCHFILE%g
s%@MOZ_OBJFORMAT@%$MOZ_OBJFORMAT%g
s%@ULTRASPARC_LIBRARY@%$ULTRASPARC_LIBRARY%g
-s%@ULTRASPARC_FILTER_LIBRARY@%$ULTRASPARC_FILTER_LIBRARY%g
s%@OBJDIR@%$OBJDIR%g
s%@OBJDIR_NAME@%$OBJDIR_NAME%g
s%@RELEASE_OBJDIR_NAME@%$RELEASE_OBJDIR_NAME%g
s%@NSINSTALL@%$NSINSTALL%g
s%@OPTIMIZER@%$OPTIMIZER%g
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
CEOF
EOF
diff --git a/configure.in b/configure.in
index 462e62e0..3182e477 100644
--- a/configure.in
+++ b/configure.in
@@ -43,7 +43,7 @@ dnl ========================================================
dnl = Defaults
dnl ========================================================
MOD_MAJOR_VERSION=4
-MOD_MINOR_VERSION=2
+MOD_MINOR_VERSION=3
MOD_REVISION_VERSION=0
NSPR_MODNAME=nspr20
_HAVE_PTHREADS=
@@ -55,6 +55,7 @@ USE_64=
USE_CPLUS=
USE_IPV6=
USE_MDUPDATE=
+MACOS_DEPLOYMENT_TARGET=
_OPTIMIZE_FLAGS=-O
_DEBUG_FLAGS=-g
MOZ_DEBUG=1
@@ -66,6 +67,7 @@ NSINSTALL='$(MOD_DEPTH)/config/$(OBJDIR_NAME)/nsinstall'
NOSUCHFILE=/no-such-file
LIBNSPR='-L$(dist_libdir) -lnspr$(MOD_MAJOR_VERSION)'
LIBPLC='-L$(dist_libdir) -lplc$(MOD_MAJOR_VERSION)'
+CYGWIN_WRAPPER=
dnl Link in libraries necessary to resolve all symbols for shared libs
RESOLVE_LINK_SYMBOLS=
@@ -84,16 +86,18 @@ HOST_CFLAGS="${HOST_CFLAGS=}"
HOST_LDFLAGS="${HOST_LDFLAGS=}"
case "$target" in
-*-cygwin*)
+*-cygwin*|*-mingw*)
# Check to see if we are really running in a msvc environemnt
_WIN32_MSVC=
- if test "$CC" = "cl" || test "$CXX" = "cl"; then
- _WIN32_MSVC=1
- elif test -z "$CC"; then
+ AC_CHECK_PROGS(CC, cl)
+ if test "$CC" = "cl"; then
echo 'main() { return 0; }' > dummy.c
- cl -o dummy dummy.c
+ ${CC} -o dummy dummy.c >/dev/null 2>&1
if test $? = 0; then
_WIN32_MSVC=1
+ CXX=$CC
+ else
+ AC_MSG_WARN([$(CC) test failed. Using normal feature tests])
fi
rm -f dummy dummy.o dummy.obj dummy.exe dummy.c
fi
@@ -212,6 +216,12 @@ AC_ARG_ENABLE(mdupdate,
USE_MDUPDATE=1
fi ])
+AC_ARG_ENABLE(macos-target,
+ [ --enable-macos-target=VER (default=10.1)
+ Set the minimum MacOS version needed at runtime],
+ [MACOS_DEPLOYMENT_TARGET_STR=$enableval],
+ [MACOS_DEPLOYMENT_TARGET_STR=10.1])
+
dnl ========================================================
dnl =
dnl = Set the threading model
@@ -256,6 +266,10 @@ if test -z "$CC"; then
CC=cc
;;
+ *-openvms*)
+ CC=cc
+ ;;
+
*-osf*)
CC=cc
;;
@@ -301,6 +315,10 @@ if test -z "$CXX"; then
CXX=CC
;;
+ *-openvms*)
+ CXX=cxx
+ ;;
+
*-osf*)
CXX=cxx
;;
@@ -314,14 +332,23 @@ fi
if test -z "$SKIP_PATH_CHECKS"; then
AC_PATH_PROG(WHOAMI, $WHOAMI whoami, echo not_whoami)
-elif test -z "$WHOAMI"; then
- WHOAMI=whoami
fi
if test -n "$MOZ_DEBUG"; then
AC_DEFINE(DEBUG)
- AC_DEFINE_UNQUOTED(DEBUG_`$WHOAMI`)
DEFINES="$DEFINES -UNDEBUG"
+
+ case "${target_os}" in
+ beos*)
+ DEFINES="$DEFINES -DDEBUG_${USER}"
+ ;;
+ msvc*|mksnt*|cygwin*|mingw*)
+ DEFINES="$DEFINES -DDEBUG_`echo ${USERNAME} | sed -e 's| |_|g'`"
+ ;;
+ *)
+ DEFINES="$DEFINES -DDEBUG_`$WHOAMI`"
+ ;;
+ esac
else
AC_DEFINE(NDEBUG)
DEFINES="$DEFINES -UDEBUG"
@@ -392,9 +419,6 @@ if test "$target" != "$host"; then
if test -z "$STRIP"; then
AC_CHECK_PROGS(STRIP, "${target_alias}-strip" "${target}-strip", echo)
fi
- if test -z "$DLLTOOL"; then
- AC_CHECK_PROGS(DLLTOOL, "${target_alias}-dlltool" "${target}-dlltool", echo)
- fi
if test -z "$WINDRES"; then
AC_CHECK_PROGS(WINDRES, "${target_alias}-windres" "${target}-windres", echo)
fi
@@ -412,7 +436,6 @@ else
AC_PATH_PROGS(AR, ar, echo not_ar)
AC_PATH_PROGS(LD, ld link, echo not_ld)
AC_PATH_PROGS(STRIP, strip, echo not_strip)
- AC_PATH_PROGS(DLLTOOL, dlltool, echo not_dlltool)
AC_PATH_PROGS(WINDRES, windres, echo not_windres)
if test -z "$HOST_CC"; then
HOST_CC="$CC"
@@ -445,7 +468,7 @@ dnl ========================================================
AC_MSG_CHECKING([for gcc -pipe support])
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"); exit(0); }' >> 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
@@ -509,12 +532,21 @@ if test "$OS_ARCH" = "IRIX64"; then
OS_ARCH=IRIX
fi
+if test "$OS_ARCH" = "AIX"; then
+ OS_RELEASE=`uname -v`.`uname -r`
+fi
+
+if test "$OS_ARCH" = "FreeBSD"; then
+ OS_RELEASE=`echo $OS_RELEASE | sed 's/-.*//'`
+fi
+
if test "$OS_ARCH" = "Linux"; then
OS_RELEASE=`echo $OS_RELEASE | sed 's/-.*//'`
+ OS_RELEASE=`echo $OS_RELEASE | awk -F\. '{ print $1 "." $2 }'`
fi
-if test "$OS_ARCH" = "POSIX_for_OpenVMS_AXP"; then
- OS_ARCH=OpenVMS
+if test "$OS_ARCH" = "OpenVMS"; then
+ OS_RELEASE=`uname -v`
fi
#######################################################################
@@ -552,10 +584,7 @@ elif test "$OS_ARCH" = 'Windows_95'; then
elif test "$OS_ARCH" = 'Windows_98'; then
OS_ARCH=Windows_NT
OS_TARGET=WIN95
-elif test "$OS_ARCH" = "CYGWIN_95-4.0"; then
- OS_ARCH='CYGWIN_NT-4.0'
- OS_TARGET=WIN95
-elif test "$OS_ARCH" = "CYGWIN_98-4.10"; then
+elif test "`echo $OS_ARCH | egrep -c '^(CYGWIN_9|CYGWIN_ME)' 2>/dev/null`" != 0; then
OS_ARCH='CYGWIN_NT-4.0'
OS_TARGET=WIN95
elif test "$OS_ARCH" = "OS_2"; then
@@ -695,7 +724,7 @@ case "$target" in
aix4.3*)
AC_DEFINE(AIX_TIMERS)
AC_DEFINE(_PR_HAVE_OFF64_T)
- AC_DEFINE(AIX4_3)
+ AC_DEFINE(AIX4_3_PLUS)
AC_DEFINE(HAVE_SOCKLEN_T)
AC_DEFINE(HAVE_FCNTL_FILE_LOCKING)
USE_IPV6=1
@@ -704,6 +733,7 @@ case "$target" in
*)
AC_DEFINE(AIX_TIMERS)
AC_DEFINE(_PR_HAVE_OFF64_T)
+ AC_DEFINE(AIX4_3_PLUS)
AC_DEFINE(HAVE_SOCKLEN_T)
AC_DEFINE(HAVE_FCNTL_FILE_LOCKING)
USE_IPV6=1
@@ -720,11 +750,7 @@ case "$target" in
MDCPUCFG_H=_aix64.cfg
OBJECT_MODE=64
else
- if test -n "$USE_IPV6"; then
- MDCPUCFG_H=_aix32in6.cfg
- else
- MDCPUCFG_H=_aix32.cfg
- fi
+ MDCPUCFG_H=_aix32.cfg
fi
PR_MD_CSRCS=aix.c
RESOLVE_LINK_SYMBOLS=1
@@ -745,6 +771,7 @@ case "$target" in
_OPTIMIZE_FLAGS=-O2
_DEBUG_FLAGS='-gdwarf-2 -O0'
MKSHLIB='$(CCC) $(DSO_LDOPTS) -o $@'
+ AC_CHECK_LIB(bind, gethostbyaddr, [OS_LIBS="$OS_LIBS -lbind -lsocket"])
;;
powerpc)
CC=mwcc
@@ -795,7 +822,7 @@ case "$target" in
PR_MD_ASFILES=os_BSD_OS_386_2.s
;;
- bsdi4.*)
+ bsdi4.* | bsdi5.*)
AC_DEFINE(_PR_SELECT_CONST_TIMEVAL)
AC_DEFINE(_PR_BSDI_JMPBUF_IS_STRUCT)
AC_DEFINE(HAVE_DLL)
@@ -806,7 +833,7 @@ case "$target" in
DSO_LDOPTS='-shared -Wl,-soname,$(@:$(OBJDIR)/%.so=%.so)'
STRIP="$STRIP -d"
case "$target_os" in
- bsdi4.2*)
+ bsdi4.2* | bsdi4.3* | bsdi5.*)
AC_DEFINE(_PR_HAVE_GETPROTO_R)
AC_DEFINE(_PR_HAVE_GETPROTO_R_POINTER)
;;
@@ -829,7 +856,6 @@ case "$target" in
AC_DEFINE(HAVE_BSD_FLOCK)
CFLAGS="$CFLAGS -Wmost -fno-common"
if echo $OS_TEST | grep -c 86 2>/dev/null; then
- CFLAGS="$CFLAGS -mno-486"
AC_DEFINE(i386)
CPU_ARCH=i386
else
@@ -845,6 +871,28 @@ case "$target" in
USE_PTHREADS=1
MDCPUCFG_H=_darwin.cfg
PR_MD_CSRCS=darwin.c
+
+ # Add Mac OS X support for loading CFM & CFBundle plugins
+ if test -f /System/Library/Frameworks/Carbon.framework/Carbon; then
+ AC_DEFINE(XP_MACOSX)
+ OS_TARGET=MacOSX
+
+ dnl The C preprocessor can only handle integers in comparisons, so
+ dnl convert the version to the form AABBCC where AA=major release,
+ dnl BB=minor release, and CC=point/micro release.
+
+ MACOS_VERSION_MAJOR=`echo $MACOS_DEPLOYMENT_TARGET_STR | cut -d . -f 1`
+ MACOS_VERSION_MINOR=`echo $MACOS_DEPLOYMENT_TARGET_STR | cut -d . -f 2`
+ MACOS_VERSION_MICRO=`echo $MACOS_DEPLOYMENT_TARGET_STR | cut -d . -f 3`
+ if test -z "$MACOS_VERSION_MINOR"; then
+ MACOS_VERSION_MINOR=0
+ fi
+ if test -z "$MACOS_VERSION_MICRO"; then
+ MACOS_VERSION_MICRO=0
+ fi
+ MACOS_DEPLOYMENT_TARGET=`printf "%02d%02d%02d" "$MACOS_VERSION_MAJOR" "$MACOS_VERSION_MINOR" "$MACOS_VERSION_MICRO"`
+ AC_DEFINE_UNQUOTED(MACOS_DEPLOYMENT_TARGET, $MACOS_DEPLOYMENT_TARGET)
+ fi
;;
*-dgux*)
@@ -876,8 +924,9 @@ case "$target" in
else
DLL_SUFFIX=so.1.0
fi
+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
DSO_CFLAGS=-fPIC
- DSO_LDOPTS=-Bshareable
+ DSO_LDOPTS='-shared -Wl,-soname -Wl,$(notdir $@)'
MDCPUCFG_H=_freebsd.cfg
PR_MD_CSRCS=freebsd.c
;;
@@ -887,10 +936,18 @@ case "$target" in
AC_DEFINE(HPUX)
AC_DEFINE(_HPUX_SOURCE)
AC_DEFINE(hppa)
+ # OSF1 and HPUX report the POLLHUP event for a socket when the
+ # shutdown(SHUT_WR) operation is called for the remote end, even though
+ # the socket is still writeable. Use select(), instead of poll(), to
+ # workaround this problem.
+ AC_DEFINE(_PR_POLL_WITH_SELECT)
+ AC_DEFINE(_USE_BIG_FDS)
DLL_SUFFIX=sl
DSO_LDOPTS='-b +h $(notdir $@)'
PR_MD_CSRCS=hpux.c
- PR_MD_ASFILES=os_HPUX.s
+ if test "$OS_TEST" != "ia64"; then
+ PR_MD_ASFILES=os_HPUX.s
+ fi
if test -n "$USE_64"; then
MDCPUCFG_H=_hpux64.cfg
else
@@ -899,8 +956,6 @@ case "$target" in
if test -z "$GNU_CC"; then
CC="$CC -Ae"
CXX="$CXX -ext"
- CFLAGS="$CFLAGS +ESlit"
- CXXFLAGS="$CXXFLAGS +ESlit"
DSO_CFLAGS=+Z
else
DSO_CFLAGS=-fPIC
@@ -929,7 +984,7 @@ case "$target" in
AC_DEFINE(HAVE_INT_LOCALTIME_R)
fi
- if echo "$OS_RELEASE" | egrep '^(B.10.30|B.11.00|B.11.11)' >/dev/null; then
+ if echo "$OS_RELEASE" | egrep '^(B.10.30|B.11.00|B.11.11|B.11.20)' >/dev/null; then
AC_DEFINE(HAVE_POINTER_LOCALTIME_R)
fi
@@ -964,7 +1019,7 @@ case "$target" in
DEFAULT_IMPL_STRATEGY=_PTH
fi
- if echo "$OS_RELEASE" | egrep '^(B.11.00|B.11.11)' >/dev/null; then
+ if echo "$OS_RELEASE" | egrep '^(B.11.00|B.11.11|B.11.20)' >/dev/null; then
AC_DEFINE(HPUX10)
AC_DEFINE(HPUX11)
AC_DEFINE(_LARGEFILE64_SOURCE)
@@ -972,11 +1027,21 @@ case "$target" in
AC_DEFINE(HAVE_FCNTL_FILE_LOCKING)
if test -z "$GNU_CC"; then
if test -z "$USE_64"; then
- CFLAGS="$CFLAGS +DAportable +DS2.0"
- CXXFLAGS="$CXXFLAGS +DAportable +DS2.0"
+ if test "$OS_TEST" = "ia64"; then
+ CFLAGS="$CFLAGS +DD32"
+ CXXFLAGS="$CXXFLAGS +DD32"
+ else
+ CFLAGS="$CFLAGS +DAportable +DS2.0"
+ CXXFLAGS="$CXXFLAGS +DAportable +DS2.0"
+ fi
else
- CFLAGS="$CFLAGS +DA2.0W +DS2.0"
- CXXFLAGS="$CXXFLAGS +DA2.0W +DS2.0"
+ if test "$OS_TEST" = "ia64"; then
+ CFLAGS="$CFLAGS +DD64"
+ CXXFLAGS="$CXXFLAGS +DD64"
+ else
+ CFLAGS="$CFLAGS +DA2.0W +DS2.0"
+ CXXFLAGS="$CXXFLAGS +DA2.0W +DS2.0"
+ fi
fi
fi
DEFAULT_IMPL_STRATEGY=_PTH
@@ -1108,7 +1173,6 @@ case "$target" in
AC_DEFINE(_LARGEFILE64_SOURCE)
AC_DEFINE(HAVE_FCNTL_FILE_LOCKING)
AC_DEFINE(LINUX)
- AC_DEFINE(linux)
CFLAGS="$CFLAGS -ansi -Wall"
CXXFLAGS="$CXXFLAGS -ansi -Wall"
MDCPUCFG_H=_linux.cfg
@@ -1116,8 +1180,11 @@ case "$target" in
MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
DSO_CFLAGS=-fPIC
DSO_LDOPTS='-shared -Wl,-soname -Wl,$(notdir $@)'
- OS_LIBS="$OS_LIBS -lc"
_OPTIMIZE_FLAGS=-O2
+ _DEBUG_FLAGS="-g -fno-inline" # most people on linux use gcc/gdb, and that
+ # combo is not yet good at debugging inlined
+ # functions (even when using DWARF2 as the
+ # debugging format)
COMPILER_TAG=_glibc
if echo "$OS_TEST" | grep -c 86 >/dev/null; then
CPU_ARCH=x86
@@ -1140,14 +1207,8 @@ case "$target" in
PR_MD_ASFILES=os_Linux_ia64.s
;;
m68k)
- CFLAGS="$CFLAGS -m68020-40"
- CXXFLAGS="$CXXFLAGS -m68020-40"
- #
- # gcc on Linux/m68k either has a bug or triggers a code-sequence
- # bug in the 68060 which causes gcc to crash. The simplest way to
- # avoid this is to enable a minimum level of optimization.
- #
- _DEBUG_FLAGS="$_DEBUG_FLAGS -O"
+ CFLAGS="$CFLAGS -m68020-60"
+ CXXFLAGS="$CXXFLAGS -m68020-60"
;;
esac
;;
@@ -1157,10 +1218,16 @@ case "$target" in
AC_DEFINE(WIN32)
PR_MD_ARCH_DIR=windows
RESOLVE_LINK_SYMBOLS=1
+ NSINSTALL='$(CYGWIN_WRAPPER) nsinstall'
+ CYGWIN_WRAPPER='sh $(topsrcdir)/build/cygwin-wrapper'
if test -n "$GNU_CC"; then
- AC_DEFINE(NONAMELESSUNION)
- MKSHLIB='$(DLLTOOL) --as=$(AS) -k --dllname $*.dll --output-lib $@'
+ CC="$CC -mno-cygwin"
+ CXX="$CXX -mno-cygwin"
+ DLL_SUFFIX=dll
+ MKSHLIB='$(CC) -shared -Wl,--export-all-symbols -Wl,--out-implib -Wl,$(IMPORT_LIBRARY) $(DLLBASE) -o $(subst $(OBJDIR)/,,$(SHARED_LIBRARY))'
+ RC=$WINDRES
+ RCFLAGS='-O coff'
else
CC=cl
CXX=cl
@@ -1169,12 +1236,11 @@ case "$target" in
AR_FLAGS=
RANLIB='echo not_ranlib'
STRIP='echo not_strip'
- NSINSTALL=nsinstall
RC=rc.exe
GARBAGE='$(OBJDIR)/vc20.pdb $(OBJDIR)/vc40.pdb'
- OBJ_SUFFIX=obj
- LIB_SUFFIX=lib
- DLL_SUFFIX=dll
+ OBJ_SUFFIX=obj
+ LIB_SUFFIX=lib
+ DLL_SUFFIX=dll
CFLAGS="$CFLAGS -W3 -nologo -GF -Gy"
@@ -1234,6 +1300,8 @@ case "$target" in
AC_DEFINE(WINNT)
else
AC_DEFINE(WIN95)
+ # undefine WINNT as some versions of mingw gcc define it by default
+ DEFINES="$DEFINES -UWINNT"
AC_DEFINE(_PR_GLOBAL_THREADS_ONLY)
fi
@@ -1419,23 +1487,16 @@ mips-sony-newsos*)
*-openvms*)
AC_DEFINE(XP_UNIX)
AC_DEFINE(VMS)
- AC_DEFINE(VMS_AS_IS)
- AC_DEFINE(_SOCKADDR_LEN)
- AC_DEFINE(GENERIC_PTHREAD_REDEFINES)
RESOLVE_LINK_SYMBOLS=1
- CROSS_COMPILE=1
- _HAVE_PTHREADS=1
- HOST_CC=c89
- HOST_CXX=cxx
- HOST_CFLAGS=-O
- HOST_CXXFLAGS=-O
- CC=ccc
- CXX=ccc
- CFLAGS="$CFLAGS -Wc,names=\(short,as\)"
- CXXFLAGS="$CXXFLAGS -Wc,names=\(short,as\)"
+ AR_FLAGS='c $@'
MDCPUCFG_H=_openvms.cfg
PR_MD_CSRCS=openvms.c
- MKSHLIB='vmsld $(OPTIMIZER)'
+ DSO_LDOPTS='-shared -auto_symvec $(LDFLAGS)'
+ if test -n "$MOZ_DEBUG"; then
+ DSO_LDOPTS="$DSO_LDOPTS $_DEBUG_FLAGS"
+ else
+ DSO_LDOPTS="$DSO_LDOPTS $_OPTIMIZE_FLAGS"
+ fi
;;
*-osf*)
@@ -1443,7 +1504,11 @@ mips-sony-newsos*)
AC_DEFINE(XP_UNIX)
AC_DEFINE(OSF1)
AC_DEFINE(_REENTRANT)
- AC_CHECK_HEADER(machine/builtins.h, AC_DEFINE(OSF1_HAVE_MACHINE_BUILTINS_H))
+ # OSF1 and HPUX report the POLLHUP event for a socket when the
+ # shutdown(SHUT_WR) operation is called for the remote end, even though
+ # the socket is still writeable. Use select(), instead of poll(), to
+ # workaround this problem.
+ AC_DEFINE(_PR_POLL_WITH_SELECT)
if echo "$OS_RELEASE" | egrep -c '(V2.0|V3.2)' 2>/dev/null ; then
USE_NSPR_THREADS=1
@@ -1455,6 +1520,10 @@ mips-sony-newsos*)
CC="$CC -readonly_strings"
fi
_OPTIMIZE_FLAGS="$_OPTIMIZE_FLAGS -Olimit 4000"
+ AC_CHECK_HEADER(machine/builtins.h, AC_DEFINE(OSF1_HAVE_MACHINE_BUILTINS_H))
+ else
+ CFLAGS="$CFLAGS -mieee"
+ CXXFLAGS="$CXXFLAGS -mieee"
fi
if echo $OS_RELEASE | egrep -c '(V2.0|V3.2)' 2>/dev/null; then
@@ -1573,11 +1642,15 @@ mips-sony-newsos*)
MDCPUCFG_H=_solaris32.cfg
fi
PR_MD_CSRCS=solaris.c
- DSO_LDOPTS='-G -h $(notdir $@)'
+ LD=/usr/ccs/bin/ld
+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
+ RESOLVE_LINK_SYMBOLS=1
if test -n "$GNU_CC"; then
DSO_CFLAGS=-fPIC
+ DSO_LDOPTS='-B/usr/ccs/bin/ -shared -Wl,-h,$(notdir $@),-z,combreloc,-z,defs'
else
DSO_CFLAGS=-KPIC
+ DSO_LDOPTS='-G -h $(notdir $@) -z combreloc -z defs'
fi
if test -z "$GNU_AS"; then
ASFLAGS="$ASFLAGS -Wa,-P"
@@ -1590,8 +1663,8 @@ mips-sony-newsos*)
CXXFLAGS="$CXXFLAGS -MDupdate \$(DEPENDENCIES)"
fi
else
- CC="$CC -xstrconst"
- CXX="$CXX -Qoption cg -xstrconst"
+ CFLAGS="$CFLAGS -xstrconst"
+ CXXFLAGS="$CXXFLAGS -Qoption cg -xstrconst"
if test -z "$MOZ_OPTIMIZE"; then
CFLAGS="$CFLAGS -xs"
CXXFLAGS="$CXXFLAGS -xs"
@@ -1643,11 +1716,14 @@ mips-sony-newsos*)
# 64-bit Solaris requires SPARC V9 architecture, so the following
# is not needed.
if test -z "$USE_64"; then
- ULTRASPARC_LIBRARY=ultrasparc
- ULTRASPARC_FILTER_LIBRARY=libatomic.so
- DSO_LDOPTS="$DSO_LDOPTS -f "'$(ULTRASPARC_FILTER_LIBRARY)'
+ ULTRASPARC_LIBRARY=nspr_flt
fi
fi
+ # Purify requires that binaries linked against nspr also
+ # be linked against -lrt (or -lposix4) so add it to OS_LIBS
+ _rev=`uname -r`
+ _librt=`echo $_rev 5.6 | awk '{ if ($1 > $2) print "-lrt"; else print "-lposix4" }'`
+ OS_LIBS="$OS_LIBS $_librt"
;;
*-sco-sysv5*)
@@ -1674,14 +1750,13 @@ mips-sony-newsos*)
*-os2*)
AC_DEFINE(XP_OS2)
- AC_DEFINE(BSD_SELECT)
AC_DEFINE(XP_PC)
+ AC_DEFINE(BSD_SELECT)
AC_DEFINE(_PR_GLOBAL_THREADS_ONLY)
OBJ_SUFFIX=obj
LIB_SUFFIX=lib
DLL_SUFFIX=dll
ASM_SUFFIX=asm
- DLLTOOL=''
RC=rc.exe
PR_MD_ARCH_DIR=os2
PROG_SUFFIX=.exe
@@ -1847,6 +1922,38 @@ AC_ARG_ENABLE(strip,
[ --enable-strip Enable stripping of shared libs and programs],
[ ENABLE_STRIP=1 ])
+dnl Check for hpux options
+case "${target_os}" in
+hpux*)
+if test -z "$GNU_CC"; then
+
+ AC_CACHE_CHECK(for +Olit support,
+ ac_cv_hpux_usable_olit_option,
+ dnl since aCC doesn't throw an error on invalid options,
+ dnl we have to test this the hard way
+ [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
+ if test -z "`egrep -i '(unrecognize|unknown)' conftest.out`"; then
+ ac_cv_hpux_usable_olit_option=yes
+ fi
+ fi
+ rm -f conftest*
+ ])
+
+ if test "$ac_cv_hpux_usable_olit_option" = "yes"; then
+ CFLAGS="$CFLAGS +Olit=all"
+ CXXFLAGS="$CXXFLAGS +Olit=all"
+ else
+ CFLAGS="$CFLAGS +ESlit"
+ CXXFLAGS="$CXXFLAGS +ESlit"
+ fi
+fi
+;;
+esac
+
dnl
dnl Apparently, some systems cannot properly check for the pthread
dnl library unless <pthread.h> is included so we need to test
@@ -1858,13 +1965,13 @@ AC_DEFUN(MOZ_CHECK_PTHREADS,
AC_MSG_CHECKING([for pthread_create in -l$1])
echo "
#include <pthread.h>
- void *foo(void *v) { int a = 1; }
+ void *foo(void *v) { return v; }
int main() {
pthread_t t;
if (!pthread_create(&t, 0, &foo, 0)) {
pthread_join(t, 0);
}
- exit(0);
+ return 0;
}" > dummy.c ;
echo "${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -l[$1] $LDFLAGS $LIBS" 1>&5;
${CC-cc} -o dummy${ac_exeext} dummy.c $CFLAGS $CPPFLAGS -l[$1] $LDFLAGS $LIBS 2>&5;
@@ -1906,7 +2013,7 @@ AC_ARG_WITH(pthreads,
USE_PTHREADS=
_PTHREAD_LDFLAGS=
fi],
- [ if test -n "$_HAVE_PTHREADS" && test -z "$USE_USER_PTHREADS" && test -z "$USER_NSPR_THREADS"; then
+ [ if test -n "$_HAVE_PTHREADS" && test -z "$USE_USER_PTHREADS" && test -z "$USE_NSPR_THREADS"; then
USE_PTHREADS=1
USE_USER_PTHREADS=
USE_NSPR_THREADS=
@@ -1966,6 +2073,8 @@ AC_ARG_ENABLE(ipv6,
[ --enable-ipv6 Compile ipv6 support],
[ if test "$enableval" = "yes"; then
USE_IPV6=1
+ else
+ USE_IPV6=
fi])
@@ -1986,8 +2095,15 @@ if test -n "$USE_PTHREADS"; then
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
- CFLAGS="$CFLAGS -pthread"
- CXXFLAGS="$CXXFLAGS -pthread"
+ case "$target_os" in
+ freebsd*)
+# Freebsd doesn't use -pthread for compiles, it uses them for linking
+ ;;
+ *)
+ CFLAGS="$CFLAGS -pthread"
+ CXXFLAGS="$CXXFLAGS -pthread"
+ ;;
+ esac
fi
fi
rm -f conftest*
@@ -2018,7 +2134,17 @@ if test -n "$USE_PTHREADS"; then
_PTHREAD_LDFLAGS=
fi
;;
- *-freebsd*|*-openbsd*|*-bsdi*|*-netbsd*)
+ *-freebsd*)
+ AC_DEFINE(_REENTRANT)
+ AC_DEFINE(_THREAD_SAFE)
+ dnl -pthread links in -lc_r, so don't specify it explicitly.
+ if test "$ac_cv_have_dash_pthread" = "yes"; then
+ _PTHREAD_LDFLAGS="-pthread"
+ else
+ _PTHREAD_LDFLAGS="-lc_r"
+ fi
+ ;;
+ *-openbsd*|*-bsdi*|*-netbsd*)
AC_DEFINE(_THREAD_SAFE)
dnl -pthread links in -lc_r, so don't specify it explicitly.
if test "$ac_cv_have_dash_pthread" = "yes"; then
@@ -2064,6 +2190,14 @@ case "$target" in
AC_DEFINE(_PR_HAVE_THREADSAFE_GETHOST)
fi
;;
+ *)
+ if test -z "$USE_NSPR_THREADS"; then
+ AC_DEFINE(HAVE_POINTER_LOCALTIME_R)
+ fi
+ if test -n "$USE_PTHREADS"; then
+ AC_DEFINE(_PR_HAVE_THREADSAFE_GETHOST)
+ fi
+ ;;
esac
;;
*-bsdi*)
@@ -2112,7 +2246,7 @@ case "$target" in
_PTHREAD_LDFLAGS=
USE_USER_PTHREADS=
;;
-*-netbsd*)
+*-netbsd*|*-openbsd*)
if test -n "$USE_NSPR_THREADS"; then
AC_DEFINE(_PR_LOCAL_THREADS_ONLY)
fi
@@ -2189,6 +2323,17 @@ fi
RELEASE_OBJDIR_NAME="${OS_CONFIG}${CPU_ARCH_TAG}${COMPILER_TAG}${IMPL_STRATEGY}${OBJDIR_TAG}.${OBJDIR_SUFFIX}"
dnl ========================================================
+dnl Use cygwin wrapper for win32 builds
+dnl ========================================================
+case "$target_os" in
+mingw*|cygwin*|msvc*|mksnt*)
+ CC="\$(CYGWIN_WRAPPER) $CC"
+ CXX="\$(CYGWIN_WRAPPER) $CXX"
+ RC="\$(CYGWIN_WRAPPER) $RC"
+ ;;
+esac
+
+dnl ========================================================
dnl Substitution of found variables.
dnl ========================================================
AC_SUBST(SHELL_OVERRIDE)
@@ -2246,6 +2391,7 @@ AC_SUBST(OS_TARGET)
AC_SUBST(OS_ARCH)
AC_SUBST(OS_RELEASE)
AC_SUBST(OS_TEST)
+AC_SUBST(MACOS_DEPLOYMENT_TARGET)
AC_SUBST(DEFINES)
AC_SUBST(DEFS)
@@ -2254,8 +2400,6 @@ AC_SUBST(AR_FLAGS)
AC_SUBST(AS)
AC_SUBST(ASFLAGS)
AC_SUBST(LD)
-AC_SUBST(DLLTOOL)
-AC_SUBST(WINDRES)
AC_SUBST(RANLIB)
AC_SUBST(PERL)
AC_SUBST(STRIP)
@@ -2268,7 +2412,6 @@ AC_SUBST(AIX_LINK_OPTS)
AC_SUBST(NOSUCHFILE)
AC_SUBST(MOZ_OBJFORMAT)
AC_SUBST(ULTRASPARC_LIBRARY)
-AC_SUBST(ULTRASPARC_FILTER_LIBRARY)
AC_SUBST(OBJDIR)
AC_SUBST(OBJDIR_NAME)
@@ -2276,9 +2419,11 @@ AC_SUBST(RELEASE_OBJDIR_NAME)
AC_SUBST(NSINSTALL)
AC_SUBST(OPTIMIZER)
AC_SUBST(RC)
+AC_SUBST(RCFLAGS)
AC_SUBST(DLLFLAGS)
AC_SUBST(EXEFLAGS)
AC_SUBST(OS_DLLFLAGS)
+AC_SUBST(CYGWIN_WRAPPER)
dnl ========================================================
dnl Generate output files.
@@ -2296,6 +2441,9 @@ lib/libc/Makefile
lib/libc/include/Makefile
lib/libc/src/Makefile
lib/tests/Makefile
+pkg/solaris/Makefile
+pkg/solaris/SUNWpr/Makefile
+pkg/solaris/SUNWprx/Makefile
pr/Makefile
pr/include/Makefile
pr/include/md/Makefile
@@ -2330,4 +2478,10 @@ if test -n "$USE_CPLUS"; then
MAKEFILES="$MAKEFILES pr/src/cplus/Makefile pr/src/cplus/tests/Makefile"
fi
+dnl There is no pkg/Makefile.in, so AC_OUTPUT won't create the pkg directory
+dnl for us.
+if test ! -d pkg; then
+ mkdir pkg
+fi
+
AC_OUTPUT([$MAKEFILES], [chmod +x config/nspr-config])
diff --git a/lib/ds/Makefile.in b/lib/ds/Makefile.in
index b6aa7676..7814556a 100644
--- a/lib/ds/Makefile.in
+++ b/lib/ds/Makefile.in
@@ -59,10 +59,13 @@ HEADERS = \
HEADERS := $(addprefix $(srcdir)/, $(HEADERS))
ifeq ($(OS_ARCH), WINNT)
+ifdef NS_USE_GCC
+DLLBASE=-Wl,--image-base -Wl,0x30000000
+else
DLLBASE=/BASE:0x30000000
+endif # GCC
RES=$(OBJDIR)/plds.res
RESNAME=plds.rc
-OS_LIBS = user32.lib
endif # WINNT
ifeq ($(OS_ARCH), AIX)
@@ -77,6 +80,17 @@ ifeq ($(OS_ARCH),IRIX)
OS_LIBS = -lc
endif
+ifeq ($(OS_ARCH),SunOS)
+OS_LIBS = -lc
+MAPFILE = $(OBJDIR)/pldsmap.sun
+GARBAGE += $(MAPFILE)
+ifdef NS_USE_GCC
+MKSHLIB += -Wl,-M,$(MAPFILE)
+else
+MKSHLIB += -M $(MAPFILE)
+endif
+endif
+
EXTRA_LIBS = $(LIBNSPR)
# On NCR and SCOOS, we can't link with extra libraries when
@@ -113,7 +127,7 @@ NOW = $(MOD_DEPTH)/config/$(OBJDIR)/now
SH_DATE = $(shell date "+%Y-%m-%d %T")
SH_NOW = $(shell $(NOW))
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
SUF = i64
else
SUF = LL
@@ -133,7 +147,7 @@ $(TINC):
$(OBJDIR)/plvrsion.$(OBJ_SUFFIX): plvrsion.c $(TINC)
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
$(CC) -Fo$@ -c $(CFLAGS) -I$(OBJDIR) $<
else
ifeq ($(MOZ_OS2_TOOLS), VACPP)
diff --git a/lib/ds/plarena.c b/lib/ds/plarena.c
index ad541a5d..ad26f4a3 100644
--- a/lib/ds/plarena.c
+++ b/lib/ds/plarena.c
@@ -165,7 +165,7 @@ PR_IMPLEMENT(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb)
do {
if ( a->avail +nb <= a->limit ) {
pool->current = a;
- rp = (void *)a->avail;
+ rp = (char *)a->avail;
a->avail += nb;
return rp;
}
@@ -188,7 +188,7 @@ PR_IMPLEMENT(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb)
p->next = a->next;
UnlockArena();
a->avail = a->base;
- rp = (void *)a->avail;
+ rp = (char *)a->avail;
a->avail += nb;
/* the newly allocated arena is linked after pool->current
* and becomes pool->current */
@@ -211,7 +211,7 @@ PR_IMPLEMENT(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb)
if ( NULL != a ) {
a->limit = (PRUword)a + sz;
a->base = a->avail = (PRUword)PL_ARENA_ALIGN(pool, a + 1);
- rp = (void *)a->avail;
+ rp = (char *)a->avail;
a->avail += nb;
/* the newly allocated arena is linked after pool->current
* and becomes pool->current */
@@ -339,7 +339,7 @@ PR_IMPLEMENT(void) PL_CompactArenaPool(PLArenaPool *ap)
#endif
}
-PR_IMPLEMENT(void) PL_ArenaFinish()
+PR_IMPLEMENT(void) PL_ArenaFinish(void)
{
PLArena *a, *next;
diff --git a/lib/ds/plds.def b/lib/ds/plds.def
new file mode 100644
index 00000000..f062b58b
--- /dev/null
+++ b/lib/ds/plds.def
@@ -0,0 +1,33 @@
+# nm -n -C -p libplds4.so | awk '/[^ ]* T PL_/ {print $3}'
+NSPR_4.0 {
+ global:
+PL_ArenaAllocate;
+PL_ArenaFinish;
+PL_ArenaGrow;
+PL_ArenaRelease;
+PL_CompactArenaPool;
+PL_CompareStrings;
+PL_CompareValues;
+PL_FinishArenaPool;
+PL_FreeArenaPool;
+PL_HashString;
+PL_HashTableAdd;
+PL_HashTableDestroy;
+PL_HashTableDump;
+PL_HashTableEnumerateEntries;
+PL_HashTableLookup;
+PL_HashTableRawAdd;
+PL_HashTableRawLookup;
+PL_HashTableRawRemove;
+PL_HashTableRemove;
+PL_InitArenaPool;
+PL_NewHashTable;
+libVersionPoint;
+ local: *;
+};
+
+NSPR_4.1 {
+ global:
+PL_HashTableLookupConst;
+PL_HashTableRawLookupConst;
+} NSPR_4.0;
diff --git a/lib/ds/plds_symvec.opt b/lib/ds/plds_symvec.opt
new file mode 100644
index 00000000..71784540
--- /dev/null
+++ b/lib/ds/plds_symvec.opt
@@ -0,0 +1,37 @@
+! Fixed section of symbol vector for LIBPLDS4
+!
+GSMATCH=LEQUAL,2,2
+case_sensitive=YES
+!
+! --------------------------------------------------------------------------
+! Ident 2,2 introduced for Mozilla 1.3
+! Previously this was empty. Now we include everything that's specified in
+! plds.def.
+! --------------------------------------------------------------------------
+!
+! NSPR 4.0
+SYMBOL_VECTOR=(PL_ArenaAllocate=PROCEDURE)
+SYMBOL_VECTOR=(PL_ArenaFinish=PROCEDURE)
+SYMBOL_VECTOR=(PL_ArenaGrow=PROCEDURE)
+SYMBOL_VECTOR=(PL_ArenaRelease=PROCEDURE)
+SYMBOL_VECTOR=(PL_CompactArenaPool=PROCEDURE)
+SYMBOL_VECTOR=(PL_CompareStrings=PROCEDURE)
+SYMBOL_VECTOR=(PL_CompareValues=PROCEDURE)
+SYMBOL_VECTOR=(PL_FinishArenaPool=PROCEDURE)
+SYMBOL_VECTOR=(PL_FreeArenaPool=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashString=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableAdd=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableDestroy=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableDump=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableEnumerateEntries=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableLookup=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableRawAdd=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableRawLookup=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableRawRemove=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableRemove=PROCEDURE)
+SYMBOL_VECTOR=(PL_InitArenaPool=PROCEDURE)
+SYMBOL_VECTOR=(PL_NewHashTable=PROCEDURE)
+SYMBOL_VECTOR=(libVersionPoint=PROCEDURE)
+! NSPR 4.1
+SYMBOL_VECTOR=(PL_HashTableLookupConst=PROCEDURE)
+SYMBOL_VECTOR=(PL_HashTableRawLookupConst=PROCEDURE)
diff --git a/lib/libc/src/Makefile.in b/lib/libc/src/Makefile.in
index 2977399e..77379f35 100644
--- a/lib/libc/src/Makefile.in
+++ b/lib/libc/src/Makefile.in
@@ -69,7 +69,11 @@ LIBRARY_VERSION = $(MOD_MAJOR_VERSION)
RELEASE_LIBS = $(TARGETS)
ifeq ($(OS_ARCH),WINNT)
+ifdef NS_USE_GCC
+DLLBASE=-Wl,--image-base -Wl,0x30000000
+else
DLLBASE=/BASE:0x30000000
+endif
RES=$(OBJDIR)/plc.res
RESNAME=plc.rc
endif # WINNT
@@ -86,6 +90,17 @@ ifeq ($(OS_ARCH),IRIX)
OS_LIBS = -lc
endif
+ifeq ($(OS_ARCH),SunOS)
+OS_LIBS = -lc
+MAPFILE = $(OBJDIR)/plcmap.sun
+GARBAGE += $(MAPFILE)
+ifdef NS_USE_GCC
+MKSHLIB += -Wl,-M,$(MAPFILE)
+else
+MKSHLIB += -M $(MAPFILE)
+endif
+endif
+
EXTRA_LIBS = $(LIBNSPR)
# On NCR and SCOOS, we can't link with extra libraries when
@@ -115,7 +130,7 @@ NOW = $(MOD_DEPTH)/config/$(OBJDIR)/now
SH_DATE = $(shell date "+%Y-%m-%d %T")
SH_NOW = $(shell $(NOW))
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
SUF = i64
else
SUF = LL
@@ -135,7 +150,7 @@ $(TINC):
$(OBJDIR)/plvrsion.$(OBJ_SUFFIX): plvrsion.c $(TINC)
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
$(CC) -Fo$@ -c $(CFLAGS) -I$(OBJDIR) $<
else
ifeq ($(MOZ_OS2_TOOLS), VACPP)
diff --git a/lib/libc/src/base64.c b/lib/libc/src/base64.c
index 749965f7..00f19ab2 100644
--- a/lib/libc/src/base64.c
+++ b/lib/libc/src/base64.c
@@ -383,7 +383,7 @@ PL_Base64Decode
srclen = PL_strlen(src);
}
- if( 0 == (srclen & 3) )
+ if( srclen && (0 == (srclen & 3)) )
{
if( (char)'=' == src[ srclen-1 ] )
{
diff --git a/lib/libc/src/plc.def b/lib/libc/src/plc.def
new file mode 100644
index 00000000..ad962e23
--- /dev/null
+++ b/lib/libc/src/plc.def
@@ -0,0 +1,49 @@
+# nm -n -C -p libplc4.so | awk '/[^ ]* T PL_/ {print $3}'
+NSPR_4.0 {
+ global:
+PL_Base64Decode;
+PL_Base64Encode;
+PL_CreateOptState;
+PL_DestroyOptState;
+PL_FPrintError;
+PL_GetNextOpt;
+PL_PrintError;
+PL_strcasecmp;
+PL_strcaserstr;
+PL_strcasestr;
+PL_strcat;
+PL_strcatn;
+PL_strchr;
+PL_strcmp;
+PL_strcpy;
+PL_strdup;
+PL_strfree;
+PL_strlen;
+PL_strncasecmp;
+PL_strncaserstr;
+PL_strncasestr;
+PL_strncat;
+PL_strnchr;
+PL_strncmp;
+PL_strncpy;
+PL_strncpyz;
+PL_strndup;
+PL_strnlen;
+PL_strnpbrk;
+PL_strnprbrk;
+PL_strnrchr;
+PL_strnrstr;
+PL_strnstr;
+PL_strpbrk;
+PL_strprbrk;
+PL_strrchr;
+PL_strrstr;
+PL_strstr;
+libVersionPoint;
+ local: *;
+};
+
+NSPR_4.2 {
+ global:
+PL_strtok_r;
+} NSPR_4.0;
diff --git a/lib/libc/src/plc_symvec.opt b/lib/libc/src/plc_symvec.opt
new file mode 100644
index 00000000..8bc769e0
--- /dev/null
+++ b/lib/libc/src/plc_symvec.opt
@@ -0,0 +1,53 @@
+! Fixed section of symbol vector for LIBPLC4
+!
+GSMATCH=LEQUAL,2,2
+case_sensitive=YES
+!
+! --------------------------------------------------------------------------
+! Ident 2,2 introduced for Mozilla 1.3
+! Previously this was empty. Now we include everything that's specified in
+! plc.def.
+! --------------------------------------------------------------------------
+!
+! NSPR 4.0
+SYMBOL_VECTOR=(PL_Base64Decode=PROCEDURE)
+SYMBOL_VECTOR=(PL_Base64Encode=PROCEDURE)
+SYMBOL_VECTOR=(PL_CreateOptState=PROCEDURE)
+SYMBOL_VECTOR=(PL_DestroyOptState=PROCEDURE)
+SYMBOL_VECTOR=(PL_FPrintError=PROCEDURE)
+SYMBOL_VECTOR=(PL_GetNextOpt=PROCEDURE)
+SYMBOL_VECTOR=(PL_PrintError=PROCEDURE)
+SYMBOL_VECTOR=(PL_strcasecmp=PROCEDURE)
+SYMBOL_VECTOR=(PL_strcaserstr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strcasestr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strcat=PROCEDURE)
+SYMBOL_VECTOR=(PL_strcatn=PROCEDURE)
+SYMBOL_VECTOR=(PL_strchr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strcmp=PROCEDURE)
+SYMBOL_VECTOR=(PL_strcpy=PROCEDURE)
+SYMBOL_VECTOR=(PL_strdup=PROCEDURE)
+SYMBOL_VECTOR=(PL_strfree=PROCEDURE)
+SYMBOL_VECTOR=(PL_strlen=PROCEDURE)
+SYMBOL_VECTOR=(PL_strncasecmp=PROCEDURE)
+SYMBOL_VECTOR=(PL_strncaserstr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strncasestr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strncat=PROCEDURE)
+SYMBOL_VECTOR=(PL_strnchr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strncmp=PROCEDURE)
+SYMBOL_VECTOR=(PL_strncpy=PROCEDURE)
+SYMBOL_VECTOR=(PL_strncpyz=PROCEDURE)
+SYMBOL_VECTOR=(PL_strndup=PROCEDURE)
+SYMBOL_VECTOR=(PL_strnlen=PROCEDURE)
+SYMBOL_VECTOR=(PL_strnpbrk=PROCEDURE)
+SYMBOL_VECTOR=(PL_strnprbrk=PROCEDURE)
+SYMBOL_VECTOR=(PL_strnrchr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strnrstr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strnstr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strpbrk=PROCEDURE)
+SYMBOL_VECTOR=(PL_strprbrk=PROCEDURE)
+SYMBOL_VECTOR=(PL_strrchr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strrstr=PROCEDURE)
+SYMBOL_VECTOR=(PL_strstr=PROCEDURE)
+SYMBOL_VECTOR=(libVersionPoint=PROCEDURE)
+! NSPR 4.2
+SYMBOL_VECTOR=(PL_strtok_r=PROCEDURE)
diff --git a/lib/libc/src/strstr.c b/lib/libc/src/strstr.c
index 3f38a34f..fe658c1b 100644
--- a/lib/libc/src/strstr.c
+++ b/lib/libc/src/strstr.c
@@ -57,13 +57,15 @@ PL_strrstr(const char *big, const char *little)
{
const char *p;
PRUint32 ll;
+ PRUint32 bl;
if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0;
if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0;
ll = PL_strlen(little);
- p = &big[ PL_strlen(big) - ll ];
- if( p < big ) return (char *)0;
+ bl = PL_strlen(big);
+ if( bl < ll ) return (char *)0;
+ p = &big[ bl - ll ];
for( ; p >= big; p-- )
if( *little == *p )
diff --git a/lib/msgc/src/Makefile.in b/lib/msgc/src/Makefile.in
index 355f1489..28a971e5 100644
--- a/lib/msgc/src/Makefile.in
+++ b/lib/msgc/src/Makefile.in
@@ -65,7 +65,11 @@ EXTRA_LIBS += $(OS_LIBS)
endif
ifeq ($(OS_ARCH), WINNT)
+ifdef NS_USE_GCC
+DLLBASE=-Wl,--image-base -Wl,0x30000000
+else
DLLBASE=/BASE:0x30000000
+endif # GCC
#RES=$(OBJDIR)/ds.res
#RESNAME=$(MOD_DEPTH)/pr/src/nspr.rc
#OS_LIBS = user32.lib
diff --git a/macbuild/NSPR.Debug.Prefix b/macbuild/NSPR.Debug.Prefix
deleted file mode 100644
index ae6233ee..00000000
--- a/macbuild/NSPR.Debug.Prefix
+++ /dev/null
@@ -1 +0,0 @@
-// // NSPR.Prefix // // Global prefix file for the debug NSPR project. // // #define DEBUG 1 #include "NSPRConfig.h" \ No newline at end of file
diff --git a/macbuild/NSPR.Prefix b/macbuild/NSPR.Prefix
index a3947318..f9683b50 100644
--- a/macbuild/NSPR.Prefix
+++ b/macbuild/NSPR.Prefix
@@ -1 +1,10 @@
-// // NSPR.Prefix // // Global prefix file for the non-debug NSPR project. // // #include "NSPRConfig.h" \ No newline at end of file
+//
+// NSPR.Prefix
+//
+// Global prefix file for the non-debug NSPR project.
+//
+//
+
+
+#include "MacPrefix.h"
+#include "NSPRConfig.h"
diff --git a/macbuild/NSPR20.toc b/macbuild/NSPR20.toc
deleted file mode 100644
index aaa20253..00000000
--- a/macbuild/NSPR20.toc
+++ /dev/null
@@ -1,69 +0,0 @@
-# target: NSPR20Debug.shlb
-mozilla/nsprpub/lib/ds/plarena.c
-mozilla/nsprpub/lib/ds/plevent.c
-mozilla/nsprpub/lib/ds/plhash.c
-mozilla/nsprpub/lib/libc/src/base64.c
-mozilla/nsprpub/lib/libc/src/plerror.c
-mozilla/nsprpub/lib/libc/src/plgetopt.c
-mozilla/nsprpub/lib/libc/src/strcat.c
-mozilla/nsprpub/lib/libc/src/strccmp.c
-mozilla/nsprpub/lib/libc/src/strchr.c
-mozilla/nsprpub/lib/libc/src/strcmp.c
-mozilla/nsprpub/lib/libc/src/strcpy.c
-mozilla/nsprpub/lib/libc/src/strcstr.c
-mozilla/nsprpub/lib/libc/src/strdup.c
-mozilla/nsprpub/lib/libc/src/strlen.c
-mozilla/nsprpub/lib/libc/src/strpbrk.c
-mozilla/nsprpub/lib/libc/src/strstr.c
-mozilla/nsprpub/pr/src/io/prdir.c
-mozilla/nsprpub/pr/src/io/prfdcach.c
-mozilla/nsprpub/pr/src/io/prfile.c
-mozilla/nsprpub/pr/src/io/prio.c
-mozilla/nsprpub/pr/src/io/priometh.c
-mozilla/nsprpub/pr/src/io/prlayer.c
-mozilla/nsprpub/pr/src/io/prlog.c
-mozilla/nsprpub/pr/src/io/prmapopt.c
-mozilla/nsprpub/pr/src/io/prmmap.c
-mozilla/nsprpub/pr/src/io/prmwait.c
-mozilla/nsprpub/pr/src/io/prpolevt.c
-mozilla/nsprpub/pr/src/io/prprf.c
-mozilla/nsprpub/pr/src/io/prscanf.c
-mozilla/nsprpub/pr/src/io/prsocket.c
-mozilla/nsprpub/pr/src/io/prstdio.c
-mozilla/nsprpub/pr/src/linking/prlink.c
-mozilla/nsprpub/pr/src/malloc/prmem.c
-mozilla/nsprpub/pr/src/md/mac/macdll.c
-mozilla/nsprpub/pr/src/md/mac/macio.c
-mozilla/nsprpub/pr/src/md/mac/macsockotpt.c
-mozilla/nsprpub/pr/src/md/mac/macthr.c
-mozilla/nsprpub/pr/src/md/mac/mactime.c
-mozilla/nsprpub/pr/src/md/mac/mdmac.c
-mozilla/nsprpub/pr/src/md/prosdep.c
-mozilla/nsprpub/pr/src/memory/prseg.c
-mozilla/nsprpub/pr/src/misc/pralarm.c
-mozilla/nsprpub/pr/src/misc/pratom.c
-mozilla/nsprpub/pr/src/misc/prcountr.c
-mozilla/nsprpub/pr/src/misc/prdtoa.c
-mozilla/nsprpub/pr/src/misc/prenv.c
-mozilla/nsprpub/pr/src/misc/prerror.c
-mozilla/nsprpub/pr/src/misc/prinit.c
-mozilla/nsprpub/pr/src/misc/prinrval.c
-mozilla/nsprpub/pr/src/misc/prlog2.c
-mozilla/nsprpub/pr/src/misc/prlong.c
-mozilla/nsprpub/pr/src/misc/prnetdb.c
-mozilla/nsprpub/pr/src/misc/prolock.c
-mozilla/nsprpub/pr/src/misc/prsystem.c
-mozilla/nsprpub/pr/src/misc/prthinfo.c
-mozilla/nsprpub/pr/src/misc/prtime.c
-mozilla/nsprpub/pr/src/misc/prtrace.c
-mozilla/nsprpub/pr/src/threads/combined/prucpu.c
-mozilla/nsprpub/pr/src/threads/combined/prucv.c
-mozilla/nsprpub/pr/src/threads/combined/prulock.c
-mozilla/nsprpub/pr/src/threads/combined/prustack.c
-mozilla/nsprpub/pr/src/threads/combined/pruthr.c
-mozilla/nsprpub/pr/src/threads/prcmon.c
-mozilla/nsprpub/pr/src/threads/prcthr.c
-mozilla/nsprpub/pr/src/threads/prdump.c
-mozilla/nsprpub/pr/src/threads/prmon.c
-mozilla/nsprpub/pr/src/threads/prsem.c
-mozilla/nsprpub/pr/src/threads/prtpd.c
diff --git a/macbuild/NSPR20PPC.mcp b/macbuild/NSPR20PPC.mcp
deleted file mode 100644
index 28ec6ebb..00000000
--- a/macbuild/NSPR20PPC.mcp
+++ /dev/null
Binary files differ
diff --git a/macbuild/NSPR20PPC.xml b/macbuild/NSPR20PPC.xml
new file mode 100644
index 00000000..f8ea7994
--- /dev/null
+++ b/macbuild/NSPR20PPC.xml
@@ -0,0 +1,8232 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<?codewarrior exportversion="1.0.1" ideversion="4.2" ?>
+
+<!DOCTYPE PROJECT [
+<!ELEMENT PROJECT (TARGETLIST, TARGETORDER, GROUPLIST, DESIGNLIST?)>
+<!ELEMENT TARGETLIST (TARGET+)>
+<!ELEMENT TARGET (NAME, SETTINGLIST, FILELIST?, LINKORDER?, SEGMENTLIST?, OVERLAYGROUPLIST?, SUBTARGETLIST?, SUBPROJECTLIST?, FRAMEWORKLIST)>
+<!ELEMENT NAME (#PCDATA)>
+<!ELEMENT USERSOURCETREETYPE (#PCDATA)>
+<!ELEMENT PATH (#PCDATA)>
+<!ELEMENT FILELIST (FILE*)>
+<!ELEMENT FILE (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?, ROOTFILEREF?, FILEKIND?, FILEFLAGS?)>
+<!ELEMENT PATHTYPE (#PCDATA)>
+<!ELEMENT PATHROOT (#PCDATA)>
+<!ELEMENT ACCESSPATH (#PCDATA)>
+<!ELEMENT PATHFORMAT (#PCDATA)>
+<!ELEMENT ROOTFILEREF (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>
+<!ELEMENT FILEKIND (#PCDATA)>
+<!ELEMENT FILEFLAGS (#PCDATA)>
+<!ELEMENT FILEREF (TARGETNAME?, PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>
+<!ELEMENT TARGETNAME (#PCDATA)>
+<!ELEMENT SETTINGLIST ((SETTING|PANELDATA)+)>
+<!ELEMENT SETTING (NAME?, (VALUE|(SETTING+)))>
+<!ELEMENT PANELDATA (NAME, VALUE)>
+<!ELEMENT VALUE (#PCDATA)>
+<!ELEMENT LINKORDER (FILEREF*)>
+<!ELEMENT SEGMENTLIST (SEGMENT+)>
+<!ELEMENT SEGMENT (NAME, ATTRIBUTES?, FILEREF*)>
+<!ELEMENT ATTRIBUTES (#PCDATA)>
+<!ELEMENT OVERLAYGROUPLIST (OVERLAYGROUP+)>
+<!ELEMENT OVERLAYGROUP (NAME, BASEADDRESS, OVERLAY*)>
+<!ELEMENT BASEADDRESS (#PCDATA)>
+<!ELEMENT OVERLAY (NAME, FILEREF*)>
+<!ELEMENT SUBTARGETLIST (SUBTARGET+)>
+<!ELEMENT SUBTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>
+<!ELEMENT SUBPROJECTLIST (SUBPROJECT+)>
+<!ELEMENT SUBPROJECT (FILEREF, SUBPROJECTTARGETLIST)>
+<!ELEMENT SUBPROJECTTARGETLIST (SUBPROJECTTARGET*)>
+<!ELEMENT SUBPROJECTTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>
+<!ELEMENT FRAMEWORKLIST (FRAMEWORK+)>
+<!ELEMENT FRAMEWORK (FILEREF, LIBRARYFILE?, VERSION?)>
+<!ELEMENT LIBRARYFILE (FILEREF)>
+<!ELEMENT VERSION (#PCDATA)>
+<!ELEMENT TARGETORDER (ORDEREDTARGET|ORDEREDDESIGN)*>
+<!ELEMENT ORDEREDTARGET (NAME)>
+<!ELEMENT ORDEREDDESIGN (NAME, ORDEREDTARGET+)>
+<!ELEMENT GROUPLIST (GROUP|FILEREF)*>
+<!ELEMENT GROUP (NAME, (GROUP|FILEREF)*)>
+<!ELEMENT DESIGNLIST (DESIGN+)>
+<!ELEMENT DESIGN (NAME, DESIGNDATA)>
+<!ELEMENT DESIGNDATA (#PCDATA)>
+]>
+
+<PROJECT>
+ <TARGETLIST>
+ <TARGET>
+ <NAME>NSPR20.shlb</NAME>
+ <SETTINGLIST>
+
+ <!-- Settings for "Source Trees" panel -->
+ <SETTING><NAME>UserSourceTrees</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Access Paths" panel -->
+ <SETTING><NAME>AlwaysSearchUserPaths</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>InterpretDOSAndUnixPaths</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RequireFrameworkStyleIncludes</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>UserSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>::</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:::dist:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+ <SETTING><NAME>SystemSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:MSL:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:MacOS Support:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>MacOS</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Runtime" panel -->
+ <SETTING><NAME>MWRuntimeSettings_WorkingDirectory</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_CommandLine</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_HostApplication</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWRuntimeSettings_EnvVars</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Target Settings" panel -->
+ <SETTING><NAME>Linker</NAME><VALUE>MacOS PPC Linker</VALUE></SETTING>
+ <SETTING><NAME>PreLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Targetname</NAME><VALUE>NSPR20.shlb</VALUE></SETTING>
+ <SETTING><NAME>OutputDirectory</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>SaveEntriesUsingRelativePaths</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "File Mappings" panel -->
+ <SETTING><NAME>FileMappings</NAME>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>Appl</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MMLB</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MPLF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MWCD</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>RSRC</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.bh</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Balloon Help</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cpp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.exp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.h</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.p</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pas</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.r</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.s</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PPCAsm</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>XCOF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>docu</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>rsrc</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>stub</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.doc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Build Extras" panel -->
+ <SETTING><NAME>CacheModDates</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ActivateBrowser</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>DumpBrowserInfo</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>CacheSubprojects</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>UseThirdPartyDebugger</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>DebuggerAppPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>DebuggerCmdLineArgs</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DebuggerWorkingDir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Target" panel -->
+ <SETTING><NAME>LogSystemMessages</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>AutoTargetDLLs</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>StopAtWatchpoints</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PauseWhileRunning</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PauseInterval</NAME><VALUE>5</VALUE></SETTING>
+ <SETTING><NAME>PauseUIFlags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>AltExePath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>StopAtTempBPOnLaunch</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>CacheSymbolics</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>TempBPFunctionName</NAME><VALUE>main</VALUE></SETTING>
+ <SETTING><NAME>TempBPType</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Remote Debug" panel -->
+ <SETTING><NAME>Enabled</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ConnectionName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DownloadPath</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>LaunchRemoteApp</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RemoteAppPath</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Auto-target" panel -->
+ <SETTING><NAME>OtherExecutables</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Custom Keywords" panel -->
+ <SETTING><NAME>CustomColor1</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>39321</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor2</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor3</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor4</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "C/C++ Compiler" panel -->
+ <SETTING><NAME>MWFrontEnd_C_cplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_checkprotos</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_arm</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_trigraphs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_onlystdkeywords</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enumsalwaysint</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_mpwpointerstyle</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_prefixname</NAME><VALUE>NSPR.Prefix</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ansistrict</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_mpwcnewline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_wchar_type</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enableexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontreusestrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_poolstrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_useRTTI</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_multibyteaware</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_unsignedchars</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_autoinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_booltruefalse</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_direct_to_som</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_som_env_check</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_alwaysinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_inlinelevel</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ecplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_objective_c</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_defer_codegen</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "C/C++ Warnings" panel -->
+ <SETTING><NAME>MWWarning_C_warn_illpragma</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_emptydecl</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_possunwant</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedvar</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedarg</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_extracomma</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_pedantic</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warningerrors</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_hidevirtual</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_implicitconv</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_notinlined</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_structclass</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "FTP Panel" panel -->
+ <SETTING><NAME>MWFTP_Post_hostName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_username</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_password</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_remoteDir</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_tree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_uploadDir</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_port</NAME><VALUE>21</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_SendBin</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ShouldLog</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "Java Command Line" panel -->
+ <SETTING><NAME>MWCommandLine_Java_clsName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWCommandLine_Java_args</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PJavaDebugging" panel -->
+ <SETTING><NAME>MWVJavaDebugging_Protocol</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_JDKVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_TimeOut</NAME><VALUE>10</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_SupportSlowDevices</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "Java Language" panel -->
+ <SETTING><NAME>MWJava_Language_optimize</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_warnDeprecated</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_emitMap</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_strictFileNames</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_strictFileHierarchy</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_1_1_Compatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_emitHeaders</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_headerType</NAME><VALUE>JNINativeHeaders</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_packageFilter</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_genComments</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_genHeaders</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "Java MRJAppBuilder" panel -->
+ <SETTING><NAME>MWJava_MRJAppBuilder_outFile</NAME><VALUE>MRJApplication</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_merge</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_quitMenu</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_grow</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPICTFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_aboutName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutAppend</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrAppend</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinFile</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Java Output" panel -->
+ <SETTING><NAME>MWJava_Output_outputtype</NAME><VALUE>JarFile</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_outfile</NAME><VALUE>JavaClasses.jar</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_ftype</NAME><VALUE>1514754080</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_fcreator</NAME><VALUE>1297570384</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_compress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_genManifest</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_trunctype</NAME><VALUE>Front</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_deleteClasses</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_consoleApp</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "Java Project" panel -->
+ <SETTING><NAME>MWJava_Proj_projtype</NAME><VALUE>Applet</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_mainClassName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppCreator</NAME><VALUE>1145457748</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppName</NAME><VALUE>Apple Applet Runner</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_tree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppWin32Name</NAME><VALUE>Internet Explorer</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_compress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_useVM</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_vmarguments</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_vmName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_simPropFile</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "JavaDoc Project" panel -->
+ <SETTING><NAME>MWJavaDoc_Proj_Version</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Depricated</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Author</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Index</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Tree</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_SunResolveToSame</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Shortnames</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Folder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_GenerateAPILinks</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_scope</NAME><VALUE>Public</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_fcreator</NAME><VALUE>1297303877</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_encodingName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_decodingName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_javaPackagePath</NAME><VALUE>http://java.sun.com/products/jdk/1.1/docs/api/</VALUE></SETTING>
+
+ <!-- Settings for "MacOS Merge Panel" panel -->
+ <SETTING><NAME>MWMerge_MacOS_projectType</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputName</NAME><VALUE>Merge Out</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputCreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_suppressWarning</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyFragments</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyResources</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flattenResource</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileName</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileOutputPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMerge_MacOS_skipResources</NAME>
+ <SETTING><VALUE>DLGX</VALUE></SETTING>
+ <SETTING><VALUE>ckid</VALUE></SETTING>
+ <SETTING><VALUE>Proj</VALUE></SETTING>
+ <SETTING><VALUE>WSPC</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Output Flags" panel -->
+ <SETTING><NAME>FileLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourcesMapIsReadOnly</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PrinterDriverIsMultiFinderCompatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Invisible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBundle</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>NameLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Stationery</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasCustomIcon</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Shared</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBeenInited</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Label</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Comments</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Packager Panel" panel -->
+ <SETTING><NAME>MWMacOSPackager_UsePackager</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_FolderToPackage</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMacOSPackager_CreateClassicAlias</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_ClassicAliasMethod</NAME><VALUE>UseTargetOutput</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_ClassicAliasPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMacOSPackager_CreatePkgInfo</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_PkgCreatorType</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_PkgFileType</NAME><VALUE>APPL</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_PPC_structalignment</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_readonlystrings</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tocdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_peephole</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processorspecific</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vectortocdata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vrsave</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen Mach-O" panel -->
+ <SETTING><NAME>MWCodeGen_MachO_structalignment</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_peephole</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processorspecific</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_vrsave</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_common</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_implicit_templates</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Disassembler" panel -->
+ <SETTING><NAME>MWDisassembler_PPC_showcode</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_extended</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_mix</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_nohex</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showsym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_shownames</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_PPC_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_PPC_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "PPC Linker" panel -->
+ <SETTING><NAME>MWLinker_PPC_linksym</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_symfullpath</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmode</NAME><VALUE>Fast</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_initname</NAME><VALUE>__NSInitialize</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_mainname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_termname</NAME><VALUE>CleanupTermProc</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mach-O Linker" panel -->
+ <SETTING><NAME>MWLinker_MachO_exports</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_mainname</NAME><VALUE>start</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_currentversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_compatibleversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_symfullpath</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_supresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_multisymerror</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_prebind</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_deadstrip</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_objectivecsemantics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_whichfileloaded</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_whyfileloaded</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_readonlyrelocs</NAME><VALUE>Errors</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_undefinedsymbols</NAME><VALUE>Errors</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_twolevelnamespace</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_stripdebugsymbols</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mach-O Target" panel -->
+ <SETTING><NAME>MWProject_MachO_type</NAME><VALUE>Executable</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_outfile</NAME><VALUE>a.exe</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_filecreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_filetype</NAME><VALUE>MEXE</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_stacksize</NAME><VALUE>64</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_stackaddress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrc</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrcfilename</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_MachO_installpath</NAME><VALUE>./</VALUE></SETTING>
+
+ <!-- Settings for "PPC PEF" panel -->
+ <SETTING><NAME>MWPEF_exports</NAME><VALUE>Pragma</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_libfolder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sortcode</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_expandbss</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sharedata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_olddefversion</NAME><VALUE>400</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_oldimpversion</NAME><VALUE>400</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_currentversion</NAME><VALUE>401</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_fragmentname</NAME><VALUE>NSPR20</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_collapsereloads</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Project" panel -->
+ <SETTING><NAME>MWProject_PPC_type</NAME><VALUE>SharedLibrary</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_outfile</NAME><VALUE>NSPR20.shlb</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filecreator</NAME><VALUE>MOZZ</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filetype</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_size</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_minsize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_stacksize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_symfilename</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcheader</NAME><VALUE>Native</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrctype</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcflags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcstore</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcmerge</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PPCAsm Panel" panel -->
+ <SETTING><NAME>MWAssembler_PPC_auxheader</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_symmode</NAME><VALUE>Mac</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_dialect</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_prefixfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_typecheck</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_warnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_casesensitive</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Rez Compiler" panel -->
+ <SETTING><NAME>MWRez_Language_maxwidth</NAME><VALUE>80</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_script</NAME><VALUE>Roman</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_alignment</NAME><VALUE>Align1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filtermode</NAME><VALUE>FilterSkip</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_suppresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_escapecontrolchars</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_prefixname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filteredtypes</NAME><VALUE>'CODE' 'DATA' 'PICT'</VALUE></SETTING>
+
+ <!-- Settings for "WinRC Compiler" panel -->
+ <SETTING><NAME>MWWinRC_prefixname</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "x86 CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_X86_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_alignment</NAME><VALUE>bytes8</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_exceptions</NAME><VALUE>ZeroOverhead</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_mmx</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_3dnow</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_use_mmx_3dnow_convention</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_machinecodelisting</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_intrinsics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_syminfo</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_codeviewinfo</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_cmov_fcomi</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_sse</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "x86 Disassembler" panel -->
+ <SETTING><NAME>PDisasmX86_showHeaders</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showSymTab</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showCode</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showSource</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showHex</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showRelocation</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showComments</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showDebug</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showExceptions</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showData</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showRaw</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_verbose</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "x86 Exceptions Panel" panel -->
+ <SETTING><NAME>MWDebugger_X86_Exceptions</NAME>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "x86 Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_X86_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_X86_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "x86 Linker" panel -->
+ <SETTING><NAME>MWLinker_X86_entrypointusage</NAME><VALUE>Default</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_entrypoint</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsystem</NAME><VALUE>WinGUI</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsysmajorid</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsysminorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_usrmajorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_usrminorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_commandfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_generatemap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_linksym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_linkCV</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "x86 Project" panel -->
+ <SETTING><NAME>MWProject_X86_type</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_outfile</NAME><VALUE>noname.exe</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_baseaddress</NAME><VALUE>4194304</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_maxstacksize</NAME><VALUE>1024</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_minstacksize</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_size</NAME><VALUE>1024</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_minsize</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_importlib</NAME><VALUE></VALUE></SETTING>
+ <PANELDATA><NAME>xpidl Settings</NAME><VALUE>
+ 0001000101000000000000000000000000000000000000000000000000000000
+ 0000000000000000
+ </VALUE></PANELDATA>
+ </SETTINGLIST>
+ <FILELIST>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntime.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS></FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS></FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTransportAppPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTptInetPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ </FILELIST>
+ <LINKORDER>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntime.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTransportAppPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTptInetPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </LINKORDER>
+ </TARGET>
+ <TARGET>
+ <NAME>NSPR20Debug.shlb</NAME>
+ <SETTINGLIST>
+
+ <!-- Settings for "Source Trees" panel -->
+ <SETTING><NAME>UserSourceTrees</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Access Paths" panel -->
+ <SETTING><NAME>AlwaysSearchUserPaths</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>InterpretDOSAndUnixPaths</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RequireFrameworkStyleIncludes</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>UserSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>::</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:::dist:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+ <SETTING><NAME>SystemSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:MSL:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:MacOS Support:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>MacOS</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Runtime" panel -->
+ <SETTING><NAME>MWRuntimeSettings_WorkingDirectory</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_CommandLine</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_HostApplication</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWRuntimeSettings_EnvVars</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Target Settings" panel -->
+ <SETTING><NAME>Linker</NAME><VALUE>MacOS PPC Linker</VALUE></SETTING>
+ <SETTING><NAME>PreLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Targetname</NAME><VALUE>NSPR20Debug.shlb</VALUE></SETTING>
+ <SETTING><NAME>OutputDirectory</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>SaveEntriesUsingRelativePaths</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "File Mappings" panel -->
+ <SETTING><NAME>FileMappings</NAME>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>Appl</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MMLB</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MPLF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MWCD</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>RSRC</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.bh</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Balloon Help</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cpp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.exp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.h</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.p</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pas</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.r</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.s</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PPCAsm</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>XCOF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>docu</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>rsrc</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>stub</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.doc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Build Extras" panel -->
+ <SETTING><NAME>CacheModDates</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ActivateBrowser</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>DumpBrowserInfo</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>CacheSubprojects</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>UseThirdPartyDebugger</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>DebuggerAppPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>DebuggerCmdLineArgs</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DebuggerWorkingDir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Target" panel -->
+ <SETTING><NAME>LogSystemMessages</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>AutoTargetDLLs</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>StopAtWatchpoints</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PauseWhileRunning</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PauseInterval</NAME><VALUE>5</VALUE></SETTING>
+ <SETTING><NAME>PauseUIFlags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>AltExePath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>StopAtTempBPOnLaunch</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>CacheSymbolics</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>TempBPFunctionName</NAME><VALUE>main</VALUE></SETTING>
+ <SETTING><NAME>TempBPType</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Remote Debug" panel -->
+ <SETTING><NAME>Enabled</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ConnectionName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DownloadPath</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>LaunchRemoteApp</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RemoteAppPath</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Auto-target" panel -->
+ <SETTING><NAME>OtherExecutables</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Custom Keywords" panel -->
+ <SETTING><NAME>CustomColor1</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>39321</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor2</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor3</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor4</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "C/C++ Compiler" panel -->
+ <SETTING><NAME>MWFrontEnd_C_cplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_checkprotos</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_arm</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_trigraphs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_onlystdkeywords</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enumsalwaysint</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_mpwpointerstyle</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_prefixname</NAME><VALUE>NSPRDebug.Prefix</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ansistrict</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_mpwcnewline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_wchar_type</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enableexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontreusestrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_poolstrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_useRTTI</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_multibyteaware</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_unsignedchars</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_autoinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_booltruefalse</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_direct_to_som</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_som_env_check</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_alwaysinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_inlinelevel</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ecplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_objective_c</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_defer_codegen</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "C/C++ Warnings" panel -->
+ <SETTING><NAME>MWWarning_C_warn_illpragma</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_emptydecl</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_possunwant</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedvar</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedarg</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_extracomma</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_pedantic</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warningerrors</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_hidevirtual</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_implicitconv</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_notinlined</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_structclass</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "FTP Panel" panel -->
+ <SETTING><NAME>MWFTP_Post_hostName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_username</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_password</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_remoteDir</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_tree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_uploadDir</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_port</NAME><VALUE>21</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_SendBin</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ShouldLog</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "Java Command Line" panel -->
+ <SETTING><NAME>MWCommandLine_Java_clsName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWCommandLine_Java_args</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PJavaDebugging" panel -->
+ <SETTING><NAME>MWVJavaDebugging_Protocol</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_JDKVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_TimeOut</NAME><VALUE>10</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_SupportSlowDevices</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "Java Language" panel -->
+ <SETTING><NAME>MWJava_Language_optimize</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_warnDeprecated</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_emitMap</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_strictFileNames</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_strictFileHierarchy</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_1_1_Compatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_emitHeaders</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_headerType</NAME><VALUE>JNINativeHeaders</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_packageFilter</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_genComments</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_genHeaders</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "Java MRJAppBuilder" panel -->
+ <SETTING><NAME>MWJava_MRJAppBuilder_outFile</NAME><VALUE>MRJApplication</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_merge</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_quitMenu</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_grow</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPICTFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_aboutName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutAppend</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrAppend</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinFile</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Java Output" panel -->
+ <SETTING><NAME>MWJava_Output_outputtype</NAME><VALUE>JarFile</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_outfile</NAME><VALUE>JavaClasses.jar</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_ftype</NAME><VALUE>1514754080</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_fcreator</NAME><VALUE>1297570384</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_compress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_genManifest</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_trunctype</NAME><VALUE>Front</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_deleteClasses</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_consoleApp</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "Java Project" panel -->
+ <SETTING><NAME>MWJava_Proj_projtype</NAME><VALUE>Applet</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_mainClassName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppCreator</NAME><VALUE>1145457748</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppName</NAME><VALUE>Apple Applet Runner</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_tree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppWin32Name</NAME><VALUE>Internet Explorer</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_compress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_useVM</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_vmarguments</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_vmName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_simPropFile</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "JavaDoc Project" panel -->
+ <SETTING><NAME>MWJavaDoc_Proj_Version</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Depricated</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Author</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Index</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Tree</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_SunResolveToSame</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Shortnames</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Folder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_GenerateAPILinks</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_scope</NAME><VALUE>Public</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_fcreator</NAME><VALUE>1297303877</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_encodingName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_decodingName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_javaPackagePath</NAME><VALUE>http://java.sun.com/products/jdk/1.1/docs/api/</VALUE></SETTING>
+
+ <!-- Settings for "MacOS Merge Panel" panel -->
+ <SETTING><NAME>MWMerge_MacOS_projectType</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputName</NAME><VALUE>Merge Out</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputCreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_suppressWarning</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyFragments</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyResources</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flattenResource</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileName</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileOutputPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMerge_MacOS_skipResources</NAME>
+ <SETTING><VALUE>DLGX</VALUE></SETTING>
+ <SETTING><VALUE>ckid</VALUE></SETTING>
+ <SETTING><VALUE>Proj</VALUE></SETTING>
+ <SETTING><VALUE>WSPC</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Output Flags" panel -->
+ <SETTING><NAME>FileLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourcesMapIsReadOnly</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PrinterDriverIsMultiFinderCompatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Invisible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBundle</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>NameLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Stationery</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasCustomIcon</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Shared</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBeenInited</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Label</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Comments</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Packager Panel" panel -->
+ <SETTING><NAME>MWMacOSPackager_UsePackager</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_FolderToPackage</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMacOSPackager_CreateClassicAlias</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_ClassicAliasMethod</NAME><VALUE>UseTargetOutput</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_ClassicAliasPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMacOSPackager_CreatePkgInfo</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_PkgCreatorType</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_PkgFileType</NAME><VALUE>APPL</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_PPC_structalignment</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tracebacktables</NAME><VALUE>Inline</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_readonlystrings</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tocdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_peephole</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processorspecific</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vectortocdata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vrsave</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen Mach-O" panel -->
+ <SETTING><NAME>MWCodeGen_MachO_structalignment</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_peephole</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processorspecific</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_vrsave</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_common</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_implicit_templates</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Disassembler" panel -->
+ <SETTING><NAME>MWDisassembler_PPC_showcode</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_extended</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_mix</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_nohex</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showsym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_shownames</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_PPC_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_PPC_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "PPC Linker" panel -->
+ <SETTING><NAME>MWLinker_PPC_linksym</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_symfullpath</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmode</NAME><VALUE>Fast</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_initname</NAME><VALUE>__NSInitialize</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_mainname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_termname</NAME><VALUE>CleanupTermProc</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mach-O Linker" panel -->
+ <SETTING><NAME>MWLinker_MachO_exports</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_mainname</NAME><VALUE>start</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_currentversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_compatibleversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_symfullpath</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_supresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_multisymerror</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_prebind</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_deadstrip</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_objectivecsemantics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_whichfileloaded</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_whyfileloaded</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_readonlyrelocs</NAME><VALUE>Errors</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_undefinedsymbols</NAME><VALUE>Errors</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_twolevelnamespace</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_stripdebugsymbols</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mach-O Target" panel -->
+ <SETTING><NAME>MWProject_MachO_type</NAME><VALUE>Executable</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_outfile</NAME><VALUE>a.exe</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_filecreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_filetype</NAME><VALUE>MEXE</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_stacksize</NAME><VALUE>64</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_stackaddress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrc</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrcfilename</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_MachO_installpath</NAME><VALUE>./</VALUE></SETTING>
+
+ <!-- Settings for "PPC PEF" panel -->
+ <SETTING><NAME>MWPEF_exports</NAME><VALUE>Pragma</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_libfolder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sortcode</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_expandbss</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sharedata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_olddefversion</NAME><VALUE>400</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_oldimpversion</NAME><VALUE>400</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_currentversion</NAME><VALUE>401</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_fragmentname</NAME><VALUE>NSPR20</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_collapsereloads</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Project" panel -->
+ <SETTING><NAME>MWProject_PPC_type</NAME><VALUE>SharedLibrary</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_outfile</NAME><VALUE>NSPR20Debug.shlb</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filecreator</NAME><VALUE>MOZZ</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filetype</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_size</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_minsize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_stacksize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_symfilename</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcheader</NAME><VALUE>Native</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrctype</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcflags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcstore</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcmerge</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PPCAsm Panel" panel -->
+ <SETTING><NAME>MWAssembler_PPC_auxheader</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_symmode</NAME><VALUE>Mac</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_dialect</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_prefixfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_typecheck</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_warnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_casesensitive</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Rez Compiler" panel -->
+ <SETTING><NAME>MWRez_Language_maxwidth</NAME><VALUE>80</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_script</NAME><VALUE>Roman</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_alignment</NAME><VALUE>Align1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filtermode</NAME><VALUE>FilterSkip</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_suppresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_escapecontrolchars</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_prefixname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filteredtypes</NAME><VALUE>'CODE' 'DATA' 'PICT'</VALUE></SETTING>
+
+ <!-- Settings for "WinRC Compiler" panel -->
+ <SETTING><NAME>MWWinRC_prefixname</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "x86 CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_X86_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_alignment</NAME><VALUE>bytes8</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_exceptions</NAME><VALUE>ZeroOverhead</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_mmx</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_3dnow</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_use_mmx_3dnow_convention</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_machinecodelisting</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_intrinsics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_syminfo</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_codeviewinfo</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_cmov_fcomi</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_sse</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "x86 Disassembler" panel -->
+ <SETTING><NAME>PDisasmX86_showHeaders</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showSymTab</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showCode</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showSource</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showHex</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showRelocation</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showComments</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showDebug</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showExceptions</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showData</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showRaw</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_verbose</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "x86 Exceptions Panel" panel -->
+ <SETTING><NAME>MWDebugger_X86_Exceptions</NAME>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "x86 Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_X86_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_X86_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "x86 Linker" panel -->
+ <SETTING><NAME>MWLinker_X86_entrypointusage</NAME><VALUE>Default</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_entrypoint</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsystem</NAME><VALUE>WinGUI</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsysmajorid</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsysminorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_usrmajorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_usrminorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_commandfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_generatemap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_linksym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_linkCV</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "x86 Project" panel -->
+ <SETTING><NAME>MWProject_X86_type</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_outfile</NAME><VALUE>noname.exe</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_baseaddress</NAME><VALUE>4194304</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_maxstacksize</NAME><VALUE>1024</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_minstacksize</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_size</NAME><VALUE>1024</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_minsize</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_importlib</NAME><VALUE></VALUE></SETTING>
+ <PANELDATA><NAME>xpidl Settings</NAME><VALUE>
+ 0001000101000000000000000000000000000000000000000000000000000000
+ 0000000000000000
+ </VALUE></PANELDATA>
+ </SETTINGLIST>
+ <FILELIST>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntimeDebug.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTransportAppPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTptInetPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ </FILELIST>
+ <LINKORDER>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntimeDebug.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTransportAppPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTptInetPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </LINKORDER>
+ </TARGET>
+ <TARGET>
+ <NAME>NSPR20Carbon.shlb</NAME>
+ <SETTINGLIST>
+
+ <!-- Settings for "Source Trees" panel -->
+ <SETTING><NAME>UserSourceTrees</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Access Paths" panel -->
+ <SETTING><NAME>AlwaysSearchUserPaths</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>InterpretDOSAndUnixPaths</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RequireFrameworkStyleIncludes</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>UserSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>::</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:::dist:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+ <SETTING><NAME>SystemSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:MSL:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:MacOS Support:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>MacOS</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Runtime" panel -->
+ <SETTING><NAME>MWRuntimeSettings_WorkingDirectory</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_CommandLine</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_HostApplication</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWRuntimeSettings_EnvVars</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Target Settings" panel -->
+ <SETTING><NAME>Linker</NAME><VALUE>MacOS PPC Linker</VALUE></SETTING>
+ <SETTING><NAME>PreLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Targetname</NAME><VALUE>NSPR20Carbon.shlb</VALUE></SETTING>
+ <SETTING><NAME>OutputDirectory</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>SaveEntriesUsingRelativePaths</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "File Mappings" panel -->
+ <SETTING><NAME>FileMappings</NAME>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>Appl</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MMLB</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MPLF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MWCD</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>RSRC</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.bh</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Balloon Help</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cpp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.exp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.h</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.p</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pas</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.r</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.s</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PPCAsm</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>XCOF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>docu</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>rsrc</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>stub</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.doc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Build Extras" panel -->
+ <SETTING><NAME>CacheModDates</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ActivateBrowser</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>DumpBrowserInfo</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>CacheSubprojects</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>UseThirdPartyDebugger</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>DebuggerAppPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>DebuggerCmdLineArgs</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DebuggerWorkingDir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Target" panel -->
+ <SETTING><NAME>LogSystemMessages</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>AutoTargetDLLs</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>StopAtWatchpoints</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PauseWhileRunning</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PauseInterval</NAME><VALUE>5</VALUE></SETTING>
+ <SETTING><NAME>PauseUIFlags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>AltExePath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>StopAtTempBPOnLaunch</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>CacheSymbolics</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>TempBPFunctionName</NAME><VALUE>main</VALUE></SETTING>
+ <SETTING><NAME>TempBPType</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Remote Debug" panel -->
+ <SETTING><NAME>Enabled</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ConnectionName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DownloadPath</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>LaunchRemoteApp</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RemoteAppPath</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Auto-target" panel -->
+ <SETTING><NAME>OtherExecutables</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Custom Keywords" panel -->
+ <SETTING><NAME>CustomColor1</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>39321</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor2</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor3</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor4</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "C/C++ Compiler" panel -->
+ <SETTING><NAME>MWFrontEnd_C_cplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_checkprotos</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_arm</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_trigraphs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_onlystdkeywords</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enumsalwaysint</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_mpwpointerstyle</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_prefixname</NAME><VALUE>NSPRCarbon.Prefix</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ansistrict</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_mpwcnewline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_wchar_type</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enableexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontreusestrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_poolstrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_useRTTI</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_multibyteaware</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_unsignedchars</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_autoinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_booltruefalse</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_direct_to_som</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_som_env_check</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_alwaysinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_inlinelevel</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ecplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_objective_c</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_defer_codegen</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "C/C++ Warnings" panel -->
+ <SETTING><NAME>MWWarning_C_warn_illpragma</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_emptydecl</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_possunwant</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedvar</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedarg</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_extracomma</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_pedantic</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warningerrors</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_hidevirtual</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_implicitconv</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_notinlined</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_structclass</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "FTP Panel" panel -->
+ <SETTING><NAME>MWFTP_Post_hostName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_username</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_password</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_remoteDir</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_tree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_uploadDir</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_port</NAME><VALUE>21</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_SendBin</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ShouldLog</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "Java Command Line" panel -->
+ <SETTING><NAME>MWCommandLine_Java_clsName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWCommandLine_Java_args</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PJavaDebugging" panel -->
+ <SETTING><NAME>MWVJavaDebugging_Protocol</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_JDKVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_TimeOut</NAME><VALUE>10</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_SupportSlowDevices</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "Java Language" panel -->
+ <SETTING><NAME>MWJava_Language_optimize</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_warnDeprecated</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_emitMap</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_strictFileNames</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_strictFileHierarchy</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_1_1_Compatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_emitHeaders</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_headerType</NAME><VALUE>JNINativeHeaders</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_packageFilter</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_genComments</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_genHeaders</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "Java MRJAppBuilder" panel -->
+ <SETTING><NAME>MWJava_MRJAppBuilder_outFile</NAME><VALUE>MRJApplication</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_merge</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_quitMenu</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_grow</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPICTFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_aboutName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutAppend</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrAppend</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinFile</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Java Output" panel -->
+ <SETTING><NAME>MWJava_Output_outputtype</NAME><VALUE>JarFile</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_outfile</NAME><VALUE>JavaClasses.jar</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_ftype</NAME><VALUE>1514754080</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_fcreator</NAME><VALUE>1297570384</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_compress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_genManifest</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_trunctype</NAME><VALUE>Front</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_deleteClasses</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_consoleApp</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "Java Project" panel -->
+ <SETTING><NAME>MWJava_Proj_projtype</NAME><VALUE>Applet</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_mainClassName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppCreator</NAME><VALUE>1145457748</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppName</NAME><VALUE>Apple Applet Runner</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_tree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppWin32Name</NAME><VALUE>Internet Explorer</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_compress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_useVM</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_vmarguments</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_vmName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_simPropFile</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "JavaDoc Project" panel -->
+ <SETTING><NAME>MWJavaDoc_Proj_Version</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Depricated</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Author</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Index</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Tree</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_SunResolveToSame</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Shortnames</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Folder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_GenerateAPILinks</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_scope</NAME><VALUE>Public</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_fcreator</NAME><VALUE>1297303877</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_encodingName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_decodingName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_javaPackagePath</NAME><VALUE>http://java.sun.com/products/jdk/1.1/docs/api/</VALUE></SETTING>
+
+ <!-- Settings for "MacOS Merge Panel" panel -->
+ <SETTING><NAME>MWMerge_MacOS_projectType</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputName</NAME><VALUE>Merge Out</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputCreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_suppressWarning</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyFragments</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyResources</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flattenResource</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileName</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileOutputPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMerge_MacOS_skipResources</NAME>
+ <SETTING><VALUE>DLGX</VALUE></SETTING>
+ <SETTING><VALUE>ckid</VALUE></SETTING>
+ <SETTING><VALUE>Proj</VALUE></SETTING>
+ <SETTING><VALUE>WSPC</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Output Flags" panel -->
+ <SETTING><NAME>FileLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourcesMapIsReadOnly</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PrinterDriverIsMultiFinderCompatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Invisible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBundle</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>NameLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Stationery</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasCustomIcon</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Shared</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBeenInited</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Label</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Comments</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Packager Panel" panel -->
+ <SETTING><NAME>MWMacOSPackager_UsePackager</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_FolderToPackage</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMacOSPackager_CreateClassicAlias</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_ClassicAliasMethod</NAME><VALUE>UseTargetOutput</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_ClassicAliasPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMacOSPackager_CreatePkgInfo</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_PkgCreatorType</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_PkgFileType</NAME><VALUE>APPL</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_PPC_structalignment</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_readonlystrings</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tocdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_peephole</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processorspecific</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vectortocdata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vrsave</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen Mach-O" panel -->
+ <SETTING><NAME>MWCodeGen_MachO_structalignment</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_peephole</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processorspecific</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_vrsave</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_common</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_implicit_templates</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Disassembler" panel -->
+ <SETTING><NAME>MWDisassembler_PPC_showcode</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_extended</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_mix</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_nohex</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showsym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_shownames</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_PPC_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_PPC_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "PPC Linker" panel -->
+ <SETTING><NAME>MWLinker_PPC_linksym</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_symfullpath</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmode</NAME><VALUE>Fast</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_initname</NAME><VALUE>__NSInitialize</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_mainname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_termname</NAME><VALUE>CleanupTermProc</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mach-O Linker" panel -->
+ <SETTING><NAME>MWLinker_MachO_exports</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_mainname</NAME><VALUE>start</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_currentversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_compatibleversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_symfullpath</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_supresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_multisymerror</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_prebind</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_deadstrip</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_objectivecsemantics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_whichfileloaded</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_whyfileloaded</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_readonlyrelocs</NAME><VALUE>Errors</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_undefinedsymbols</NAME><VALUE>Errors</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_twolevelnamespace</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_stripdebugsymbols</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mach-O Target" panel -->
+ <SETTING><NAME>MWProject_MachO_type</NAME><VALUE>Executable</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_outfile</NAME><VALUE>a.exe</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_filecreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_filetype</NAME><VALUE>MEXE</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_stacksize</NAME><VALUE>64</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_stackaddress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrc</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrcfilename</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_MachO_installpath</NAME><VALUE>./</VALUE></SETTING>
+
+ <!-- Settings for "PPC PEF" panel -->
+ <SETTING><NAME>MWPEF_exports</NAME><VALUE>Pragma</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_libfolder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sortcode</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_expandbss</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sharedata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_olddefversion</NAME><VALUE>400</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_oldimpversion</NAME><VALUE>400</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_currentversion</NAME><VALUE>401</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_fragmentname</NAME><VALUE>NSPR20</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_collapsereloads</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Project" panel -->
+ <SETTING><NAME>MWProject_PPC_type</NAME><VALUE>SharedLibrary</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_outfile</NAME><VALUE>NSPR20.shlb</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filecreator</NAME><VALUE>MOZZ</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filetype</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_size</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_minsize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_stacksize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_symfilename</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcheader</NAME><VALUE>Native</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrctype</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcflags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcstore</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcmerge</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PPCAsm Panel" panel -->
+ <SETTING><NAME>MWAssembler_PPC_auxheader</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_symmode</NAME><VALUE>Mac</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_dialect</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_prefixfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_typecheck</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_warnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_casesensitive</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Rez Compiler" panel -->
+ <SETTING><NAME>MWRez_Language_maxwidth</NAME><VALUE>80</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_script</NAME><VALUE>Roman</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_alignment</NAME><VALUE>Align1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filtermode</NAME><VALUE>FilterSkip</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_suppresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_escapecontrolchars</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_prefixname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filteredtypes</NAME><VALUE>'CODE' 'DATA' 'PICT'</VALUE></SETTING>
+
+ <!-- Settings for "WinRC Compiler" panel -->
+ <SETTING><NAME>MWWinRC_prefixname</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "x86 CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_X86_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_alignment</NAME><VALUE>bytes8</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_exceptions</NAME><VALUE>ZeroOverhead</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_mmx</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_3dnow</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_use_mmx_3dnow_convention</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_machinecodelisting</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_intrinsics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_syminfo</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_codeviewinfo</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_cmov_fcomi</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_sse</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "x86 Disassembler" panel -->
+ <SETTING><NAME>PDisasmX86_showHeaders</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showSymTab</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showCode</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showSource</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showHex</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showRelocation</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showComments</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showDebug</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showExceptions</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showData</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showRaw</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_verbose</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "x86 Exceptions Panel" panel -->
+ <SETTING><NAME>MWDebugger_X86_Exceptions</NAME>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "x86 Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_X86_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_X86_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "x86 Linker" panel -->
+ <SETTING><NAME>MWLinker_X86_entrypointusage</NAME><VALUE>Default</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_entrypoint</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsystem</NAME><VALUE>WinGUI</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsysmajorid</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsysminorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_usrmajorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_usrminorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_commandfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_generatemap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_linksym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_linkCV</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "x86 Project" panel -->
+ <SETTING><NAME>MWProject_X86_type</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_outfile</NAME><VALUE>noname.exe</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_baseaddress</NAME><VALUE>4194304</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_maxstacksize</NAME><VALUE>1024</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_minstacksize</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_size</NAME><VALUE>1024</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_minsize</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_importlib</NAME><VALUE></VALUE></SETTING>
+ <PANELDATA><NAME>xpidl Settings</NAME><VALUE>
+ 0001000101000000000000000000000000000000000000000000000000000000
+ 0000000000000000
+ </VALUE></PANELDATA>
+ </SETTINGLIST>
+ <FILELIST>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntime.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS></FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS></FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ </FILELIST>
+ <LINKORDER>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntime.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </LINKORDER>
+ </TARGET>
+ <TARGET>
+ <NAME>NSPR20CarbonDebug.shlb</NAME>
+ <SETTINGLIST>
+
+ <!-- Settings for "Source Trees" panel -->
+ <SETTING><NAME>UserSourceTrees</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Access Paths" panel -->
+ <SETTING><NAME>AlwaysSearchUserPaths</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>InterpretDOSAndUnixPaths</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RequireFrameworkStyleIncludes</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>UserSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>::</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:::dist:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+ <SETTING><NAME>SystemSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:MSL:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:MacOS Support:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>MacOS</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Runtime" panel -->
+ <SETTING><NAME>MWRuntimeSettings_WorkingDirectory</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_CommandLine</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_HostApplication</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWRuntimeSettings_EnvVars</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Target Settings" panel -->
+ <SETTING><NAME>Linker</NAME><VALUE>MacOS PPC Linker</VALUE></SETTING>
+ <SETTING><NAME>PreLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Targetname</NAME><VALUE>NSPR20CarbonDebug.shlb</VALUE></SETTING>
+ <SETTING><NAME>OutputDirectory</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>SaveEntriesUsingRelativePaths</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "File Mappings" panel -->
+ <SETTING><NAME>FileMappings</NAME>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>Appl</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MMLB</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MPLF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MWCD</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>RSRC</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.bh</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Balloon Help</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cpp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.exp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.h</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.p</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pas</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.r</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.s</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PPCAsm</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>XCOF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>docu</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>rsrc</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>stub</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.doc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Build Extras" panel -->
+ <SETTING><NAME>CacheModDates</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ActivateBrowser</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>DumpBrowserInfo</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>CacheSubprojects</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>UseThirdPartyDebugger</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>DebuggerAppPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>DebuggerCmdLineArgs</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DebuggerWorkingDir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Target" panel -->
+ <SETTING><NAME>LogSystemMessages</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>AutoTargetDLLs</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>StopAtWatchpoints</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PauseWhileRunning</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PauseInterval</NAME><VALUE>5</VALUE></SETTING>
+ <SETTING><NAME>PauseUIFlags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>AltExePath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>StopAtTempBPOnLaunch</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>CacheSymbolics</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>TempBPFunctionName</NAME><VALUE>main</VALUE></SETTING>
+ <SETTING><NAME>TempBPType</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Remote Debug" panel -->
+ <SETTING><NAME>Enabled</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ConnectionName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DownloadPath</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>LaunchRemoteApp</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RemoteAppPath</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Auto-target" panel -->
+ <SETTING><NAME>OtherExecutables</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Custom Keywords" panel -->
+ <SETTING><NAME>CustomColor1</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>39321</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor2</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor3</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor4</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "C/C++ Compiler" panel -->
+ <SETTING><NAME>MWFrontEnd_C_cplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_checkprotos</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_arm</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_trigraphs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_onlystdkeywords</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enumsalwaysint</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_mpwpointerstyle</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_prefixname</NAME><VALUE>NSPRCarbonDebug.Prefix</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ansistrict</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_mpwcnewline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_wchar_type</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enableexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontreusestrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_poolstrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_useRTTI</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_multibyteaware</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_unsignedchars</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_autoinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_booltruefalse</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_direct_to_som</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_som_env_check</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_alwaysinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_inlinelevel</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ecplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_objective_c</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_defer_codegen</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "C/C++ Warnings" panel -->
+ <SETTING><NAME>MWWarning_C_warn_illpragma</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_emptydecl</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_possunwant</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedvar</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedarg</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_extracomma</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_pedantic</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warningerrors</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_hidevirtual</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_implicitconv</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_notinlined</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_structclass</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "FTP Panel" panel -->
+ <SETTING><NAME>MWFTP_Post_hostName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_username</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_password</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_remoteDir</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_PathFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_tree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_uploadDir</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ftp_port</NAME><VALUE>21</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_SendBin</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFTP_Post_ShouldLog</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "Java Command Line" panel -->
+ <SETTING><NAME>MWCommandLine_Java_clsName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWCommandLine_Java_args</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PJavaDebugging" panel -->
+ <SETTING><NAME>MWVJavaDebugging_Protocol</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_JDKVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_TimeOut</NAME><VALUE>10</VALUE></SETTING>
+ <SETTING><NAME>MWVJavaDebugging_SupportSlowDevices</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "Java Language" panel -->
+ <SETTING><NAME>MWJava_Language_optimize</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_warnDeprecated</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_emitMap</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_strictFileNames</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_strictFileHierarchy</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_1_1_Compatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_emitHeaders</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_headerType</NAME><VALUE>JNINativeHeaders</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_packageFilter</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_genComments</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Language_genHeaders</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "Java MRJAppBuilder" panel -->
+ <SETTING><NAME>MWJava_MRJAppBuilder_outFile</NAME><VALUE>MRJApplication</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_merge</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_quitMenu</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_grow</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinType</NAME><VALUE>Console</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_appIconFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_splashScreenPICTFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_aboutName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPVersion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdoutAppend</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrFile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stderrAppend</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinPTree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_MRJAppBuilder_stdinFile</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Java Output" panel -->
+ <SETTING><NAME>MWJava_Output_outputtype</NAME><VALUE>JarFile</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_outfile</NAME><VALUE>JavaClasses.jar</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_ftype</NAME><VALUE>1514754080</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_fcreator</NAME><VALUE>1297570384</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_compress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_genManifest</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_trunctype</NAME><VALUE>Front</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_deleteClasses</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Output_consoleApp</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "Java Project" panel -->
+ <SETTING><NAME>MWJava_Proj_projtype</NAME><VALUE>Applet</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_mainClassName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppCreator</NAME><VALUE>1145457748</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppName</NAME><VALUE>Apple Applet Runner</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathVersion</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathType</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_PathFormat</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_tree</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_HTMLAppWin32Name</NAME><VALUE>Internet Explorer</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_compress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_useVM</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_vmarguments</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_vmName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJava_Proj_simPropFile</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "JavaDoc Project" panel -->
+ <SETTING><NAME>MWJavaDoc_Proj_Version</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Depricated</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Author</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Index</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Tree</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_SunResolveToSame</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Shortnames</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_Folder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_GenerateAPILinks</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_scope</NAME><VALUE>Public</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_fcreator</NAME><VALUE>1297303877</VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_encodingName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_decodingName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWJavaDoc_Proj_javaPackagePath</NAME><VALUE>http://java.sun.com/products/jdk/1.1/docs/api/</VALUE></SETTING>
+
+ <!-- Settings for "MacOS Merge Panel" panel -->
+ <SETTING><NAME>MWMerge_MacOS_projectType</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputName</NAME><VALUE>Merge Out</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputCreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_suppressWarning</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyFragments</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyResources</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flattenResource</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileName</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileOutputPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMerge_MacOS_skipResources</NAME>
+ <SETTING><VALUE>DLGX</VALUE></SETTING>
+ <SETTING><VALUE>ckid</VALUE></SETTING>
+ <SETTING><VALUE>Proj</VALUE></SETTING>
+ <SETTING><VALUE>WSPC</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Output Flags" panel -->
+ <SETTING><NAME>FileLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourcesMapIsReadOnly</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PrinterDriverIsMultiFinderCompatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Invisible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBundle</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>NameLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Stationery</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasCustomIcon</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Shared</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBeenInited</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Label</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Comments</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Packager Panel" panel -->
+ <SETTING><NAME>MWMacOSPackager_UsePackager</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_FolderToPackage</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMacOSPackager_CreateClassicAlias</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_ClassicAliasMethod</NAME><VALUE>UseTargetOutput</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_ClassicAliasPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMacOSPackager_CreatePkgInfo</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_PkgCreatorType</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMacOSPackager_PkgFileType</NAME><VALUE>APPL</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_PPC_structalignment</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tracebacktables</NAME><VALUE>Inline</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_readonlystrings</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tocdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_peephole</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processorspecific</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vectortocdata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vrsave</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen Mach-O" panel -->
+ <SETTING><NAME>MWCodeGen_MachO_structalignment</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_peephole</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processorspecific</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_vrsave</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_common</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_implicit_templates</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Disassembler" panel -->
+ <SETTING><NAME>MWDisassembler_PPC_showcode</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_extended</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_mix</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_nohex</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showsym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_shownames</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_PPC_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_PPC_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "PPC Linker" panel -->
+ <SETTING><NAME>MWLinker_PPC_linksym</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_symfullpath</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmode</NAME><VALUE>Fast</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_initname</NAME><VALUE>__NSInitialize</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_mainname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_termname</NAME><VALUE>CleanupTermProc</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mach-O Linker" panel -->
+ <SETTING><NAME>MWLinker_MachO_exports</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_mainname</NAME><VALUE>start</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_currentversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_compatibleversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_symfullpath</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_supresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_multisymerror</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_prebind</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_deadstrip</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_objectivecsemantics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_whichfileloaded</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_whyfileloaded</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_readonlyrelocs</NAME><VALUE>Errors</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_undefinedsymbols</NAME><VALUE>Errors</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_twolevelnamespace</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MachO_stripdebugsymbols</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mach-O Target" panel -->
+ <SETTING><NAME>MWProject_MachO_type</NAME><VALUE>Executable</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_outfile</NAME><VALUE>a.exe</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_filecreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_filetype</NAME><VALUE>MEXE</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_stacksize</NAME><VALUE>64</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_stackaddress</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrc</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrcfilename</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MachO_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_MachO_installpath</NAME><VALUE>./</VALUE></SETTING>
+
+ <!-- Settings for "PPC PEF" panel -->
+ <SETTING><NAME>MWPEF_exports</NAME><VALUE>Pragma</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_libfolder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sortcode</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_expandbss</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sharedata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_olddefversion</NAME><VALUE>400</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_oldimpversion</NAME><VALUE>400</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_currentversion</NAME><VALUE>401</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_fragmentname</NAME><VALUE>NSPR20</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_collapsereloads</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Project" panel -->
+ <SETTING><NAME>MWProject_PPC_type</NAME><VALUE>SharedLibrary</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_outfile</NAME><VALUE>NSPR20Debug.shlb</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filecreator</NAME><VALUE>MOZZ</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filetype</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_size</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_minsize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_stacksize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_symfilename</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcheader</NAME><VALUE>Native</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrctype</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcflags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcstore</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcmerge</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PPCAsm Panel" panel -->
+ <SETTING><NAME>MWAssembler_PPC_auxheader</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_symmode</NAME><VALUE>Mac</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_dialect</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_prefixfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_typecheck</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_warnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_casesensitive</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Rez Compiler" panel -->
+ <SETTING><NAME>MWRez_Language_maxwidth</NAME><VALUE>80</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_script</NAME><VALUE>Roman</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_alignment</NAME><VALUE>Align1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filtermode</NAME><VALUE>FilterSkip</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_suppresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_escapecontrolchars</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_prefixname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filteredtypes</NAME><VALUE>'CODE' 'DATA' 'PICT'</VALUE></SETTING>
+
+ <!-- Settings for "WinRC Compiler" panel -->
+ <SETTING><NAME>MWWinRC_prefixname</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "x86 CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_X86_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_alignment</NAME><VALUE>bytes8</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_exceptions</NAME><VALUE>ZeroOverhead</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_mmx</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_3dnow</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_use_mmx_3dnow_convention</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_machinecodelisting</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_intrinsics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_syminfo</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_codeviewinfo</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_cmov_fcomi</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_X86_extinst_sse</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "x86 Disassembler" panel -->
+ <SETTING><NAME>PDisasmX86_showHeaders</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showSymTab</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showCode</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showSource</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showHex</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showRelocation</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showComments</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showDebug</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showExceptions</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showData</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_showRaw</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PDisasmX86_verbose</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "x86 Exceptions Panel" panel -->
+ <SETTING><NAME>MWDebugger_X86_Exceptions</NAME>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ <SETTING><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "x86 Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_X86_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_X86_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "x86 Linker" panel -->
+ <SETTING><NAME>MWLinker_X86_entrypointusage</NAME><VALUE>Default</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_entrypoint</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsystem</NAME><VALUE>WinGUI</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsysmajorid</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_subsysminorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_usrmajorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_usrminorid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_commandfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_generatemap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_linksym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_X86_linkCV</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "x86 Project" panel -->
+ <SETTING><NAME>MWProject_X86_type</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_outfile</NAME><VALUE>noname.exe</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_baseaddress</NAME><VALUE>4194304</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_maxstacksize</NAME><VALUE>1024</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_minstacksize</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_size</NAME><VALUE>1024</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_minsize</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWProject_X86_importlib</NAME><VALUE></VALUE></SETTING>
+ <PANELDATA><NAME>xpidl Settings</NAME><VALUE>
+ 0001000101000000000000000000000000000000000000000000000000000000
+ 0000000000000000
+ </VALUE></PANELDATA>
+ </SETTINGLIST>
+ <FILELIST>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntimeDebug.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Library</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ </FILELIST>
+ <LINKORDER>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntimeDebug.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </LINKORDER>
+ </TARGET>
+ </TARGETLIST>
+
+ <TARGETORDER>
+ <ORDEREDTARGET><NAME>NSPR20.shlb</NAME></ORDEREDTARGET>
+ <ORDEREDTARGET><NAME>NSPR20Debug.shlb</NAME></ORDEREDTARGET>
+ <ORDEREDTARGET><NAME>NSPR20Carbon.shlb</NAME></ORDEREDTARGET>
+ <ORDEREDTARGET><NAME>NSPR20CarbonDebug.shlb</NAME></ORDEREDTARGET>
+ </TARGETORDER>
+
+ <GROUPLIST>
+ <GROUP><NAME>pl</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>base64.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plarena.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plhash.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>plgetopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcat.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strccmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strchr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcmp.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcpy.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strcstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strdup.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strlen.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strpbrk.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strstr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>strtok.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>misc</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pralarm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pratom.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcountr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdtoa.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prenv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerror.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prerrortable.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prinrval.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog2.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlong.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prnetdb.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prolock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prthinfo.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtrace.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripc.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripcsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prvrsion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>io</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdir.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfdcach.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prfile.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>priometh.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pripv6.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlayer.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlog.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmapopt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmmap.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmwait.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prpolevt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prprf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prscanf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsocket.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prstdio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>linking</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prlink.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>memory</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prseg.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshm.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prshma.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>threads</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prcthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prdump.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prmon.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prrwlock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prsem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prtpd.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucpu.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prucv.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prulock.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prustack.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pruthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>md</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prosdep.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>PR Mac</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macrng.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macdll.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macio.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macsockotpt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>macthr.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mactime.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>mdcriticalregion.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>prgcleak.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>NS Libraries</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSStdLibStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <GROUP><NAME>Optimized</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntime.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>Debug</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20Debug.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSRuntimeDebug.shlb</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ </GROUP>
+ <GROUP><NAME>System Libraries</NAME>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>NSLibraryStartup.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>InterfacesStubs</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTransportAppPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>NSPR20.shlb</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>OpenTptInetPPC.o</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ </GROUPLIST>
+
+</PROJECT>
diff --git a/macbuild/NSPRCarbon.Prefix b/macbuild/NSPRCarbon.Prefix
index d36f5663..cb70b847 100644
--- a/macbuild/NSPRCarbon.Prefix
+++ b/macbuild/NSPRCarbon.Prefix
@@ -1,11 +1,10 @@
//
-// NSPR.Prefix
+// NSPRCarbon.Prefix
//
-// Global prefix file for the non-debug NSPR project.
+// Global prefix file for the non-debug Carbon NSPR project.
//
//
+#include "MacPrefix.h"
#include "NSPRConfig.h"
-
-#define TARGET_CARBON 1
diff --git a/macbuild/NSPRCarbonDebug.Prefix b/macbuild/NSPRCarbonDebug.Prefix
index 4a67d9ef..c758898e 100644
--- a/macbuild/NSPRCarbonDebug.Prefix
+++ b/macbuild/NSPRCarbonDebug.Prefix
@@ -1,12 +1,12 @@
//
-// NSPR.Prefix
+// NSPRCarbonDebug.Prefix
//
-// Global prefix file for the debug NSPR project.
+// Global prefix file for the Carbon debug NSPR project.
//
//
-#define DEBUG 1
-#define DEVELOPER_DEBUG 1
+#include "MacPrefix_debug.h"
#include "NSPRConfig.h"
-#define TARGET_CARBON 1
+
+#define DEVELOPER_DEBUG 1
diff --git a/macbuild/NSPRConfig.h b/macbuild/NSPRConfig.h
index 4f2adf89..956a178d 100644
--- a/macbuild/NSPRConfig.h
+++ b/macbuild/NSPRConfig.h
@@ -34,7 +34,6 @@
#define OLDROUTINELOCATIONS 0
-#define XP_MAC 1
#define _PR_NO_PREEMPT 1
#define _NO_FAST_STRING_INLINES_ 1
#define FORCE_PR_LOG 1
diff --git a/macbuild/NSPRDebug.Prefix b/macbuild/NSPRDebug.Prefix
index a656aa49..fb35702e 100644
--- a/macbuild/NSPRDebug.Prefix
+++ b/macbuild/NSPRDebug.Prefix
@@ -1,11 +1,12 @@
//
-// NSPR.Prefix
+// NSPRDebug.Prefix
//
// Global prefix file for the debug NSPR project.
//
//
-#define DEBUG 1
+#include "MacPrefix_debug.h"
+#include "NSPRConfig.h"
+
#define DEVELOPER_DEBUG 1
-#include "NSPRConfig.h" \ No newline at end of file
diff --git a/pkg/solaris/Makefile.com b/pkg/solaris/Makefile.com
new file mode 100644
index 00000000..eb2b979f
--- /dev/null
+++ b/pkg/solaris/Makefile.com
@@ -0,0 +1,30 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+
+MACH = $(shell mach)
+
+PUBLISH_ROOT = $(DIST)
+ifeq ($(MOD_DEPTH),../..)
+ROOT = ROOT
+else
+ROOT = $(subst ../../,,$(MOD_DEPTH))/ROOT
+endif
+
+PKGARCHIVE = $(dist_libdir)/pkgarchive
+DATAFILES = copyright
+FILES = $(DATAFILES) pkginfo
+
+PACKAGE = $(shell basename `pwd`)
+
+PRODUCT_VERSION = $(MOD_VERSION).$(MOD_MINOR).$(MOD_PATCH)
+LN = /usr/bin/ln
+
+CLOBBERFILES = $(FILES)
+
+include $(topsrcdir)/config/rules.mk
+
+# vim: ft=make
diff --git a/pkg/solaris/Makefile.in b/pkg/solaris/Makefile.in
new file mode 100644
index 00000000..b5c0acbe
--- /dev/null
+++ b/pkg/solaris/Makefile.in
@@ -0,0 +1,60 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+
+MOD_DEPTH = ../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(MOD_DEPTH)/config/autoconf.mk
+
+%: %.ksh
+ $(RM) $@
+ cp $< $@
+ chmod +x $@
+
+ifeq ($(USE_64), 1)
+DIRS = \
+ SUNWprx
+else
+DIRS = \
+ SUNWpr
+endif
+
+PROTO = \
+ $(ROOT) \
+ $(ROOT)/usr \
+ $(ROOT)/usr/lib \
+ $(ROOT)/usr/lib/mps
+
+ifdef USE_64
+PROTO += $(ROOT)/usr/lib/mps/sparcv9
+endif
+
+include $(srcdir)/Makefile.com
+
+awk_pkginfo: bld_awk_pkginfo
+ ./bld_awk_pkginfo -m $(MACH) -p "$(PRODUCT_VERSION)" -o $@ -v $(PRODUCT_VERSION)
+
+all:: awk_pkginfo $(PROTO)
+publish: awk_pkginfo $(PROTO)
+ +$(LOOP_OVER_DIRS)
+
+clean clobber::
+ $(RM) awk_pkginfo bld_awk_pkginfo
+ $(RM) -r $(ROOT)
+
+$(ROOT) $(ROOT)/%:
+ mkdir -p $@
+
+ifdef USE_64
+$(ROOT)/usr/lib/mps/sparcv9:
+ $(LN) -sf ../../../../$(dist_libdir) $@
+else
+$(ROOT)/usr/lib/mps:
+ $(LN) -sf ../../../$(dist_libdir) $@
+endif
diff --git a/pkg/solaris/Makefile.targ b/pkg/solaris/Makefile.targ
new file mode 100644
index 00000000..daf327bd
--- /dev/null
+++ b/pkg/solaris/Makefile.targ
@@ -0,0 +1,33 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+
+pkginfo: pkginfo.tmpl ../awk_pkginfo
+ $(RM) $@; nawk -f ../awk_pkginfo $< > $@
+
+# we need to copy prototype_sparc to current too find copyright in current
+pkg: $(PKGARCHIVE)
+ cp $(srcdir)/prototype_com .
+ cp $(srcdir)/prototype_$(MACH) .
+ cp $(srcdir)/depend .
+ pkgmk -f prototype_$(MACH) -d $(PKGARCHIVE) -r $(ROOT) -o $(PACKAGE)
+
+$(PKGARCHIVE):
+ [ -d $(PKGARCHIVE) ] || mkdir -p $(PKGARCHIVE)
+
+$(DATAFILES): %: $(srcdir)/../common_files/%
+ $(RM) $@; cp $(srcdir)/../common_files/$@ $@
+
+#$(MACHDATAFILES): %: $(srcdir)/../common_files/%_$(MACH)
+# $(RM) $@; cp $(srcdir)/../common_files/$@_$(MACH) $@
+#
+#$(MACHDATAFILES): %: $(srcdir)/%_$(MACH)
+# $(RM) $@; cp $(srcdir)/$@_$(MACH) $@
+
+clobber clean::
+ -$(RM) $(CLOBBERFILES) $(CLEANFILES)
+
+.PHONY: pkg
diff --git a/pkg/solaris/SUNWpr/Makefile.in b/pkg/solaris/SUNWpr/Makefile.in
new file mode 100644
index 00000000..84b8bb2c
--- /dev/null
+++ b/pkg/solaris/SUNWpr/Makefile.in
@@ -0,0 +1,22 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+
+MOD_DEPTH = ../../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(MOD_DEPTH)/config/autoconf.mk
+
+include $(srcdir)/../Makefile.com
+
+DATAFILES +=
+
+all:: $(FILES)
+publish:: all pkg
+
+include $(srcdir)/../Makefile.targ
diff --git a/pkg/solaris/SUNWpr/depend b/pkg/solaris/SUNWpr/depend
new file mode 100644
index 00000000..11d87b87
--- /dev/null
+++ b/pkg/solaris/SUNWpr/depend
@@ -0,0 +1,27 @@
+# Copyright 2002 Microsystems, Inc. All Rights Reserved.
+# Use is subject to license terms.
+#
+# $Id$
+#
+# This package information file defines software dependencies associated
+# with the pkg. You can define three types of pkg dependencies with this file:
+# P indicates a prerequisite for installation
+# I indicates an incompatible package
+# R indicates a reverse dependency
+# <pkg.abbr> see pkginfo(4), PKG parameter
+# <name> see pkginfo(4), NAME parameter
+# <version> see pkginfo(4), VERSION parameter
+# <arch> see pkginfo(4), ARCH parameter
+# <type> <pkg.abbr> <name>
+# (<arch>)<version>
+# (<arch>)<version>
+# ...
+# <type> <pkg.abbr> <name>
+# ...
+
+P SUNWcar Core Architecture, (Root)
+P SUNWkvm Core Architecture, (Kvm)
+P SUNWcsr Core Solaris, (Root)
+P SUNWcsu Core Solaris, (Usr)
+P SUNWcsd Core Solaris Devices
+P SUNWcsl Core Solaris Libraries
diff --git a/pkg/solaris/SUNWpr/pkginfo.tmpl b/pkg/solaris/SUNWpr/pkginfo.tmpl
new file mode 100644
index 00000000..0523c8ef
--- /dev/null
+++ b/pkg/solaris/SUNWpr/pkginfo.tmpl
@@ -0,0 +1,34 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+#
+# This required package information file describes characteristics of the
+# package, such as package abbreviation, full package name, package version,
+# and package architecture.
+#
+PKG="SUNWpr"
+NAME="Netscape Portable Runtime"
+ARCH="ISA"
+VERSION="NSPRVERS,REV=0.0.0"
+SUNW_PRODNAME="Netscape Portable Runtime"
+SUNW_PRODVERS="NSPRVERS"
+SUNW_PKGTYPE="usr"
+MAXINST="1000"
+CATEGORY="system"
+DESC="Netscape Portable Runtime Interface"
+VENDOR="Sun Microsystems, Inc."
+HOTLINE="Please contact your local service provider"
+EMAIL=""
+CLASSES="none"
+BASEDIR=/
+SUNW_PKGVERS="1.0"
+#VSTOCK="<reserved by Release Engineering for package part #>"
+#ISTATES="<developer defined>"
+#RSTATES='<developer defined>'
+#ULIMIT="<developer defined>"
+#ORDER="<developer defined>"
+#PSTAMP="<developer defined>"
+#INTONLY="<developer defined>"
diff --git a/pkg/solaris/SUNWpr/prototype_com b/pkg/solaris/SUNWpr/prototype_com
new file mode 100644
index 00000000..1462665f
--- /dev/null
+++ b/pkg/solaris/SUNWpr/prototype_com
@@ -0,0 +1,31 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...> # where to find pkg objects
+#!include <filename> # include another 'prototype' file
+#!default <mode> <owner> <group> # default used if not specified on entry
+#!<param>=<value> # puts parameter in pkg environment
+
+# packaging files
+i copyright
+i pkginfo
+i depend
+#
+# source locations relative to the prototype file
+#
+# SUNWpr
+#
+d none usr 755 root sys
+d none usr/lib 755 root bin
+d none usr/lib/mps 755 root bin
+f none usr/lib/mps/libnspr4.so 755 root bin
+f none usr/lib/mps/libplc4.so 755 root bin
+f none usr/lib/mps/libplds4.so 755 root bin
diff --git a/pkg/solaris/SUNWpr/prototype_i386 b/pkg/solaris/SUNWpr/prototype_i386
new file mode 100644
index 00000000..8991af81
--- /dev/null
+++ b/pkg/solaris/SUNWpr/prototype_i386
@@ -0,0 +1,30 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...> # where to find pkg objects
+#!include <filename> # include another 'prototype' file
+#!default <mode> <owner> <group> # default used if not specified on entry
+#!<param>=<value> # puts parameter in pkg environment
+
+#
+# Include ISA independent files (prototype_com)
+#
+!include prototype_com
+#
+#
+#
+# List files which are i386 specific here
+#
+# source locations relative to the prototype file
+#
+#
+# SUNWpr
+#
diff --git a/pkg/solaris/SUNWpr/prototype_sparc b/pkg/solaris/SUNWpr/prototype_sparc
new file mode 100644
index 00000000..40bc6dcd
--- /dev/null
+++ b/pkg/solaris/SUNWpr/prototype_sparc
@@ -0,0 +1,33 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...> # where to find pkg objects
+#!include <filename> # include another 'prototype' file
+#!default <mode> <owner> <group> # default used if not specified on entry
+#!<param>=<value> # puts parameter in pkg environment
+
+#
+# Include ISA independent files (prototype_com)
+#
+!include prototype_com
+#
+#
+#
+# List files which are SPARC specific here
+#
+# source locations relative to the prototype file
+#
+#
+# SUNWpr
+#
+d none usr/lib/mps/cpu 755 root bin
+d none usr/lib/mps/cpu/sparcv8plus 755 root bin
+f none usr/lib/mps/cpu/sparcv8plus/libnspr_flt4.so 755 root bin
diff --git a/pkg/solaris/SUNWprx/Makefile.in b/pkg/solaris/SUNWprx/Makefile.in
new file mode 100644
index 00000000..84b8bb2c
--- /dev/null
+++ b/pkg/solaris/SUNWprx/Makefile.in
@@ -0,0 +1,22 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+
+MOD_DEPTH = ../../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(MOD_DEPTH)/config/autoconf.mk
+
+include $(srcdir)/../Makefile.com
+
+DATAFILES +=
+
+all:: $(FILES)
+publish:: all pkg
+
+include $(srcdir)/../Makefile.targ
diff --git a/pkg/solaris/SUNWprx/depend b/pkg/solaris/SUNWprx/depend
new file mode 100644
index 00000000..d9ce16a6
--- /dev/null
+++ b/pkg/solaris/SUNWprx/depend
@@ -0,0 +1,30 @@
+# Copyright 2002 Microsystems, Inc. All Rights Reserved.
+# Use is subject to license terms.
+#
+# $Id$
+#
+# This package information file defines software dependencies associated
+# with the pkg. You can define three types of pkg dependencies with this file:
+# P indicates a prerequisite for installation
+# I indicates an incompatible package
+# R indicates a reverse dependency
+# <pkg.abbr> see pkginfo(4), PKG parameter
+# <name> see pkginfo(4), NAME parameter
+# <version> see pkginfo(4), VERSION parameter
+# <arch> see pkginfo(4), ARCH parameter
+# <type> <pkg.abbr> <name>
+# (<arch>)<version>
+# (<arch>)<version>
+# ...
+# <type> <pkg.abbr> <name>
+# ...
+
+P SUNWcar Core Architecture, (Root)
+P SUNWkvm Core Architecture, (Kvm)
+P SUNWcsr Core Solaris, (Root)
+P SUNWcsu Core Solaris, (Usr)
+P SUNWcsd Core Solaris Devices
+P SUNWcsl Core Solaris Libraries
+P SUNWcarx Core Architecture, (Root) (64-bit)
+P SUNWcsxu Core Solaris (Usr) (64-bit)
+P SUNWcslx Core Solaris Libraries (64-bit)
diff --git a/pkg/solaris/SUNWprx/pkginfo.tmpl b/pkg/solaris/SUNWprx/pkginfo.tmpl
new file mode 100644
index 00000000..eb5b90d1
--- /dev/null
+++ b/pkg/solaris/SUNWprx/pkginfo.tmpl
@@ -0,0 +1,35 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+#
+# This required package information file describes characteristics of the
+# package, such as package abbreviation, full package name, package version,
+# and package architecture.
+#
+PKG="SUNWprx"
+NAME="Netscape Portable Runtime (64-bit)"
+ARCH="ISA"
+SUNW_ISA="sparcv9"
+VERSION="NSPRVERS,REV=0.0.0"
+SUNW_PRODNAME="Netscape Portable Runtime"
+SUNW_PRODVERS="NSPRVERS"
+SUNW_PKGTYPE="usr"
+MAXINST="1000"
+CATEGORY="system"
+DESC="Netscape Portable Runtime Interface (64-bit)"
+VENDOR="Sun Microsystems, Inc."
+HOTLINE="Please contact your local service provider"
+EMAIL=""
+CLASSES="none"
+BASEDIR=/
+SUNW_PKGVERS="1.0"
+#VSTOCK="<reserved by Release Engineering for package part #>"
+#ISTATES="<developer defined>"
+#RSTATES='<developer defined>'
+#ULIMIT="<developer defined>"
+#ORDER="<developer defined>"
+#PSTAMP="<developer defined>"
+#INTONLY="<developer defined>"
diff --git a/pkg/solaris/SUNWprx/prototype_com b/pkg/solaris/SUNWprx/prototype_com
new file mode 100644
index 00000000..da07baba
--- /dev/null
+++ b/pkg/solaris/SUNWprx/prototype_com
@@ -0,0 +1,28 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...> # where to find pkg objects
+#!include <filename> # include another 'prototype' file
+#!default <mode> <owner> <group> # default used if not specified on entry
+#!<param>=<value> # puts parameter in pkg environment
+
+# packaging files
+i copyright
+i pkginfo
+i depend
+#
+# source locations relative to the prototype file
+#
+# SUNWprx
+#
+d none usr 755 root sys
+d none usr/lib 755 root bin
+d none usr/lib/mps 755 root bin
diff --git a/pkg/solaris/SUNWprx/prototype_sparc b/pkg/solaris/SUNWprx/prototype_sparc
new file mode 100644
index 00000000..2bcbd5ec
--- /dev/null
+++ b/pkg/solaris/SUNWprx/prototype_sparc
@@ -0,0 +1,35 @@
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "$Id$"
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...> # where to find pkg objects
+#!include <filename> # include another 'prototype' file
+#!default <mode> <owner> <group> # default used if not specified on entry
+#!<param>=<value> # puts parameter in pkg environment
+
+#
+# Include ISA independent files (prototype_com)
+#
+!include prototype_com
+#
+#
+#
+# List files which are SPARC specific here
+#
+# source locations relative to the prototype file
+#
+#
+# SUNWprx
+#
+s none usr/lib/mps/64=sparcv9
+d none usr/lib/mps/sparcv9 755 root bin
+f none usr/lib/mps/sparcv9/libnspr4.so 755 root bin
+f none usr/lib/mps/sparcv9/libplc4.so 755 root bin
+f none usr/lib/mps/sparcv9/libplds4.so 755 root bin
diff --git a/pkg/solaris/bld_awk_pkginfo.ksh b/pkg/solaris/bld_awk_pkginfo.ksh
new file mode 100644
index 00000000..e3d33a7f
--- /dev/null
+++ b/pkg/solaris/bld_awk_pkginfo.ksh
@@ -0,0 +1,105 @@
+#!/usr/bin/ksh -p
+#
+#ident "$Id$"
+#
+# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# Simple script which builds the awk_pkginfo awk script. This awk script
+# is used to convert the pkginfo.tmpl files into pkginfo files
+# for the build.
+#
+
+usage()
+{
+ cat <<-EOF
+usage: bld_awk_pkginfo -p <prodver> -m <mach> -o <awk_script> [-v <version>]
+EOF
+}
+
+#
+# Awk strings
+#
+# two VERSION patterns: one for Dewey decimal, one for Dewey plus ,REV=n
+# the first has one '=' the second has two or more '='
+#
+VERSION1="VERSION=[^=]*$"
+VERSION2="VERSION=[^=]*=.*$"
+PRODVERS="^SUNW_PRODVERS="
+ARCH='ARCH=\"ISA\"'
+
+#
+# parse command line
+#
+mach=""
+prodver=""
+awk_script=""
+version="NSPRVERS"
+
+while getopts o:p:m:v: c
+do
+ case $c in
+ o)
+ awk_script=$OPTARG
+ ;;
+ m)
+ mach=$OPTARG
+ ;;
+ p)
+ prodver=$OPTARG
+ ;;
+ v)
+ version=$OPTARG
+ ;;
+ \?)
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+if [[ ( -z $prodver ) || ( -z $mach ) || ( -z $awk_script ) ]]
+then
+ usage
+ exit 1
+fi
+
+if [[ -f $awk_script ]]
+then
+ rm -f $awk_script
+fi
+
+#
+# Build REV= field based on date
+#
+rev=$(date "+%Y.%m.%d.%H.%M")
+
+#
+# Build awk script which will process all the
+# pkginfo.tmpl files.
+#
+# the first VERSION pattern is replaced with a leading quotation mark
+#
+rm -f $awk_script
+cat << EOF > $awk_script
+/$VERSION1/ {
+ sub(/\=[^=]*$/,"=\"$rev\"")
+ print
+ next
+ }
+/$VERSION2/ {
+ sub(/\=[^=]*$/,"=$rev\"")
+ sub(/NSPRVERS/,"$version")
+ print
+ next
+ }
+/$PRODVERS/ {
+ printf "SUNW_PRODVERS=\"%s\"\n", "$prodver"
+ next
+ }
+/$ARCH/ {
+ printf "ARCH=\"%s\"\n", "$mach"
+ next
+ }
+{ print }
+EOF
diff --git a/pkg/solaris/common_files/copyright b/pkg/solaris/common_files/copyright
new file mode 100644
index 00000000..1e0f6ce3
--- /dev/null
+++ b/pkg/solaris/common_files/copyright
@@ -0,0 +1,28 @@
+The contents of this package are subject to the Mozilla Public License
+Version 1.1 (the "License"); you may not use this package except in
+compliance with the License. You may obtain a copy of the License at
+http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS"
+basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+License for the specific language governing rights and limitations
+under the License.
+
+The Original Code is the Netscape Portable Runtime (NSPR).
+
+The Initial Developer of the Original Code is Netscape Communications
+Corporation. Portions created by Netscape are Copyright (C) 1998-2000
+Netscape Communications Corporation. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this package may be used under the terms
+of the GNU General Public License Version 2 or later (the "GPL"), in
+which case the provisions of the GPL are applicable instead of those
+above. If you wish to allow use of your version of this package only
+under the terms of the GPL and not to allow others to use your version
+of this package under the MPL, indicate your decision by deleting the
+provisions above and replace them with the notice and other provisions
+required by the GPL. If you do not delete the provisions above, a
+recipient may use your version of this package under either the MPL or
+the GPL.
diff --git a/pr/include/md/Makefile.in b/pr/include/md/Makefile.in
index 316c4540..680e8d12 100644
--- a/pr/include/md/Makefile.in
+++ b/pr/include/md/Makefile.in
@@ -48,19 +48,12 @@ include $(topsrcdir)/config/rules.mk
export:: $(MDCPUCFG_H)
$(INSTALL) -m 444 $(srcdir)/$(MDCPUCFG_H) $(dist_includedir)
$(INSTALL) -m 444 $(CONFIGS) $(HEADERS) $(dist_includedir)/md
-ifneq ($(OS_ARCH),OpenVMS)
mv -f $(dist_includedir)/$(MDCPUCFG_H) $(dist_includedir)/prcpucfg.h
-else
-# mv'ing a link causes the file itself to move, not the link.
- rm -f $(dist_includedir)/$(MDCPUCFG_H)
- rm -f $(dist_includedir)/prcpucfg.h
- ln -fs $(srcdir)/$(MDCPUCFG_H) $(dist_includedir)/prcpucfg.h
-endif
real_install::
$(NSINSTALL) -D $(DESTDIR)$(includedir)/md
cp $(srcdir)/$(MDCPUCFG_H) $(DESTDIR)$(includedir)/prcpucfg.h
- $(NSINSTALL) -t -m 644 $(CONFIG) $(HEADERS) $(DESTDIR)$(includedir)/md
+ $(NSINSTALL) -t -m 644 $(HEADERS) $(DESTDIR)$(includedir)/md
release:: export
@echo "Copying machine-dependent prcpucfg.h"
diff --git a/pr/include/md/_aix.h b/pr/include/md/_aix.h
index d8d79eeb..2ef0fc1d 100644
--- a/pr/include/md/_aix.h
+++ b/pr/include/md/_aix.h
@@ -57,7 +57,8 @@
#define _PR_VMBASE 0x30000000
#define _PR_STACK_VMBASE 0x50000000
-#define _MD_DEFAULT_STACK_SIZE 65536L
+#define _MD_DEFAULT_STACK_SIZE (2*65536L)
+#define _MD_MINIMUM_STACK_SIZE (2*65536L)
#define _MD_MMAP_FLAGS MAP_PRIVATE
#define NEED_TIME_R
@@ -71,6 +72,7 @@
#define _PR_USE_POLL
#define _PR_STAT_HAS_ONLY_ST_ATIME
#ifdef _PR_INET6
+#define _PR_HAVE_INET_NTOP
#define _PR_HAVE_GETHOSTBYNAME2
#endif
#define _PR_HAVE_SYSV_SEMAPHORES
@@ -243,4 +245,6 @@ struct _MDCPU {
#define _MD_POLL poll
#endif
+extern void _MD_aix_map_sendfile_error(int err);
+
#endif /* nspr_aix_defs_h___ */
diff --git a/pr/include/md/_aix32.cfg b/pr/include/md/_aix32.cfg
index 8047bb98..0bf01957 100644
--- a/pr/include/md/_aix32.cfg
+++ b/pr/include/md/_aix32.cfg
@@ -134,6 +134,9 @@
#define BYTES_PER_DWORD_LOG2 PR_BYTES_PER_DWORD_LOG2
#define WORDS_PER_DWORD_LOG2 PR_WORDS_PER_DWORD_LOG2
+/* used by protypes.h only */
+#define _PR_AIX_HAVE_BSD_INT_TYPES
+
#endif /* NO_NSPR_10_SUPPORT */
#endif /* nspr_cpucfg___ */
diff --git a/pr/include/md/_aix32in6.cfg b/pr/include/md/_aix32in6.cfg
deleted file mode 100644
index 0bf01957..00000000
--- a/pr/include/md/_aix32in6.cfg
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
-
-#ifndef nspr_cpucfg___
-#define nspr_cpucfg___
-
-#ifndef XP_UNIX
-#define XP_UNIX
-#endif
-
-#ifndef AIX
-#define AIX
-#endif
-
-#undef IS_LITTLE_ENDIAN
-#define IS_BIG_ENDIAN 1
-
-#define PR_BYTES_PER_BYTE 1
-#define PR_BYTES_PER_SHORT 2
-#define PR_BYTES_PER_INT 4
-#define PR_BYTES_PER_INT64 8
-#define PR_BYTES_PER_LONG 4
-#define PR_BYTES_PER_FLOAT 4
-#define PR_BYTES_PER_DOUBLE 8
-#define PR_BYTES_PER_WORD 4
-#define PR_BYTES_PER_DWORD 8
-
-#define PR_BYTES_PER_WORD_LOG2 2
-#define PR_BYTES_PER_DWORD_LOG2 3
-
-#define PR_BITS_PER_BYTE 8
-#define PR_BITS_PER_SHORT 16
-#define PR_BITS_PER_INT 32
-#define PR_BITS_PER_INT64 64
-#define PR_BITS_PER_LONG 32
-#define PR_BITS_PER_FLOAT 32
-#define PR_BITS_PER_DOUBLE 64
-#define PR_BITS_PER_WORD 32
-
-#define PR_BITS_PER_BYTE_LOG2 3
-#define PR_BITS_PER_SHORT_LOG2 4
-#define PR_BITS_PER_INT_LOG2 5
-#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_DOUBLE_LOG2 6
-#define PR_BITS_PER_WORD_LOG2 5
-
-#define PR_ALIGN_OF_SHORT 2
-#define PR_ALIGN_OF_INT 4
-#define PR_ALIGN_OF_LONG 4
-#define PR_ALIGN_OF_INT64 8
-#define PR_ALIGN_OF_FLOAT 4
-#define PR_ALIGN_OF_DOUBLE 4
-#define PR_ALIGN_OF_POINTER 4
-
-#define HAVE_LONG_LONG
-#undef HAVE_ALIGNED_DOUBLES
-#undef HAVE_ALIGNED_LONGLONGS
-
-#define PR_AF_INET6 24 /* same as AF_INET6 */
-
-#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
-
-/* used by protypes.h only */
-#define _PR_AIX_HAVE_BSD_INT_TYPES
-
-#endif /* NO_NSPR_10_SUPPORT */
-
-#endif /* nspr_cpucfg___ */
diff --git a/pr/include/md/_beos.h b/pr/include/md/_beos.h
index 232fea3c..1f69bd66 100644
--- a/pr/include/md/_beos.h
+++ b/pr/include/md/_beos.h
@@ -51,6 +51,10 @@
* Internal configuration macros
*/
+#ifdef BONE_VERSION
+#define _PR_HAVE_SOCKADDR_LEN
+#endif
+
#define PR_LINKER_ARCH "beos"
#define _PR_SI_SYSNAME "BEOS"
#ifdef __powerpc__
@@ -87,6 +91,7 @@
#define _PR_HAVE_PEEK_BUFFER
#define _PR_PEEK_BUFFER_MAX (16 * 1024)
#define _PR_FD_NEED_EMULATE_MSG_PEEK(fd) 1
+#define _PR_CONNECT_DOES_NOT_BIND
/* Define threading functions and objects as native BeOS */
struct _MDThread {
@@ -141,17 +146,21 @@ struct _MDSegment {
** File- and directory-related definitions
*/
+#ifndef BONE_VERSION
#define BE_SOCK_SHUTDOWN_READ 0x01
#define BE_SOCK_SHUTDOWN_WRITE 0x02
+#endif
struct _MDFileDesc {
PRInt32 osfd;
PRInt32 sock_state;
PRBool accepted_socket;
PRNetAddr peer_addr;
+#ifndef BONE_VERSION
PRBool connectValueValid;
int connectReturnValue;
int connectReturnError;
+#endif
};
struct _MDDir {
@@ -175,14 +184,17 @@ struct _MDFileMap {
* Network related definitions.
*/
+#ifndef BONE_VERSION
#define IPPROTO_IP 0
#define AF_UNIX 2
#define TCP_NODELAY SO_NONBLOCK
#define SO_LINGER -1
#define SO_ERROR 4
+#endif
#define _PR_INTERRUPT_CHECK_INTERVAL_SECS 5
+#ifndef BONE_VERSION
/* these aren't actually used. if they are, we're screwed */
struct protoent {
char *p_name; /* official protocol name */
@@ -192,6 +204,7 @@ struct protoent {
struct protoent* getprotobyname(const char* name);
struct protoent* getprotobynumber(int number);
+#endif
/*
* malloc() related definitions.
@@ -304,6 +317,7 @@ struct protoent* getprotobynumber(int number);
#define _MD_READ_DIR _MD_read_dir
#define _MD_CLOSE_DIR _MD_close_dir
#define _MD_MAKE_NONBLOCK _MD_make_nonblock
+#define _MD_SET_FD_INHERITABLE _MD_set_fd_inheritable
#define _MD_INIT_FD_INHERITABLE _MD_init_fd_inheritable
#define _MD_QUERY_FD_INHERITABLE _MD_query_fd_inheritable
#define _MD_OPEN _MD_open
@@ -509,7 +523,7 @@ NSPR_API(PRInt32) _MD_open(const char *name, PRIntn osflags, PRIntn mode);
NSPR_API(PRInt32) _MD_close_file(PRInt32 osfd);
NSPR_API(PRInt32) _MD_read(PRFileDesc *fd, void *buf, PRInt32 amount);
NSPR_API(PRInt32) _MD_write(PRFileDesc *fd, const void *buf, PRInt32 amount);
-NSPR_API(PRInt32) _MD_writev(PRFileDesc *fd, struct PRIOVec *iov, PRInt32 iov_size, PRIntervalTime timeout);
+NSPR_API(PRInt32) _MD_writev(PRFileDesc *fd, const PRIOVec *iov, PRInt32 iov_size, PRIntervalTime timeout);
NSPR_API(PRInt32) _MD_lseek(PRFileDesc *fd, PRInt32 offset, int whence);
NSPR_API(PRInt64) _MD_lseek64(PRFileDesc *fd, PRInt64 offset, int whence);
NSPR_API(PRInt32) _MD_fsync(PRFileDesc *fd);
diff --git a/pr/include/md/_bsdi.h b/pr/include/md/_bsdi.h
index c529649f..346f1049 100644
--- a/pr/include/md/_bsdi.h
+++ b/pr/include/md/_bsdi.h
@@ -39,6 +39,8 @@
* Internal configuration macros
*/
+#include <sys/param.h> /* for _BSDI_VERSION */
+
#define PR_LINKER_ARCH "bsdi"
#define _PR_SI_SYSNAME "BSDI"
#if defined(__i386__)
@@ -61,6 +63,15 @@
#define USE_SETJMP
+/* BSD/OS 4.3 and newer all have IPv6 support */
+#if _BSDI_VERSION >= 200105
+#define _PR_INET6
+#define _PR_HAVE_INET_NTOP
+#define _PR_HAVE_GETIPNODEBYNAME
+#define _PR_HAVE_GETIPNODEBYADDR
+#define _PR_INET6_PROBE
+#endif
+
#ifndef _PR_PTHREADS
#include <setjmp.h>
diff --git a/pr/include/md/_darwin.cfg b/pr/include/md/_darwin.cfg
index d06492b8..22fc1083 100644
--- a/pr/include/md/_darwin.cfg
+++ b/pr/include/md/_darwin.cfg
@@ -39,10 +39,6 @@
#define XP_UNIX
#endif
-#ifndef DARWIN
-#define DARWIN
-#endif
-
#define PR_AF_INET6 30 /* same as AF_INET6 */
#if defined(i386)
diff --git a/pr/include/md/_darwin.h b/pr/include/md/_darwin.h
index d262849c..e3046801 100644
--- a/pr/include/md/_darwin.h
+++ b/pr/include/md/_darwin.h
@@ -61,6 +61,27 @@
#define _PR_NO_LARGE_FILES
#define PR_HAVE_SYSV_NAMED_SHARED_MEMORY
+#define _PR_INET6
+/*
+ * I'd prefer to use getipnodebyname and getipnodebyaddr but the
+ * getipnodebyname(3) man page on Mac OS X 10.2 says they are not
+ * thread-safe. AI_V4MAPPED|AI_ADDRCONFIG doesn't work either.
+ */
+#define _PR_HAVE_GETHOSTBYNAME2
+/*
+ * On Mac OS X 10.2, gethostbyaddr fails with h_errno=NO_RECOVERY
+ * if you pass an IPv4-mapped IPv6 address to it.
+ */
+#define _PR_GHBA_DISALLOW_V4MAPPED
+/* socket(AF_INET6) fails with EPROTONOSUPPORT on Mac OS X 10.1. */
+#if MACOS_DEPLOYMENT_TARGET < 100200
+#define _PR_INET6_PROBE
+#endif
+/* Mac OS X 10.2 has inet_ntop and inet_pton. */
+#if MACOS_DEPLOYMENT_TARGET >= 100200
+#define _PR_HAVE_INET_NTOP
+#endif
+
#define USE_SETJMP
#if !defined(_PR_PTHREADS)
diff --git a/pr/include/md/_freebsd.cfg b/pr/include/md/_freebsd.cfg
index ad04ca20..7177478d 100644
--- a/pr/include/md/_freebsd.cfg
+++ b/pr/include/md/_freebsd.cfg
@@ -43,16 +43,16 @@
#define FREEBSD
#endif
+#define PR_AF_INET6 28 /* same as AF_INET6 */
+
+#if defined(__i386__)
+
#define IS_LITTLE_ENDIAN 1
#undef IS_BIG_ENDIAN
#define HAVE_LONG_LONG
#undef HAVE_ALIGNED_DOUBLES
#undef HAVE_ALIGNED_LONGLONGS
-#define PR_AF_INET6 28 /* same as AF_INET6 */
-
-#if defined(__i386__)
-
#define PR_BYTES_PER_BYTE 1
#define PR_BYTES_PER_SHORT 2
#define PR_BYTES_PER_INT 4
@@ -98,6 +98,7 @@
#define HAVE_LONG_LONG
#define HAVE_ALIGNED_DOUBLES
#define HAVE_ALIGNED_LONGLONGS
+#define IS_64
#define PR_BYTES_PER_BYTE 1
#define PR_BYTES_PER_SHORT 2
diff --git a/pr/include/md/_freebsd.h b/pr/include/md/_freebsd.h
index 0671b60f..68542336 100644
--- a/pr/include/md/_freebsd.h
+++ b/pr/include/md/_freebsd.h
@@ -37,6 +37,9 @@
#include "prthread.h"
+#if __FreeBSD__ >= 2
+#include <osreldate.h> /* for __FreeBSD_version */
+#endif
#include <sys/syscall.h>
#define PR_LINKER_ARCH "freebsd"
@@ -65,19 +68,33 @@
#define _PR_HAVE_SOCKADDR_LEN
#define _PR_STAT_HAS_ST_ATIMESPEC
#define _PR_NO_LARGE_FILES
-#if ( __FreeBSD__ > 2 )
-#if !defined(_PR_PTHREADS)
+
+#if defined(_PR_PTHREADS)
+#if __FreeBSD_version >= 400008
/*
- * libc_r doesn't have poll(). Although libc has poll(), it is not
- * thread-safe so we can't use it in the pthreads version.
+ * libc_r before this version of FreeBSD doesn't have poll().
+ * Although libc has poll(), it is not thread-safe so we can't
+ * use it in the pthreads version.
*/
#define _PR_POLL_AVAILABLE
+#endif
+#else
+#if __FreeBSD_version >= 300000
+#define _PR_POLL_AVAILABLE
#define _PR_USE_POLL
#endif
#endif
+
#define _PR_HAVE_SYSV_SEMAPHORES
#define PR_HAVE_SYSV_NAMED_SHARED_MEMORY
+#if __FreeBSD_version >= 400014
+#define _PR_INET6
+#define _PR_HAVE_INET_NTOP
+#define _PR_HAVE_GETHOSTBYNAME2
+#define _PR_INET6_PROBE
+#endif
+
#define USE_SETJMP
#ifndef _PR_PTHREADS
diff --git a/pr/include/md/_hpux.h b/pr/include/md/_hpux.h
index c83e7c3c..625ed6eb 100644
--- a/pr/include/md/_hpux.h
+++ b/pr/include/md/_hpux.h
@@ -46,7 +46,14 @@
#define _PR_VMBASE 0x30000000
#define _PR_STACK_VMBASE 0x50000000
-#define _MD_DEFAULT_STACK_SIZE 65536L
+/*
+ * _USE_BIG_FDS increases the size of fd_set from 256 bytes to
+ * about 7500 bytes. PR_Poll allocates three fd_sets on the
+ * stack, so it is safer to also increase the default thread
+ * stack size.
+ */
+#define _MD_DEFAULT_STACK_SIZE (2*65536L)
+#define _MD_MINIMUM_STACK_SIZE (2*65536L)
#define _MD_MMAP_FLAGS MAP_PRIVATE
#define NEED_TIME_R
@@ -55,19 +62,16 @@
#undef HAVE_WEAK_IO_SYMBOLS
#undef HAVE_WEAK_MALLOC_SYMBOLS
#define HAVE_DLL
+#ifdef IS_64
+#define USE_DLFCN
+#else
#define USE_HPSHL
+#endif
#ifndef HAVE_STRERROR
#define HAVE_STRERROR
#endif
#define _PR_POLL_AVAILABLE
#define _PR_USE_POLL
-/*
- * OSF1 and HPUX report the POLLHUP event for a socket when the
- * shutdown(SHUT_WR) operation is called for the remote end, even though
- * the socket is still writeable. Use select(), instead of poll(), to
- * workaround this problem.
- */
-#define _PR_POLL_WITH_SELECT
#define _PR_STAT_HAS_ONLY_ST_ATIME
#define _PR_HAVE_POSIX_SEMAPHORES
#define PR_HAVE_POSIX_NAMED_SHARED_MEMORY
diff --git a/pr/include/md/_hpux64.cfg b/pr/include/md/_hpux64.cfg
index bacd0272..338e3016 100644
--- a/pr/include/md/_hpux64.cfg
+++ b/pr/include/md/_hpux64.cfg
@@ -82,8 +82,8 @@
#define PR_ALIGN_OF_SHORT 2
#define PR_ALIGN_OF_INT 4
-#define PR_ALIGN_OF_LONG 4
-#define PR_ALIGN_OF_INT64 4
+#define PR_ALIGN_OF_LONG 8
+#define PR_ALIGN_OF_INT64 8
#define PR_ALIGN_OF_FLOAT 4
#define PR_ALIGN_OF_DOUBLE 8
#define PR_ALIGN_OF_POINTER 8
diff --git a/pr/include/md/_irix.h b/pr/include/md/_irix.h
index 09067002..5e7b624c 100644
--- a/pr/include/md/_irix.h
+++ b/pr/include/md/_irix.h
@@ -78,6 +78,12 @@
#define PR_HAVE_POSIX_NAMED_SHARED_MEMORY
#define _PR_ACCEPT_INHERIT_NONBLOCK
+#ifdef _PR_INET6
+#define _PR_HAVE_INET_NTOP
+#define _PR_HAVE_GETIPNODEBYNAME
+#define _PR_HAVE_GETIPNODEBYADDR
+#endif
+
/* Initialization entry points */
NSPR_API(void) _MD_EarlyInit(void);
#define _MD_EARLY_INIT _MD_EarlyInit
diff --git a/pr/include/md/_linux.h b/pr/include/md/_linux.h
index 86ea248c..04b2ea74 100644
--- a/pr/include/md/_linux.h
+++ b/pr/include/md/_linux.h
@@ -118,6 +118,7 @@ extern PRInt32 _PR_ia64_AtomicSet(PRInt32 *val, PRInt32 newval);
#endif
#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1)
#define _PR_INET6
+#define _PR_HAVE_INET_NTOP
#define _PR_HAVE_GETHOSTBYNAME2
#define _PR_INET6_PROBE
#endif
@@ -470,4 +471,6 @@ extern int __syscall_poll(struct pollfd *ufds, unsigned long int nfds,
/* For writev() */
#include <sys/uio.h>
+extern void _MD_linux_map_sendfile_error(int err);
+
#endif /* nspr_linux_defs_h___ */
diff --git a/pr/include/md/_macos.h b/pr/include/md/_macos.h
index f1f0f8aa..90eb07db 100644
--- a/pr/include/md/_macos.h
+++ b/pr/include/md/_macos.h
@@ -65,6 +65,7 @@
#include <Errors.h>
#include <OpenTransport.h>
+#include <DriverServices.h>
#define _PR_HAVE_PEEK_BUFFER
#define _PR_PEEK_BUFFER_MAX (16 * 1024)
@@ -105,7 +106,9 @@ struct _MDSegment {
};
struct _MDCPU {
- PRInt8 notused;
+ AbsoluteTime lastThreadSwitch;
+ AbsoluteTime lastWakeUpProcess;
+ PRBool trackScheduling;
};
typedef struct _MDSocketCallerInfo {
@@ -114,19 +117,22 @@ typedef struct _MDSocketCallerInfo {
} _MDSocketCallerInfo;
struct _MDFileDesc {
- PRInt32 osfd;
- PRBool orderlyDisconnect;
- PRBool readReady;
- PRBool writeReady;
- PRBool exceptReady;
- PRLock * miscLock;
-
- /* Server sockets: listen bit tells the notifier func what to do */
- PRBool doListen;
-
- _MDSocketCallerInfo misc;
- _MDSocketCallerInfo read;
- _MDSocketCallerInfo write;
+ PRInt32 osfd;
+ PRPackedBool orderlyDisconnect;
+ PRPackedBool readReady;
+ PRPackedBool writeReady;
+ PRPackedBool exceptReady;
+ PRLock * miscLock;
+
+ /* Server sockets: listen bit tells the notifier func what to do */
+ PRBool doListen;
+
+ /* stored error for non-blocking connects, as a Unix-style error code */
+ OTReason disconnectError;
+
+ _MDSocketCallerInfo misc;
+ _MDSocketCallerInfo read;
+ _MDSocketCallerInfo write;
};
/*
@@ -172,7 +178,7 @@ extern void _MD_SetIntsOff(PRInt32 ints);
#define _MD_CLEANUP_BEFORE_EXIT()
#define _MD_EXIT(status) exit(status)
#define _MD_INIT_CPUS()
-#define _MD_INIT_RUNNING_CPU(cpu)
+#define _MD_INIT_RUNNING_CPU(cpu) _MD_InitRunningCPU(cpu)
/*
** Process Related definitions
@@ -296,16 +302,20 @@ extern PRStatus _MD_InitThread(PRThread *thread);
** context switch because it might have changed.
*/
/* ResetTimer(); before _PR_Schedule() */
-#define _MD_SWITCH_CONTEXT(_thread) \
- PR_BEGIN_MACRO \
- PR_ASSERT(_thread->no_sched); \
- if (!setjmp(_thread->md.jb)) { \
- _MD_SET_LAST_THREAD(_thread); \
- _PR_Schedule(); \
- } else { \
- PR_ASSERT(_MD_LAST_THREAD() !=_MD_CURRENT_THREAD()); \
- _MD_LAST_THREAD()->no_sched = 0; \
- } \
+
+
+#define _MD_SWITCH_CONTEXT(_thread) \
+ PR_BEGIN_MACRO \
+ PR_ASSERT(_thread->no_sched); \
+ if (!setjmp(_thread->md.jb)) { \
+ _MD_SET_LAST_THREAD(_thread); \
+ if (_PR_MD_CURRENT_CPU()->md.trackScheduling) \
+ _PR_MD_CURRENT_CPU()->md.lastThreadSwitch = UpTime(); \
+ _PR_Schedule(); \
+ } else { \
+ PR_ASSERT(_MD_LAST_THREAD() !=_MD_CURRENT_THREAD()); \
+ _MD_LAST_THREAD()->no_sched = 0; \
+ } \
PR_END_MACRO
/*
@@ -473,6 +483,7 @@ extern PRStatus _MD_setsockopt(PRFileDesc *fd, PRInt32 level, PRInt32 optname, c
*/
extern PRStatus _MD_gethostname(char *name, int namelen);
#define _MD_GETHOSTNAME _MD_gethostname
+#define _PR_GET_HOST_ADDR_AS_NAME
/*
XXX _MD_WRITEV, _MD_SHUTDOWN & _MD_GETPEERNAME not done yet!!!
@@ -514,7 +525,6 @@ extern PRStatus _MD_gethostname(char *name, int namelen);
** Time Related definitions
*/
-#define kMacTimerInMiliSecs 8L
#define _MD_GET_INTERVAL _MD_GetInterval
#define _MD_INTERVAL_PER_SEC() PR_MSEC_PER_SEC
#define _MD_INTERVAL_INIT()
@@ -647,7 +657,7 @@ extern PRStatus _MD_CloseFileMap(struct PRFileMap *fmap);
#define _MD_CLOSE_FILE_MAP _MD_CloseFileMap
extern void SetLogFileTypeCreator(const char *logFile);
-extern int _MD_mac_get_nonblocking_connect_error(PRInt32 osfd);
+extern int _MD_mac_get_nonblocking_connect_error(PRFileDesc* fd);
/*
@@ -681,6 +691,18 @@ extern void LeaveCritialRegion();
#endif
+
+/*
+ * CPU Idle support
+ */
+
+extern void InitIdleSemaphore();
+extern void TermIdleSemaphore();
+
+extern void WaitOnIdleSemaphore();
+extern void SignalIdleSemaphore();
+
+
/*
* Atomic operations
*/
diff --git a/pr/include/md/_netbsd.h b/pr/include/md/_netbsd.h
index 1e70994d..0ccc2399 100644
--- a/pr/include/md/_netbsd.h
+++ b/pr/include/md/_netbsd.h
@@ -80,6 +80,7 @@
#if __NetBSD_Version__ >= 105000000
#define _PR_INET6
+#define _PR_HAVE_INET_NTOP
#define _PR_HAVE_GETHOSTBYNAME2
#define _PR_INET6_PROBE
#endif
diff --git a/pr/include/md/_nto.h b/pr/include/md/_nto.h
index de6b8033..cd6213bf 100644
--- a/pr/include/md/_nto.h
+++ b/pr/include/md/_nto.h
@@ -212,4 +212,6 @@ struct _MDCPU {
*/
#define _MD_SELECT select
+#define SA_RESTART 0
+
#endif /* nspr_nto_defs_h___ */
diff --git a/pr/include/md/_openvms.h b/pr/include/md/_openvms.h
index b0a2af6f..4b3fb92a 100644
--- a/pr/include/md/_openvms.h
+++ b/pr/include/md/_openvms.h
@@ -97,6 +97,7 @@ struct ip_mreq {
#define _PR_USE_POLL
#define _PR_STAT_HAS_ONLY_ST_ATIME
#define _PR_NO_LARGE_FILES
+#define _PR_STRICT_ADDR_LEN
/* IPv6 support */
#ifdef _SOCKADDR_LEN
@@ -105,7 +106,9 @@ struct ip_mreq {
#define _PR_HAVE_GETIPNODEBYNAME
#define _PR_HAVE_GETIPNODEBYADDR
#define _PR_INET6_PROBE
-#ifndef _PR_INET6
+#ifdef _PR_INET6
+#define _PR_HAVE_INET_NTOP
+#else
#define AF_INET6 26
#define AI_V4MAPPED 0x00000010
#define AI_ALL 0x00000008
diff --git a/pr/include/md/_os2.h b/pr/include/md/_os2.h
index d98262d1..98d9b530 100644
--- a/pr/include/md/_os2.h
+++ b/pr/include/md/_os2.h
@@ -47,6 +47,31 @@
#include <errno.h>
+#define USE_RAMSEM
+
+#ifdef USE_RAMSEM
+#pragma pack(4)
+
+#pragma pack(2)
+typedef struct _RAMSEM
+{
+ ULONG ulTIDPID;
+ ULONG hevSem;
+ ULONG cLocks;
+ USHORT cWaiting;
+ USHORT cPosts;
+} RAMSEM, *PRAMSEM;
+
+typedef struct _CRITICAL_SECTION
+{
+ ULONG ulReserved[4]; /* Same size as RAMSEM */
+} CRITICAL_SECTION, *PCRITICAL_SECTION, *LPCRITICAL_SECTION;
+#pragma pack(4)
+
+APIRET _Optlink SemRequest486(PRAMSEM, ULONG);
+APIRET _Optlink SemReleasex86(PRAMSEM, ULONG);
+#endif
+
#ifdef XP_OS2_EMX
/*
* EMX-specific tweaks:
@@ -162,7 +187,11 @@ struct _MDNotified {
};
struct _MDLock {
- HMTX mutex; /* this is recursive on NT */
+#ifdef USE_RAMSEM
+ CRITICAL_SECTION mutex; /* this is recursive on NT */
+#else
+ HMTX mutex; /* this is recursive on NT */
+#endif
/*
* When notifying cvars, there is no point in actually
@@ -258,7 +287,7 @@ extern void _MD_MakeNonblock(PRFileDesc *f);
#define _MD_INIT_FD_INHERITABLE (_PR_MD_INIT_FD_INHERITABLE)
#define _MD_QUERY_FD_INHERITABLE (_PR_MD_QUERY_FD_INHERITABLE)
#define _MD_SHUTDOWN (_PR_MD_SHUTDOWN)
-#define _MD_LISTEN(s, backlog) listen(s->secret->md.osfd,backlog)
+#define _MD_LISTEN _PR_MD_LISTEN
extern PRInt32 _MD_CloseSocket(PRInt32 osfd);
#define _MD_CLOSE_SOCKET _MD_CloseSocket
#define _MD_SENDTO (_PR_MD_SENDTO)
@@ -349,11 +378,33 @@ extern PRInt32 _MD_Accept(PRFileDesc *fd, PRNetAddr *raddr, PRUint32 *rlen,
#define _PR_LOCK _MD_LOCK
#define _PR_UNLOCK _MD_UNLOCK
+#ifdef USE_RAMSEM
#define _MD_NEW_LOCK (_PR_MD_NEW_LOCK)
-#define _MD_FREE_LOCK (_PR_MD_FREE_LOCK)
-#define _MD_LOCK (_PR_MD_LOCK)
-#define _MD_TEST_AND_LOCK (_PR_MD_TEST_AND_LOCK)
-#define _MD_UNLOCK (_PR_MD_UNLOCK)
+#define _MD_FREE_LOCK(lock) (DosCloseEventSem(((PRAMSEM)(&((lock)->mutex)))->hevSem))
+#define _MD_LOCK(lock) (SemRequest486(&((lock)->mutex), -1))
+#define _MD_TEST_AND_LOCK(lock) (SemRequest486(&((lock)->mutex), -1),0)
+#define _MD_UNLOCK(lock) \
+ PR_BEGIN_MACRO \
+ if (0 != (lock)->notified.length) { \
+ md_UnlockAndPostNotifies((lock), NULL, NULL); \
+ } else { \
+ SemReleasex86( &(lock)->mutex, 0 ); \
+ } \
+ PR_END_MACRO
+#else
+#define _MD_NEW_LOCK (_PR_MD_NEW_LOCK)
+#define _MD_FREE_LOCK(lock) (DosCloseMutexSem((lock)->mutex))
+#define _MD_LOCK(lock) (DosRequestMutexSem((lock)->mutex, SEM_INDEFINITE_WAIT))
+#define _MD_TEST_AND_LOCK(lock) (DosRequestMutexSem((lock)->mutex, SEM_INDEFINITE_WAIT),0)
+#define _MD_UNLOCK(lock) \
+ PR_BEGIN_MACRO \
+ if (0 != (lock)->notified.length) { \
+ md_UnlockAndPostNotifies((lock), NULL, NULL); \
+ } else { \
+ DosReleaseMutexSem((lock)->mutex); \
+ } \
+ PR_END_MACRO
+#endif
/* --- lock and cv waiting --- */
#define _MD_WAIT (_PR_MD_WAIT)
@@ -537,4 +588,6 @@ unsigned long _System _DLL_InitTerm( unsigned long mod_handle, unsigned long fla
#define FreeLibrary(x) DosFreeModule((HMODULE)x)
#define OutputDebugString(x)
+extern int _MD_os2_get_nonblocking_connect_error(int osfd);
+
#endif /* nspr_os2_defs_h___ */
diff --git a/pr/include/md/_os2_errors.h b/pr/include/md/_os2_errors.h
index f77e8f6e..f196a201 100644
--- a/pr/include/md/_os2_errors.h
+++ b/pr/include/md/_os2_errors.h
@@ -40,14 +40,17 @@
#include <assert.h>
#endif
+NSPR_API(void) _MD_os2_map_default_error(PRInt32 err);
+#define _PR_MD_MAP_DEFAULT_ERROR _MD_os2_map_default_error
+
NSPR_API(void) _MD_os2_map_opendir_error(PRInt32 err);
#define _PR_MD_MAP_OPENDIR_ERROR _MD_os2_map_opendir_error
NSPR_API(void) _MD_os2_map_closedir_error(PRInt32 err);
#define _PR_MD_MAP_CLOSEDIR_ERROR _MD_os2_map_closedir_error
-NSPR_API(void) _MD_unix_readdir_error(PRInt32 err);
-#define _PR_MD_MAP_READDIR_ERROR _MD_unix_readdir_error
+NSPR_API(void) _MD_os2_readdir_error(PRInt32 err);
+#define _PR_MD_MAP_READDIR_ERROR _MD_os2_readdir_error
NSPR_API(void) _MD_os2_map_delete_error(PRInt32 err);
#define _PR_MD_MAP_DELETE_ERROR _MD_os2_map_delete_error
@@ -103,6 +106,9 @@ NSPR_API(void) _MD_os2_map_send_error(PRInt32 err);
NSPR_API(void) _MD_os2_map_sendto_error(PRInt32 err);
#define _PR_MD_MAP_SENDTO_ERROR _MD_os2_map_sendto_error
+NSPR_API(void) _MD_os2_map_writev_error(int err);
+#define _PR_MD_MAP_WRITEV_ERROR _MD_os2_map_writev_error
+
NSPR_API(void) _MD_os2_map_accept_error(PRInt32 err);
#define _PR_MD_MAP_ACCEPT_ERROR _MD_os2_map_accept_error
diff --git a/pr/include/md/_osf1.h b/pr/include/md/_osf1.h
index edf2fa3d..a098a0db 100644
--- a/pr/include/md/_osf1.h
+++ b/pr/include/md/_osf1.h
@@ -60,19 +60,14 @@
#define _PR_POLL_AVAILABLE
#define _PR_USE_POLL
-/*
- * OSF1 and HPUX report the POLLHUP event for a socket when the
- * shutdown(SHUT_WR) operation is called for the remote end, even though
- * the socket is still writeable. Use select(), instead of poll(), to
- * workaround this problem.
- */
-#define _PR_POLL_WITH_SELECT
#define _PR_STAT_HAS_ONLY_ST_ATIME
#define _PR_HAVE_LARGE_OFF_T
#define _PR_HAVE_GETIPNODEBYNAME
#define _PR_HAVE_GETIPNODEBYADDR
#define _PR_INET6_PROBE
-#ifndef _PR_INET6
+#ifdef _PR_INET6
+#define _PR_HAVE_INET_NTOP
+#else
#define AF_INET6 26
#define AI_V4MAPPED 0x00000010
#define AI_ALL 0x00000008
diff --git a/pr/include/md/_pth.h b/pr/include/md/_pth.h
index faa50377..3a50899c 100644
--- a/pr/include/md/_pth.h
+++ b/pr/include/md/_pth.h
@@ -91,7 +91,11 @@
#define _PT_PTHREAD_MUTEXATTR_DESTROY pthread_mutexattr_destroy
#define _PT_PTHREAD_MUTEX_INIT(m, a) pthread_mutex_init(&(m), &(a))
#define _PT_PTHREAD_MUTEX_IS_LOCKED(m) (EBUSY == pthread_mutex_trylock(&(m)))
+#if defined(DARWIN)
+#define _PT_PTHREAD_CONDATTR_INIT(x) 0
+#else
#define _PT_PTHREAD_CONDATTR_INIT pthread_condattr_init
+#endif
#define _PT_PTHREAD_CONDATTR_DESTROY pthread_condattr_destroy
#define _PT_PTHREAD_COND_INIT(m, a) pthread_cond_init(&(m), &(a))
#endif
@@ -182,21 +186,20 @@
#endif
/*
- * These platforms don't have pthread_atfork()
+ * These platforms don't have sigtimedwait()
*/
-#if defined(_PR_DCETHREADS) || defined(FREEBSD) \
- || (defined(LINUX) && defined(__alpha)) \
- || defined(NETBSD) || defined(OPENBSD)
-#define PT_NO_ATFORK
+#if (defined(AIX) && !defined(AIX4_3_PLUS)) || defined(LINUX) \
+ || defined(FREEBSD) || defined(NETBSD) || defined(OPENBSD) \
+ || defined(BSDI) || defined(VMS) || defined(UNIXWARE) \
+ || defined(DARWIN)
+#define PT_NO_SIGTIMEDWAIT
#endif
/*
- * These platforms don't have sigtimedwait()
+ * These platforms don't have pthread_kill()
*/
-#if (defined(AIX) && !defined(AIX4_3)) || defined(LINUX) \
- || defined(FREEBSD) || defined(NETBSD) || defined(OPENBSD) \
- || defined(BSDI) || defined(VMS) || defined(UNIXWARE)
-#define PT_NO_SIGTIMEDWAIT
+#if defined(DARWIN)
+#define pthread_kill(thread, sig) ENOSYS
#endif
#if defined(OSF1) || defined(VMS)
@@ -225,7 +228,7 @@
#define PT_PRIO_MAX sched_get_priority_max(SCHED_OTHER)
#endif /* defined(_PR_DCETHREADS) */
-#elif defined(LINUX)
+#elif defined(LINUX) || defined(FREEBSD)
#define PT_PRIO_MIN sched_get_priority_min(SCHED_OTHER)
#define PT_PRIO_MAX sched_get_priority_max(SCHED_OTHER)
#elif defined(NTO)
@@ -245,7 +248,7 @@
*/
#define PT_PRIO_MIN 1
#define PT_PRIO_MAX 127
-#elif defined(FREEBSD) || defined(NETBSD) || defined(OPENBSD) \
+#elif defined(NETBSD) || defined(OPENBSD) \
|| defined(BSDI) || defined(DARWIN) || defined(UNIXWARE) /* XXX */
#define PT_PRIO_MIN 0
#define PT_PRIO_MAX 126
diff --git a/pr/include/md/_solaris.h b/pr/include/md/_solaris.h
index a6412b69..01b5fed4 100644
--- a/pr/include/md/_solaris.h
+++ b/pr/include/md/_solaris.h
@@ -41,7 +41,13 @@
#define PR_LINKER_ARCH "solaris"
#define _PR_SI_SYSNAME "SOLARIS"
+#ifdef sparc
#define _PR_SI_ARCHITECTURE "sparc"
+#elif defined(i386)
+#define _PR_SI_ARCHITECTURE "x86"
+#else
+#error unknown processor
+#endif
#define PR_DLL_SUFFIX ".so"
#define _PR_VMBASE 0x30000000
@@ -105,7 +111,9 @@
#define _PR_HAVE_GETIPNODEBYADDR
#define _PR_INET6_PROBE
#define _PR_ACCEPT_INHERIT_NONBLOCK
-#ifndef _PR_INET6
+#ifdef _PR_INET6
+#define _PR_HAVE_INET_NTOP
+#else
#define AF_INET6 26
#define AI_V4MAPPED 0x0001
#define AI_ALL 0x0002
@@ -784,5 +792,7 @@ PR_END_EXTERN_C
#endif /* _PR_GLOBAL_THREADS_ONLY */
+extern void _MD_solaris_map_sendfile_error(int err);
+
#endif /* nspr_solaris_defs_h___ */
diff --git a/pr/include/md/_solaris32.cfg b/pr/include/md/_solaris32.cfg
index 10cb3364..ec19c4d3 100644
--- a/pr/include/md/_solaris32.cfg
+++ b/pr/include/md/_solaris32.cfg
@@ -43,12 +43,12 @@
#define SOLARIS
#endif
-#ifdef sparc
+#if defined(sparc) || defined(__sparc)
#undef IS_LITTLE_ENDIAN
#define IS_BIG_ENDIAN 1
#define PR_ALIGN_OF_INT64 8
#define PR_ALIGN_OF_DOUBLE 8
-#elif defined(i386)
+#elif defined(i386) || defined(__i386)
#define IS_LITTLE_ENDIAN 1
#undef IS_BIG_ENDIAN
#define PR_ALIGN_OF_INT64 4
diff --git a/pr/include/md/_solaris64.cfg b/pr/include/md/_solaris64.cfg
index 8318b74b..54331c51 100644
--- a/pr/include/md/_solaris64.cfg
+++ b/pr/include/md/_solaris64.cfg
@@ -43,12 +43,12 @@
#define SOLARIS
#endif
-#ifdef sparc
+#if defined(sparc) || defined(__sparc)
#undef IS_LITTLE_ENDIAN
#define IS_BIG_ENDIAN 1
#define PR_ALIGN_OF_INT64 8
#define PR_ALIGN_OF_DOUBLE 8
-#elif defined(i386)
+#elif defined(i386) || defined(__i386)
#define IS_LITTLE_ENDIAN 1
#undef IS_BIG_ENDIAN
#define PR_ALIGN_OF_INT64 4
diff --git a/pr/include/md/_unixos.h b/pr/include/md/_unixos.h
index 345c48d5..25ae239c 100644
--- a/pr/include/md/_unixos.h
+++ b/pr/include/md/_unixos.h
@@ -145,6 +145,9 @@ extern PRUint32 _pr_md_ioq_timeout;
struct _MDFileDesc {
int osfd;
+#if defined(LINUX) && defined(_PR_PTHREADS)
+ int tcp_nodelay; /* used by pt_LinuxSendFile */
+#endif
};
struct _MDDir {
diff --git a/pr/include/md/_win16.h b/pr/include/md/_win16.h
index 147ef77a..15edc7db 100644
--- a/pr/include/md/_win16.h
+++ b/pr/include/md/_win16.h
@@ -443,13 +443,6 @@ NSPR_API(void) _PR_UserDestroyThread(PRThread *thread);
/*
- * _PR_ShutdownLinker unloads all dlls loaded by the application via
- * calls to PR_LoadLibrary
- */
-void _PR_ShutdownLinker(void);
-
-
-/*
** If thread emulation is used, then setjmp/longjmp stores the register
** state of each thread.
**
diff --git a/pr/include/md/_win95.h b/pr/include/md/_win95.h
index 6a9bb271..5307a881 100644
--- a/pr/include/md/_win95.h
+++ b/pr/include/md/_win95.h
@@ -112,6 +112,16 @@ struct _MDDir {
PRUint32 magic; /* for debugging */
};
+#ifdef MOZ_UNICODE
+struct _MDDirUTF16 {
+ HANDLE d_hdl;
+ WIN32_FIND_DATAW d_entry;
+ PRBool firstEntry; /* Is this the entry returned
+ * by FindFirstFileW()? */
+ PRUint32 magic; /* for debugging */
+};
+#endif /* MOZ_UNICODE */
+
struct _MDCVar {
PRUint32 magic;
struct PRThread *waitHead, *waitTail; /* the wait queue: a doubly-
@@ -213,6 +223,15 @@ extern PRInt32 _MD_CloseFile(PRInt32 osfd);
#define _MD_TLOCKFILE _PR_MD_TLOCKFILE
#define _MD_UNLOCKFILE _PR_MD_UNLOCKFILE
+#ifdef MOZ_UNICODE
+/* --- UTF16 IO stuff --- */
+#define _MD_OPEN_FILE_UTF16 _PR_MD_OPEN_FILE_UTF16
+#define _MD_OPEN_DIR_UTF16 _PR_MD_OPEN_DIR_UTF16
+#define _MD_READ_DIR_UTF16 _PR_MD_READ_DIR_UTF16
+#define _MD_CLOSE_DIR_UTF16 _PR_MD_CLOSE_DIR_UTF16
+#define _MD_GETFILEINFO64_UTF16 _PR_MD_GETFILEINFO64_UTF16
+#endif /* MOZ_UNICODE */
+
/* --- Socket IO stuff --- */
#define _MD_EACCES WSAEACCES
#define _MD_EADDRINUSE WSAEADDRINUSE
@@ -243,7 +262,7 @@ extern void _MD_MakeNonblock(PRFileDesc *f);
#define _MD_INIT_FD_INHERITABLE _PR_MD_INIT_FD_INHERITABLE
#define _MD_QUERY_FD_INHERITABLE _PR_MD_QUERY_FD_INHERITABLE
#define _MD_SHUTDOWN _PR_MD_SHUTDOWN
-#define _MD_LISTEN(s, backlog) listen(s->secret->md.osfd,backlog)
+#define _MD_LISTEN _PR_MD_LISTEN
extern PRInt32 _MD_CloseSocket(PRInt32 osfd);
#define _MD_CLOSE_SOCKET _MD_CloseSocket
#define _MD_SENDTO _PR_MD_SENDTO
@@ -405,6 +424,9 @@ extern PRStatus _PR_KillWindowsProcess(struct PRProcess *process);
#define _MD_INTERVAL_PER_MILLISEC() (_PR_MD_INTERVAL_PER_SEC() / 1000)
#define _MD_INTERVAL_PER_MICROSEC() (_PR_MD_INTERVAL_PER_SEC() / 1000000)
+/* --- Time --- */
+extern void _PR_FileTimeToPRTime(const FILETIME *filetime, PRTime *prtm);
+
/* --- Native-Thread Specific Definitions ------------------------------- */
extern struct PRThread * _MD_CURRENT_THREAD(void);
diff --git a/pr/include/md/_winnt.h b/pr/include/md/_winnt.h
index de8a2cf7..efc60edd 100644
--- a/pr/include/md/_winnt.h
+++ b/pr/include/md/_winnt.h
@@ -47,6 +47,9 @@
#include <windows.h>
#include <winsock.h>
+#ifdef __MINGW32__
+#include <mswsock.h>
+#endif
#include <errno.h>
#include "prio.h"
@@ -346,6 +349,8 @@ extern int _PR_NTFiberSafeSelect(int, fd_set *, fd_set *, fd_set *,
#define _MD_INIT_THREAD _PR_MD_INIT_THREAD
#define _MD_INIT_ATTACHED_THREAD _PR_MD_INIT_THREAD
#define _MD_CREATE_THREAD _PR_MD_CREATE_THREAD
+#define _MD_JOIN_THREAD _PR_MD_JOIN_THREAD
+#define _MD_END_THREAD _PR_MD_END_THREAD
#define _MD_YIELD _PR_MD_YIELD
#define _MD_SET_PRIORITY _PR_MD_SET_PRIORITY
#define _MD_CLEAN_THREAD _PR_MD_CLEAN_THREAD
@@ -449,6 +454,9 @@ extern PRStatus _PR_KillWindowsProcess(struct PRProcess *process);
#define _MD_INTERVAL_PER_MILLISEC() (_PR_MD_INTERVAL_PER_SEC() / 1000)
#define _MD_INTERVAL_PER_MICROSEC() (_PR_MD_INTERVAL_PER_SEC() / 1000000)
+/* --- Time --- */
+extern void _PR_FileTimeToPRTime(const FILETIME *filetime, PRTime *prtm);
+
/* --- Native-Thread Specific Definitions ------------------------------- */
extern BOOL _pr_use_static_tls;
diff --git a/pr/include/obsolete/Makefile.in b/pr/include/obsolete/Makefile.in
index 88342b0b..f2d78313 100644
--- a/pr/include/obsolete/Makefile.in
+++ b/pr/include/obsolete/Makefile.in
@@ -48,7 +48,7 @@ HEADERS = $(wildcard $(srcdir)/*.h)
RELEASE_HEADERS = $(HEADERS)
RELEASE_HEADERS_DEST = $(RELEASE_INCLUDE_DIR)/obsolete
-includedir := $(includedir)/obsolete
+include_subdir = obsolete
include $(topsrcdir)/config/rules.mk
diff --git a/pr/include/prcountr.h b/pr/include/prcountr.h
index 1a7d1456..105135f1 100644
--- a/pr/include/prcountr.h
+++ b/pr/include/prcountr.h
@@ -116,7 +116,6 @@ typedef void * PRCounterHandle;
#define PRCOUNTER_DESC_MAX 255
-#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
/* -----------------------------------------------------------------------
** FUNCTION: PR_DEFINE_COUNTER() -- Define a PRCounterHandle
@@ -135,8 +134,12 @@ typedef void * PRCounterHandle;
** to value.
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_INIT_COUNTER_HANDLE(handle,value)\
(handle) = (PRCounterHandle)(value)
+#else
+#define PR_INIT_COUNTER_HANDLE(handle,value)
+#endif
/* -----------------------------------------------------------------------
** FUNCTION: PR_CreateCounter() -- Create a counter
@@ -167,8 +170,12 @@ typedef void * PRCounterHandle;
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_CREATE_COUNTER(handle,qName,rName,description)\
(handle) = PR_CreateCounter((qName),(rName),(description))
+#else
+#define PR_CREATE_COUNTER(handle,qName,rName,description)
+#endif
NSPR_API(PRCounterHandle)
PR_CreateCounter(
@@ -194,7 +201,11 @@ NSPR_API(PRCounterHandle)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_DESTROY_COUNTER(handle) PR_DestroyCounter((handle))
+#else
+#define PR_DESTROY_COUNTER(handle)
+#endif
NSPR_API(void)
PR_DestroyCounter(
@@ -222,8 +233,12 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_GET_COUNTER_HANDLE_FROM_NAME(handle,qName,rName)\
(handle) = PR_GetCounterHandleFromName((qName),(rName))
+#else
+#define PR_GET_COUNTER_HANDLE_FROM_NAME(handle,qName,rName)
+#endif
NSPR_API(PRCounterHandle)
PR_GetCounterHandleFromName(
@@ -251,8 +266,12 @@ NSPR_API(PRCounterHandle)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_GET_COUNTER_NAME_FROM_HANDLE(handle,qName,rName,description)\
PR_GetCounterNameFromHandle((handle),(qName),(rName),(description))
+#else
+#define PR_GET_COUNTER_NAME_FROM_HANDLE(handle,qName,rName,description )
+#endif
NSPR_API(void)
PR_GetCounterNameFromHandle(
@@ -279,7 +298,11 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_INCREMENT_COUNTER(handle) PR_IncrementCounter(handle)
+#else
+#define PR_INCREMENT_COUNTER(handle)
+#endif
NSPR_API(void)
PR_IncrementCounter(
@@ -304,7 +327,11 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_DECREMENT_COUNTER(handle) PR_DecrementCounter(handle)
+#else
+#define PR_DECREMENT_COUNTER(handle)
+#endif
NSPR_API(void)
PR_DecrementCounter(
@@ -328,8 +355,12 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_ADD_TO_COUNTER(handle,value)\
PR_AddToCounter((handle),(value))
+#else
+#define PR_ADD_TO_COUNTER(handle,value)
+#endif
NSPR_API(void)
PR_AddToCounter(
@@ -358,8 +389,12 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_SUBTRACT_FROM_COUNTER(handle,value)\
PR_SubtractFromCounter((handle),(value))
+#else
+#define PR_SUBTRACT_FROM_COUNTER(handle,value)
+#endif
NSPR_API(void)
PR_SubtractFromCounter(
@@ -384,8 +419,12 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_GET_COUNTER(counter,handle)\
(counter) = PR_GetCounter((handle))
+#else
+#define PR_GET_COUNTER(counter,handle) 0
+#endif
NSPR_API(PRUint32)
PR_GetCounter(
@@ -412,7 +451,11 @@ NSPR_API(PRUint32)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_SET_COUNTER(handle,value) PR_SetCounter((handle),(value))
+#else
+#define PR_SET_COUNTER(handle,value)
+#endif
NSPR_API(void)
PR_SetCounter(
@@ -450,8 +493,12 @@ NSPR_API(void)
** operations may cause unpredictable results.
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_FIND_NEXT_COUNTER_QNAME(next,handle)\
(next) = PR_FindNextCounterQname((handle))
+#else
+#define PR_FIND_NEXT_COUNTER_QNAME(next,handle) NULL
+#endif
NSPR_API(PRCounterHandle)
PR_FindNextCounterQname(
@@ -489,8 +536,12 @@ NSPR_API(PRCounterHandle)
** operations may cause unpredictable results.
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#define PR_FIND_NEXT_COUNTER_RNAME(next,rhandle,qhandle)\
(next) = PR_FindNextCounterRname((rhandle),(qhandle))
+#else
+#define PR_FIND_NEXT_COUNTER_RNAME(next,rhandle,qhandle)
+#endif
NSPR_API(PRCounterHandle)
PR_FindNextCounterRname(
@@ -498,31 +549,6 @@ NSPR_API(PRCounterHandle)
PRCounterHandle qhandle
);
-
-#else /* ( !(defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)) */
-/*
-** When counters are not compiled in, provide macros that
-** evaluate to No-Ops.
-**
-*/
-
-#define PR_DEFINE_COUNTER(name) PRCounterHandle name
-#define PR_INIT_COUNTER_HANDLE(handle,value)
-#define PR_CREATE_COUNTER(handle,qName,rName,description)
-#define PR_DESTROY_COUNTER(handle)
-#define PR_GET_COUNTER_HANDLE_FROM_NAME(handle,qName,rName)
-#define PR_GET_COUNTER_NAME_FROM_HANDLE(handle,qName,rName,description )
-#define PR_INCREMENT_COUNTER(handle)
-#define PR_DECREMENT_COUNTER(handle)
-#define PR_ADD_TO_COUNTER(handle,value)
-#define PR_SUBTRACT_FROM_COUNTER(handle,value)
-#define PR_GET_COUNTER(counter,handle) 0
-#define PR_SET_COUNTER(handle,value)
-#define PR_FIND_NEXT_COUNTER_QNAME(next,handle) NULL
-#define PR_FIND_NEXT_COUNTER_RNAME(next,rhandle,qhandle)
-
-#endif /* ( !(defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)) */
-
PR_END_EXTERN_C
#endif /* prcountr_h___ */
diff --git a/pr/include/prerr.h b/pr/include/prerr.h
index 530526b6..5bb6c9e8 100644
--- a/pr/include/prerr.h
+++ b/pr/include/prerr.h
@@ -263,8 +263,11 @@
/* Host is unreachable */
#define PR_HOST_UNREACHABLE_ERROR (-5927L)
+/* The library is not loaded */
+#define PR_LIBRARY_NOT_LOADED_ERROR (-5926L)
+
/* Placeholder for the end of the list */
-#define PR_MAX_ERROR (-5926L)
+#define PR_MAX_ERROR (-5925L)
extern void nspr_InitializePRErrorTable(void);
#define ERROR_TABLE_BASE_nspr (-6000L)
diff --git a/pr/include/prinet.h b/pr/include/prinet.h
index f5aea7eb..8dba5cd1 100644
--- a/pr/include/prinet.h
+++ b/pr/include/prinet.h
@@ -57,7 +57,7 @@
#define prinet_h__
#if defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS)
-#ifdef linux
+#ifdef LINUX
#undef __STRICT_ANSI__
#define __STRICT_ANSI__
#endif
diff --git a/pr/include/prinit.h b/pr/include/prinit.h
index 0e8e124c..ad2a6f1f 100644
--- a/pr/include/prinit.h
+++ b/pr/include/prinit.h
@@ -60,9 +60,9 @@ PR_BEGIN_EXTERN_C
** The format of the version string is
** "<major version>.<minor version>[.<patch level>] [<Beta>]"
*/
-#define PR_VERSION "4.2 Beta"
+#define PR_VERSION "4.3 Beta"
#define PR_VMAJOR 4
-#define PR_VMINOR 2
+#define PR_VMINOR 3
#define PR_VPATCH 0
#define PR_BETA PR_TRUE
@@ -220,11 +220,19 @@ typedef struct PRCallOnceType {
typedef PRStatus (PR_CALLBACK *PRCallOnceFN)(void);
+typedef PRStatus (PR_CALLBACK *PRCallOnceWithArgFN)(void *arg);
+
NSPR_API(PRStatus) PR_CallOnce(
PRCallOnceType *once,
PRCallOnceFN func
);
+NSPR_API(PRStatus) PR_CallOnceWithArg(
+ PRCallOnceType *once,
+ PRCallOnceWithArgFN func,
+ void *arg
+);
+
PR_END_EXTERN_C
diff --git a/pr/include/prio.h b/pr/include/prio.h
index f60e1f1a..42beca33 100644
--- a/pr/include/prio.h
+++ b/pr/include/prio.h
@@ -52,6 +52,10 @@ PR_BEGIN_EXTERN_C
/* Typedefs */
typedef struct PRDir PRDir;
typedef struct PRDirEntry PRDirEntry;
+#ifdef MOZ_UNICODE
+typedef struct PRDirUTF16 PRDirUTF16;
+typedef struct PRDirEntryUTF16 PRDirEntryUTF16;
+#endif /* MOZ_UNICODE */
typedef struct PRFileDesc PRFileDesc;
typedef struct PRFileInfo PRFileInfo;
typedef struct PRFileInfo64 PRFileInfo64;
@@ -156,7 +160,7 @@ struct PRIPv6Addr {
#define pr_s6_addr _S6_un._S6_u8
#define pr_s6_addr16 _S6_un._S6_u16
#define pr_s6_addr32 _S6_un._S6_u32
-#define pr_s6_addr64 _S6_un._S6_addr64
+#define pr_s6_addr64 _S6_un._S6_u64
typedef struct PRIPv6Addr PRIPv6Addr;
@@ -650,6 +654,14 @@ NSPR_API(PRFileDesc*) PR_Open(const char *name, PRIntn flags, PRIntn mode);
NSPR_API(PRFileDesc*) PR_OpenFile(
const char *name, PRIntn flags, PRIntn mode);
+#ifdef MOZ_UNICODE
+/*
+ * EXPERIMENTAL: This function may be removed in a future release.
+ */
+NSPR_API(PRFileDesc*) PR_OpenFileUTF16(
+ const PRUnichar *name, PRIntn flags, PRIntn mode);
+#endif /* MOZ_UNICODE */
+
/*
**************************************************************************
* FUNCTION: PR_Close
@@ -830,6 +842,13 @@ struct PRFileInfo64 {
NSPR_API(PRStatus) PR_GetFileInfo(const char *fn, PRFileInfo *info);
NSPR_API(PRStatus) PR_GetFileInfo64(const char *fn, PRFileInfo64 *info);
+#ifdef MOZ_UNICODE
+/*
+ * EXPERIMENTAL: This function may be removed in a future release.
+ */
+NSPR_API(PRStatus) PR_GetFileInfo64UTF16(const PRUnichar *fn, PRFileInfo64 *info);
+#endif /* MOZ_UNICODE */
+
/*
**************************************************************************
* FUNCTION: PR_GetOpenFileInfo, PR_GetOpenFileInfo64
@@ -984,6 +1003,13 @@ struct PRDirEntry {
const char *name; /* name of entry, relative to directory name */
};
+#ifdef MOZ_UNICODE
+struct PRDirEntryUTF16 {
+ const PRUnichar *name; /* name of entry in UTF16, relative to
+ * directory name */
+};
+#endif /* MOZ_UNICODE */
+
#if !defined(NO_NSPR_10_SUPPORT)
#define PR_DirName(dirEntry) (dirEntry->name)
#endif
@@ -1010,6 +1036,13 @@ struct PRDirEntry {
NSPR_API(PRDir*) PR_OpenDir(const char *name);
+#ifdef MOZ_UNICODE
+/*
+ * EXPERIMENTAL: This function may be removed in a future release.
+ */
+NSPR_API(PRDirUTF16*) PR_OpenDirUTF16(const PRUnichar *name);
+#endif /* MOZ_UNICODE */
+
/*
*************************************************************************
* FUNCTION: PR_ReadDir
@@ -1043,6 +1076,13 @@ typedef enum PRDirFlags {
NSPR_API(PRDirEntry*) PR_ReadDir(PRDir *dir, PRDirFlags flags);
+#ifdef MOZ_UNICODE
+/*
+ * EXPERIMENTAL: This function may be removed in a future release.
+ */
+NSPR_API(PRDirEntryUTF16*) PR_ReadDirUTF16(PRDirUTF16 *dir, PRDirFlags flags);
+#endif /* MOZ_UNICODE */
+
/*
*************************************************************************
* FUNCTION: PR_CloseDir
@@ -1062,6 +1102,13 @@ NSPR_API(PRDirEntry*) PR_ReadDir(PRDir *dir, PRDirFlags flags);
NSPR_API(PRStatus) PR_CloseDir(PRDir *dir);
+#ifdef MOZ_UNICODE
+/*
+ * EXPERIMENTAL: This function may be removed in a future release.
+ */
+NSPR_API(PRStatus) PR_CloseDirUTF16(PRDirUTF16 *dir);
+#endif /* MOZ_UNICODE */
+
/*
*************************************************************************
* FUNCTION: PR_MkDir
@@ -1240,7 +1287,7 @@ NSPR_API(PRStatus) PR_Connect(
* PR_Poll()
* RETURN: PRStatus
* If the nonblocking connect has successfully completed,
- * PR_GetConnectStatus returns PR_SUCCESS. If PR_GetConnectStatus()
+ * PR_ConnectContinue returns PR_SUCCESS. If PR_ConnectContinue()
* returns PR_FAILURE, call PR_GetError():
* - PR_IN_PROGRESS_ERROR: the nonblocking connect is still in
* progress and has not completed yet. The caller should poll
@@ -1880,9 +1927,12 @@ struct PRPollDesc {
** DESCRIPTION:
**
** The call returns as soon as I/O is ready on one or more of the underlying
-** file/socket objects. A count of the number of ready descriptors is
+** socket objects. A count of the number of ready descriptors is
** returned unless a timeout occurs in which case zero is returned.
**
+** PRPollDesc.fd should be set to a pointer to a PRFileDesc object
+** representing a socket. This field can be set to NULL to indicate to
+** PR_Poll that this PRFileDesc object should be ignored.
** PRPollDesc.in_flags should be set to the desired request
** (read/write/except or some combination). Upon successful return from
** this call PRPollDesc.out_flags will be set to indicate what kind of
diff --git a/pr/include/private/Makefile.in b/pr/include/private/Makefile.in
index 31c82552..cafb86c8 100644
--- a/pr/include/private/Makefile.in
+++ b/pr/include/private/Makefile.in
@@ -49,7 +49,7 @@ RELEASE_HEADERS_DEST = $(RELEASE_INCLUDE_DIR)/private
HEADERS = $(RELEASE_HEADERS) $(srcdir)/pprmwait.h $(srcdir)/primpl.h
-includedir := $(includedir)/private
+include_subdir = private
include $(topsrcdir)/config/rules.mk
diff --git a/pr/include/private/primpl.h b/pr/include/private/primpl.h
index 8501c0e0..830d1332 100644
--- a/pr/include/private/primpl.h
+++ b/pr/include/private/primpl.h
@@ -144,6 +144,9 @@ typedef struct _MDThread _MDThread;
typedef struct _MDThreadStack _MDThreadStack;
typedef struct _MDSemaphore _MDSemaphore;
typedef struct _MDDir _MDDir;
+#ifdef MOZ_UNICODE
+typedef struct _MDDirUTF16 _MDDirUTF16;
+#endif /* MOZ_UNICODE */
typedef struct _MDFileDesc _MDFileDesc;
typedef struct _MDProcess _MDProcess;
typedef struct _MDFileMap _MDFileMap;
@@ -216,22 +219,13 @@ typedef struct PTDebug
PRUintn cvars_notified, delayed_cv_deletes;
} PTDebug;
-NSPR_API(void) PT_GetStats(PTDebug* here);
-NSPR_API(void) PT_FPrintStats(PRFileDesc *fd, const char *msg);
-
-#else
-
-typedef PRUintn PTDebug;
-#define PT_GetStats(_p)
-#define PT_FPrintStats(_fd, _msg)
-
#endif /* defined(DEBUG) */
+NSPR_API(void) PT_FPrintStats(PRFileDesc *fd, const char *msg);
+
#else /* defined(_PR_PTHREADS) */
-typedef PRUintn PTDebug;
-#define PT_GetStats(_p)
-#define PT_FPrintStats(_fd, _msg)
+NSPR_API(void) PT_FPrintStats(PRFileDesc *fd, const char *msg);
/*
** This section is contains those parts needed to implement NSPR on
@@ -1022,6 +1016,12 @@ extern PRStatus _PR_MD_CREATE_THREAD(
PRUint32 stackSize);
#define _PR_MD_CREATE_THREAD _MD_CREATE_THREAD
+extern void _PR_MD_JOIN_THREAD(_MDThread *md);
+#define _PR_MD_JOIN_THREAD _MD_JOIN_THREAD
+
+extern void _PR_MD_END_THREAD(void);
+#define _PR_MD_END_THREAD _MD_END_THREAD
+
extern void _PR_MD_YIELD(void);
#define _PR_MD_YIELD _MD_YIELD
@@ -1138,6 +1138,24 @@ extern PRInt32 _PR_MD_MAKE_DIR(const char *name, PRIntn mode);
extern PRInt32 _PR_MD_RMDIR(const char *name);
#define _PR_MD_RMDIR _MD_RMDIR
+#ifdef MOZ_UNICODE
+/* UTF16 File I/O related */
+extern PRStatus _PR_MD_OPEN_DIR_UTF16(_MDDirUTF16 *md, const PRUnichar *name);
+#define _PR_MD_OPEN_DIR_UTF16 _MD_OPEN_DIR_UTF16
+
+extern PRInt32 _PR_MD_OPEN_FILE_UTF16(const PRUnichar *name, PRIntn osflags, PRIntn mode);
+#define _PR_MD_OPEN_FILE_UTF16 _MD_OPEN_FILE_UTF16
+
+extern PRUnichar * _PR_MD_READ_DIR_UTF16(_MDDirUTF16 *md, PRIntn flags);
+#define _PR_MD_READ_DIR_UTF16 _MD_READ_DIR_UTF16
+
+extern PRInt32 _PR_MD_CLOSE_DIR_UTF16(_MDDirUTF16 *md);
+#define _PR_MD_CLOSE_DIR_UTF16 _MD_CLOSE_DIR_UTF16
+
+extern PRInt32 _PR_MD_GETFILEINFO64_UTF16(const PRUnichar *fn, PRFileInfo64 *info);
+#define _PR_MD_GETFILEINFO64_UTF16 _MD_GETFILEINFO64_UTF16
+#endif /* MOZ_UNICODE */
+
/* Socket I/O related */
extern void _PR_MD_INIT_IO(void);
#define _PR_MD_INIT_IO _MD_INIT_IO
@@ -1716,6 +1734,13 @@ struct PRFilePrivate {
PRBool appendMode;
#endif
_MDFileDesc md;
+#ifdef _PR_STRICT_ADDR_LEN
+ PRUint16 af; /* If the platform requires passing the exact
+ * length of the sockaddr structure for the
+ * address family of the socket to socket
+ * functions like accept(), we need to save
+ * the address family of the socket. */
+#endif
};
struct PRDir {
@@ -1723,6 +1748,13 @@ struct PRDir {
_MDDir md;
};
+#ifdef MOZ_UNICODE
+struct PRDirUTF16 {
+ PRDirEntry d;
+ _MDDirUTF16 md;
+};
+#endif /* MOZ_UNICODE */
+
extern void _PR_InitSegs(void);
extern void _PR_InitStacks(void);
extern void _PR_InitTPD(void);
@@ -1741,10 +1773,18 @@ extern void _PR_InitMW(void);
extern void _PR_InitRWLocks(void);
extern void _PR_NotifyCondVar(PRCondVar *cvar, PRThread *me);
extern void _PR_CleanupThread(PRThread *thread);
+extern void _PR_CleanupCallOnce(void);
+extern void _PR_CleanupMW(void);
+extern void _PR_CleanupDtoa(void);
+extern void _PR_ShutdownLinker(void);
extern void _PR_CleanupEnv(void);
extern void _PR_CleanupIO(void);
+extern void _PR_CleanupNet(void);
extern void _PR_CleanupLayerCache(void);
extern void _PR_CleanupStacks(void);
+#ifdef WINNT
+extern void _PR_CleanupCPUs(void);
+#endif
extern void _PR_CleanupThreads(void);
extern void _PR_CleanupTPD(void);
extern void _PR_Cleanup(void);
@@ -1800,7 +1840,7 @@ extern PRFileDesc *_pr_stderr;
** and functions with macros that expand to the native thread
** types and functions on each platform.
*/
-#if defined(_PR_PTHREADS)
+#if defined(_PR_PTHREADS) && !defined(_PR_DCETHREADS)
#define _PR_ZONE_ALLOCATOR
#endif
diff --git a/pr/include/prlink.h b/pr/include/prlink.h
index 3787a369..5ccd25f1 100644
--- a/pr/include/prlink.h
+++ b/pr/include/prlink.h
@@ -239,6 +239,14 @@ NSPR_API(PRFuncPtr) PR_FindFunctionSymbolAndLibrary(const char *name,
NSPR_API(PRLibrary*) PR_LoadStaticLibrary(
const char *name, const PRStaticLinkTable *table);
+/*
+** Return the pathname of the file that the library "name" was loaded
+** from. "addr" is the address of a function defined in the library.
+**
+** The caller is responsible for freeing the result with PR_Free.
+*/
+NSPR_API(char *) PR_GetLibraryFilePathname(const char *name, PRFuncPtr addr);
+
PR_END_EXTERN_C
#endif /* prlink_h___ */
diff --git a/pr/include/prolock.h b/pr/include/prolock.h
index 80b92e17..d0bdbe61 100644
--- a/pr/include/prolock.h
+++ b/pr/include/prolock.h
@@ -39,8 +39,6 @@
PR_BEGIN_EXTERN_C
-#if defined(DEBUG) || defined(FORCE_NSPR_ORDERED_LOCKS)
-
/*
** A locking mechanism, built on the existing PRLock definiion,
** is provided that will permit applications to define a Lock
@@ -80,7 +78,18 @@ PR_BEGIN_EXTERN_C
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_ORDERED_LOCKS)
typedef void * PROrderedLock;
+#else
+/*
+** Map PROrderedLock and methods onto PRLock when ordered locking
+** is not compiled in.
+**
+*/
+#include "prlock.h"
+
+typedef PRLock PROrderedLock;
+#endif
/* -----------------------------------------------------------------------
** FUNCTION: PR_CreateOrderedLock() -- Create an Ordered Lock
@@ -98,8 +107,12 @@ typedef void * PROrderedLock;
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_ORDERED_LOCKS)
#define PR_CREATE_ORDERED_LOCK(order,name)\
PR_CreateOrderedLock((order),(name))
+#else
+#define PR_CREATE_ORDERED_LOCK(order) PR_NewLock()
+#endif
NSPR_API(PROrderedLock *)
PR_CreateOrderedLock(
@@ -122,7 +135,11 @@ NSPR_API(PROrderedLock *)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_ORDERED_LOCKS)
#define PR_DESTROY_ORDERED_LOCK(lock) PR_DestroyOrderedLock((lock))
+#else
+#define PR_DESTROY_ORDERED_LOCK(lock) PR_DestroyLock((lock))
+#endif
NSPR_API(void)
PR_DestroyOrderedLock(
@@ -146,7 +163,11 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_ORDERED_LOCKS)
#define PR_LOCK_ORDERED_LOCK(lock) PR_LockOrderedLock((lock))
+#else
+#define PR_LOCK_ORDERED_LOCK(lock) PR_Lock((lock))
+#endif
NSPR_API(void)
PR_LockOrderedLock(
@@ -170,43 +191,17 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined(DEBUG) || defined(FORCE_NSPR_ORDERED_LOCKS)
#define PR_UNLOCK_ORDERED_LOCK(lock) PR_UnlockOrderedLock((lock))
+#else
+#define PR_UNLOCK_ORDERED_LOCK(lock) PR_Unlock((lock))
+#endif
NSPR_API(PRStatus)
PR_UnlockOrderedLock(
PROrderedLock *lock
);
-#else /* !(defined(DEBUG) || defined(FORCE_NSPR_ORDERED_LOCKS)) */
-/*
-** Map PROrderedLock and methods onto PRLock when ordered locking
-** is not compiled in.
-**
-*/
-#include <prlock.h>
-
-typedef PRLock PROrderedLock;
-
-#define PR_CREATE_ORDERED_LOCK(order) PR_NewLock()
-#define PR_DESTROY_ORDERED_LOCK(lock) PR_DestroyLock((lock))
-#define PR_LOCK_ORDERED_LOCK(lock) PR_Lock((lock))
-#define PR_UNLOCK_ORDERED_LOCK(lock) PR_Unlock((lock))
-
-#endif /* !(defined(DEBUG) || defined(FORCE_NSPR_ORDERED_LOCKS)) */
-
PR_END_EXTERN_C
#endif /* prolock_h___ */
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pr/include/prthread.h b/pr/include/prthread.h
index a987202a..334116ce 100644
--- a/pr/include/prthread.h
+++ b/pr/include/prthread.h
@@ -159,7 +159,9 @@ NSPR_API(PRStatus) PR_JoinThread(PRThread *thread);
** Never returns NULL.
*/
NSPR_API(PRThread*) PR_GetCurrentThread(void);
+#ifndef NO_NSPR_10_SUPPORT
#define PR_CurrentThread() PR_GetCurrentThread() /* for nspr1.0 compat. */
+#endif /* NO_NSPR_10_SUPPORT */
/*
** Get the priority of "thread".
diff --git a/pr/include/prtrace.h b/pr/include/prtrace.h
index 9b0b0bb8..ebfe1baf 100644
--- a/pr/include/prtrace.h
+++ b/pr/include/prtrace.h
@@ -103,7 +103,6 @@ PR_BEGIN_EXTERN_C
*/
typedef void * PRTraceHandle;
-#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
/*
** PRTraceEntry -- A trace entry in the in-memory trace buffer
** looks like this.
@@ -153,8 +152,12 @@ typedef enum PRTraceOption
** to value. e.g. PR_INIT_TRACE_HANDLE( myHandle, NULL );
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_INIT_TRACE_HANDLE(handle,value)\
(handle) = (PRCounterHandle)(value)
+#else
+#define PR_INIT_TRACE_HANDLE(handle,value)
+#endif
/* -----------------------------------------------------------------------
@@ -192,8 +195,12 @@ typedef enum PRTraceOption
#define PRTRACE_NAME_MAX 31
#define PRTRACE_DESC_MAX 255
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_CREATE_TRACE(handle,qName,rName,description)\
(handle) = PR_CreateTrace((qName),(rName),(description))
+#else
+#define PR_CREATE_TRACE(handle,qName,rName,description)
+#endif
NSPR_API(PRTraceHandle)
PR_CreateTrace(
@@ -222,8 +229,12 @@ NSPR_API(PRTraceHandle)
** RESTRICTIONS:
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_DESTROY_TRACE(handle)\
PR_DestroyTrace((handle))
+#else
+#define PR_DESTROY_TRACE(handle)
+#endif
NSPR_API(void)
PR_DestroyTrace(
@@ -259,8 +270,12 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_TRACE(handle,ud0,ud1,ud2,ud3,ud4,ud5,ud6,ud7)\
PR_Trace((handle),(ud0),(ud1),(ud2),(ud3),(ud4),(ud5),(ud6),(ud7))
+#else
+#define PR_TRACE(handle,ud0,ud1,ud2,ud3,ud4,ud5,ud6,ud7)
+#endif
NSPR_API(void)
PR_Trace(
@@ -342,8 +357,12 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_SET_TRACE_OPTION(command,value)\
PR_SetTraceOption((command),(value))
+#else
+#define PR_SET_TRACE_OPTION(command,value)
+#endif
NSPR_API(void)
PR_SetTraceOption(
@@ -376,8 +395,12 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_GET_TRACE_OPTION(command,value)\
PR_GetTraceOption((command),(value))
+#else
+#define PR_GET_TRACE_OPTION(command,value)
+#endif
NSPR_API(void)
PR_GetTraceOption(
@@ -408,8 +431,12 @@ NSPR_API(void)
** RESTRICTIONS:
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_GET_TRACE_HANDLE_FROM_NAME(handle,qName,rName)\
(handle) = PR_GetTraceHandleFromName((qName),(rName))
+#else
+#define PR_GET_TRACE_HANDLE_FROM_NAME(handle,qName,rName)
+#endif
NSPR_API(PRTraceHandle)
PR_GetTraceHandleFromName(
@@ -436,8 +463,12 @@ NSPR_API(PRTraceHandle)
** RESTRICTIONS:
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_GET_TRACE_NAME_FROM_HANDLE(handle,qName,rName,description)\
PR_GetTraceNameFromHandle((handle),(qName),(rName),(description))
+#else
+#define PR_GET_TRACE_NAME_FROM_HANDLE(handle,qName,rName,description)
+#endif
NSPR_API(void)
PR_GetTraceNameFromHandle(
@@ -474,8 +505,12 @@ NSPR_API(void)
** See: PR_SetTraceOption( PRLockTraceHandles ).
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_FIND_NEXT_TRACE_QNAME(next,handle)\
(next) = PR_FindNextTraceQname((handle))
+#else
+#define PR_FIND_NEXT_TRACE_QNAME(next,handle)
+#endif
NSPR_API(PRTraceHandle)
PR_FindNextTraceQname(
@@ -512,8 +547,12 @@ NSPR_API(PRTraceHandle)
** PR_SetTraceOption( PRLockTraceHandles ).
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_FIND_NEXT_TRACE_RNAME(next,rhandle,qhandle)\
(next) = PR_FindNextTraceRname((rhandle),(qhandle))
+#else
+#define PR_FIND_NEXT_TRACE_RNAME(next,rhandle,qhandle)
+#endif
NSPR_API(PRTraceHandle)
PR_FindNextTraceRname(
@@ -564,8 +603,12 @@ NSPR_API(PRTraceHandle)
** On error, PR_RecordTraceEntries() may return prematurely.
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_RECORD_TRACE_ENTRIES()\
PR_RecordTraceEntries()
+#else
+#define PR_RECORD_TRACE_ENTRIES()
+#endif
NSPR_API(void)
PR_RecordTraceEntries(
@@ -612,9 +655,12 @@ NSPR_API(void)
** application may be realized. ... YMMV.
**
*/
+#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#define PR_GET_TRACE_ENTRIES(buffer,count,found)\
PR_GetTraceEntries((buffer),(count),(found))
-
+#else
+#define PR_GET_TRACE_ENTRIES(buffer,count,found)
+#endif
NSPR_API(PRIntn)
PR_GetTraceEntries(
@@ -623,28 +669,6 @@ NSPR_API(PRIntn)
PRInt32 *found /* number you got */
);
-#else /* !(defined (DEBUG) || defined (FORCE_NSPR_TRACE)) */
-/*
-** Define the Trace Facility macros as No-Ops for when the trace
-** facility is to be compiled-out of the application.
-**
-*/
-#define PR_DEFINE_TRACE(name) PRTraceHandle name
-#define PR_INIT_TRACE_HANDLE(handle,value)
-#define PR_CREATE_TRACE(handle,qName,rName,description)
-#define PR_DESTROY_TRACE(handle)
-#define PR_TRACE(handle,ud0,ud1,ud2,ud3,ud4,ud5,ud6,ud7)
-#define PR_SET_TRACE_OPTION(command,value)
-#define PR_GET_TRACE_OPTION(command,value)
-#define PR_GET_TRACE_HANDLE_FROM_NAME(handle,qName,rName)
-#define PR_GET_TRACE_NAME_FROM_HANDLE(handle,qName,rName,description)
-#define PR_FIND_NEXT_TRACE_QNAME(next,handle)
-#define PR_FIND_NEXT_TRACE_RNAME(next,rhandle,qhandle)
-#define PR_GET_TRACE_ENTRIES(buffer,count,found)
-#define PR_RECORD_TRACE_ENTRIES()
-
-#endif /* !(defined (DEBUG) || defined (FORCE_NSPR_TRACE)) */
-
PR_END_EXTERN_C
#endif /* prtrace_h___ */
diff --git a/pr/include/prtypes.h b/pr/include/prtypes.h
index b01673d0..b6836108 100644
--- a/pr/include/prtypes.h
+++ b/pr/include/prtypes.h
@@ -239,13 +239,15 @@
/***********************************************************************
** MACROS: PR_ROUNDUP
** PR_MIN
-** PR_MAX
+** PR_MAX
+** PR_ABS
** DESCRIPTION:
** Commonly used macros for operations on compatible types.
***********************************************************************/
#define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y))
#define PR_MIN(x,y) ((x)<(y)?(x):(y))
#define PR_MAX(x,y) ((x)>(y)?(x):(y))
+#define PR_ABS(x) ((x)<0?-(x):(x))
PR_BEGIN_EXTERN_C
@@ -278,6 +280,18 @@ typedef signed char PRInt8;
#endif
/************************************************************************
+ * MACROS: PR_INT8_MAX
+ * PR_INT8_MIN
+ * PR_UINT8_MAX
+ * DESCRIPTION:
+ * The maximum and minimum values of a PRInt8 or PRUint8.
+************************************************************************/
+
+#define PR_INT8_MAX 127
+#define PR_INT8_MIN (-128)
+#define PR_UINT8_MAX 255U
+
+/************************************************************************
** TYPES: PRUint16
** PRInt16
** DESCRIPTION:
@@ -291,6 +305,18 @@ typedef short PRInt16;
#endif
/************************************************************************
+ * MACROS: PR_INT16_MAX
+ * PR_INT16_MIN
+ * PR_UINT16_MAX
+ * DESCRIPTION:
+ * The maximum and minimum values of a PRInt16 or PRUint16.
+************************************************************************/
+
+#define PR_INT16_MAX 32767
+#define PR_INT16_MIN (-32768)
+#define PR_UINT16_MAX 65535U
+
+/************************************************************************
** TYPES: PRUint32
** PRInt32
** DESCRIPTION:
@@ -311,6 +337,18 @@ typedef long PRInt32;
#endif
/************************************************************************
+ * MACROS: PR_INT32_MAX
+ * PR_INT32_MIN
+ * PR_UINT32_MAX
+ * DESCRIPTION:
+ * The maximum and minimum values of a PRInt32 or PRUint32.
+************************************************************************/
+
+#define PR_INT32_MAX PR_INT32(2147483647)
+#define PR_INT32_MIN (-PR_INT32_MAX - 1)
+#define PR_UINT32_MAX PR_UINT32(4294967295)
+
+/************************************************************************
** TYPES: PRUint64
** PRInt64
** DESCRIPTION:
@@ -426,6 +464,20 @@ typedef PRUint8 PRPackedBool;
*/
typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
+#ifdef MOZ_UNICODE
+/*
+ * EXPERIMENTAL: This type may be removed in a future release.
+ */
+#ifndef __PRUNICHAR__
+#define __PRUNICHAR__
+#if defined(WIN32) || defined(XP_MAC)
+typedef wchar_t PRUnichar;
+#else
+typedef PRUint16 PRUnichar;
+#endif
+#endif
+#endif /* MOZ_UNICODE */
+
/*
** WARNING: The undocumented data types PRWord and PRUword are
** only used in the garbage collection and arena code. Do not
diff --git a/pr/include/prwin16.h b/pr/include/prwin16.h
index 68e8dc8b..7a561d35 100644
--- a/pr/include/prwin16.h
+++ b/pr/include/prwin16.h
@@ -108,7 +108,7 @@ struct PRMethodCallbackStr {
void (PR_CALLBACK *free)( void *ptr );
void * (PR_CALLBACK *getenv)( const char *name);
int (PR_CALLBACK *putenv)( const char *assoc);
-// void * (PR_CALLBACK *perror)( const char *prefix );
+/* void * (PR_CALLBACK *perror)( const char *prefix ); */
};
NSPR_API(void) PR_MDRegisterCallbacks(struct PRMethodCallbackStr *);
diff --git a/pr/src/Makefile.in b/pr/src/Makefile.in
index d4af5676..f33f124d 100644
--- a/pr/src/Makefile.in
+++ b/pr/src/Makefile.in
@@ -69,7 +69,13 @@ ifeq ($(OS_ARCH),SunOS)
ifeq ($(OS_RELEASE),4.1.3_U1)
OS_LIBS = -lm
else # 4.1.3_U1
-
+MAPFILE = $(OBJDIR)/nsprmap.sun
+GARBAGE += $(MAPFILE)
+ifdef NS_USE_GCC
+MKSHLIB += -Wl,-M,$(MAPFILE)
+else
+MKSHLIB += -M $(MAPFILE)
+endif
#
# In Solaris 2.6 or earlier, -lrt is called -lposix4.
#
@@ -81,14 +87,19 @@ LIBRT=-lposix4
endif
ifdef USE_PTHREADS
-OS_LIBS = -lpthread -lthread ${LIBRT} -lsocket -lnsl -ldl
+OS_LIBS = -lpthread -lthread ${LIBRT} -lsocket -lnsl -ldl -lc
else
ifdef LOCAL_THREADS_ONLY
-OS_LIBS = -lsocket -lnsl -ldl
+OS_LIBS = -lsocket -lnsl -ldl -lc
else
-OS_LIBS = -lthread ${LIBRT} -lsocket -lnsl -ldl
+OS_LIBS = -lthread ${LIBRT} -lsocket -lnsl -ldl -lc
endif # LOCAL_THREADS_ONLY
endif # USE_PTHREADS
+ifeq ($(OS_TEST),sun4u)
+ifndef USE_64
+DSO_LDOPTS += -Wl,-f,\$$ORIGIN/cpu/\$$ISALIST/lib$(ULTRASPARC_LIBRARY)$(LIBRARY_VERSION).so
+endif
+endif # sun4u
endif # 4.1.3_U1
endif # SunOS
@@ -137,9 +148,9 @@ endif
ifeq ($(OS_ARCH),Linux)
ifeq ($(USE_PTHREADS), 1)
-OS_LIBS = -lpthread -ldl -lc
+OS_LIBS = -lpthread -ldl
else
-OS_LIBS = -ldl -lc
+OS_LIBS = -ldl
endif
endif
@@ -170,8 +181,16 @@ OS_LIBS = -lsocket -lnsl -lgen -lresolv
endif
ifeq ($(OS_ARCH),WINNT)
+ifdef NS_USE_GCC
+OS_LIBS = -ladvapi32 -lws2_32
+else
OS_LIBS = advapi32.lib wsock32.lib
endif
+endif
+
+ifeq ($(OS_TARGET),MacOSX)
+OS_LIBS = -framework CoreServices -framework CoreFoundation
+endif
ifdef GC_LEAK_DETECTOR
EXTRA_LIBS = -L$(dist_libdir) -lboehm
@@ -281,7 +300,11 @@ OBJS += memory/$(OBJDIR)/prgcleak.$(OBJ_SUFFIX)
endif
ifeq ($(OS_ARCH), WINNT)
+ifdef NS_USE_GCC
+DLLBASE=-Wl,--image-base -Wl,0x30000000
+else
DLLBASE=/BASE:0x30000000
+endif # GCC
RES=$(OBJDIR)/nspr.res
RESNAME=nspr.rc
endif # WINNT
@@ -320,7 +343,7 @@ NOW = $(MOD_DEPTH)/config/$(OBJDIR)/now
SH_DATE = $(shell date "+%Y-%m-%d %T")
SH_NOW = $(shell $(NOW))
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
SUF = i64
else
SUF = LL
@@ -342,7 +365,7 @@ $(TINC):
$(OBJDIR)/prvrsion.$(OBJ_SUFFIX): prvrsion.c $(TINC)
-ifeq ($(OS_ARCH), WINNT)
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
$(CC) -Fo$@ -c $(CFLAGS) -I$(OBJDIR) $<
else
ifeq ($(MOZ_OS2_TOOLS), VACPP)
diff --git a/pr/src/io/prdir.c b/pr/src/io/prdir.c
index d0f469e9..8aa66435 100644
--- a/pr/src/io/prdir.c
+++ b/pr/src/io/prdir.c
@@ -18,6 +18,7 @@
* Rights Reserved.
*
* Contributor(s):
+ * Roy Yokoyama <yokoyama@netscape.com>
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
@@ -109,3 +110,52 @@ PRInt32 rv;
return PR_SUCCESS;
}
+#ifdef MOZ_UNICODE
+/*
+ * UTF16 Interface
+ */
+PR_IMPLEMENT(PRDirUTF16*) PR_OpenDirUTF16(const PRUnichar *name)
+{
+ PRDirUTF16 *dir;
+ PRStatus sts;
+
+ dir = PR_NEW(PRDirUTF16);
+ if (dir) {
+ sts = _PR_MD_OPEN_DIR_UTF16(&dir->md,name);
+ if (sts != PR_SUCCESS) {
+ PR_DELETE(dir);
+ return NULL;
+ }
+ } else {
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
+ }
+ return dir;
+}
+
+PR_IMPLEMENT(PRDirEntryUTF16*) PR_ReadDirUTF16(PRDirUTF16 *dir, PRDirFlags flags)
+{
+ /*
+ * _MD_READ_DIR_UTF16 return a PRUnichar* to the name; allocation in
+ * machine-dependent code
+ */
+ PRUnichar* name = _PR_MD_READ_DIR_UTF16(&dir->md, flags);
+ dir->d.name = name;
+ return name ? &dir->d : NULL;
+}
+
+PR_IMPLEMENT(PRStatus) PR_CloseDirUTF16(PRDirUTF16 *dir)
+{
+ PRInt32 rv;
+
+ if (dir) {
+ rv = _PR_MD_CLOSE_DIR_UTF16(&dir->md);
+ PR_DELETE(dir);
+ if (rv < 0)
+ return PR_FAILURE;
+ else
+ return PR_SUCCESS;
+ }
+ return PR_SUCCESS;
+}
+
+#endif /* MOZ_UNICODE */
diff --git a/pr/src/io/prfdcach.c b/pr/src/io/prfdcach.c
index 8803a419..82cbf058 100644
--- a/pr/src/io/prfdcach.c
+++ b/pr/src/io/prfdcach.c
@@ -73,7 +73,7 @@ static PRFileDesc **stack2fd = &(((PRFileDesc*)NULL)->higher);
** Get a FileDescriptor from the cache if one exists. If not allocate
** a new one from the heap.
*/
-PRFileDesc *_PR_Getfd()
+PRFileDesc *_PR_Getfd(void)
{
PRFileDesc *fd;
/*
@@ -248,7 +248,7 @@ PR_IMPLEMENT(PRStatus) PR_SetFDCacheSize(PRIntn low, PRIntn high)
return PR_SUCCESS;
} /* PR_SetFDCacheSize */
-void _PR_InitFdCache()
+void _PR_InitFdCache(void)
{
/*
** The fd caching is enabled by default for DEBUG builds,
diff --git a/pr/src/io/prfile.c b/pr/src/io/prfile.c
index e19705c7..1b3acaec 100644
--- a/pr/src/io/prfile.c
+++ b/pr/src/io/prfile.c
@@ -203,7 +203,7 @@ static PRStatus PR_CALLBACK PipeSync(PRFileDesc *fd)
return PR_SUCCESS;
}
-static PRStatus PR_CALLBACK FileInfo(PRFileDesc *fd, PRFileInfo *info)
+static PRStatus PR_CALLBACK FileGetInfo(PRFileDesc *fd, PRFileInfo *info)
{
PRInt32 rv;
@@ -214,7 +214,7 @@ static PRStatus PR_CALLBACK FileInfo(PRFileDesc *fd, PRFileInfo *info)
return PR_SUCCESS;
}
-static PRStatus PR_CALLBACK FileInfo64(PRFileDesc *fd, PRFileInfo64 *info)
+static PRStatus PR_CALLBACK FileGetInfo64(PRFileDesc *fd, PRFileInfo64 *info)
{
#ifdef XP_MAC
#pragma unused( fd, info )
@@ -276,8 +276,8 @@ static PRIOMethods _pr_fileMethods = {
FileSync,
FileSeek,
FileSeek64,
- FileInfo,
- FileInfo64,
+ FileGetInfo,
+ FileGetInfo64,
(PRWritevFN)_PR_InvalidInt,
(PRConnectFN)_PR_InvalidStatus,
(PRAcceptFN)_PR_InvalidDesc,
@@ -735,7 +735,7 @@ PR_IMPLEMENT(PRStatus) PR_CreatePipe(
(*readPipe)->secret->inheritable = _PR_TRI_TRUE;
(*writePipe)->secret->inheritable = _PR_TRI_TRUE;
return PR_SUCCESS;
-#elif defined(XP_UNIX) || defined(XP_OS2)
+#elif defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS)
#ifdef XP_OS2
HFILE pipefd[2];
#else
@@ -765,9 +765,13 @@ PR_IMPLEMENT(PRStatus) PR_CreatePipe(
close(pipefd[1]);
return PR_FAILURE;
}
- _MD_MakeNonblock(*readPipe);
+#ifndef XP_BEOS /* Pipes are nonblocking on BeOS */
+ _PR_MD_MAKE_NONBLOCK(*readPipe);
+#endif
_PR_MD_INIT_FD_INHERITABLE(*readPipe, PR_FALSE);
- _MD_MakeNonblock(*writePipe);
+#ifndef XP_BEOS /* Pipes are nonblocking on BeOS */
+ _PR_MD_MAKE_NONBLOCK(*writePipe);
+#endif
_PR_MD_INIT_FD_INHERITABLE(*writePipe, PR_FALSE);
return PR_SUCCESS;
#else
@@ -775,3 +779,51 @@ PR_IMPLEMENT(PRStatus) PR_CreatePipe(
return PR_FAILURE;
#endif
}
+
+#ifdef MOZ_UNICODE
+/* ================ UTF16 Interfaces ================================ */
+PR_IMPLEMENT(PRFileDesc*) PR_OpenFileUTF16(
+ const PRUnichar *name, PRIntn flags, PRIntn mode)
+{
+ PRInt32 osfd;
+ PRFileDesc *fd = 0;
+#if !defined(XP_UNIX) /* BugZilla: 4090 */
+ PRBool appendMode = ( PR_APPEND & flags )? PR_TRUE : PR_FALSE;
+#endif
+
+ if (!_pr_initialized) _PR_ImplicitInitialization();
+
+ /* Map pr open flags and mode to os specific flags */
+ osfd = _PR_MD_OPEN_FILE_UTF16(name, flags, mode);
+ if (osfd != -1) {
+ fd = PR_AllocFileDesc(osfd, &_pr_fileMethods);
+ if (!fd) {
+ (void) _PR_MD_CLOSE_FILE(osfd);
+ } else {
+#if !defined(XP_UNIX) /* BugZilla: 4090 */
+ fd->secret->appendMode = appendMode;
+#endif
+ _PR_MD_INIT_FD_INHERITABLE(fd, PR_FALSE);
+ }
+ }
+ return fd;
+}
+
+PR_IMPLEMENT(PRStatus) PR_GetFileInfo64UTF16(const PRUnichar *fn, PRFileInfo64 *info)
+{
+#ifdef XP_MAC
+#pragma unused (fn, info)
+#endif
+ PRInt32 rv;
+
+ if (!_pr_initialized) _PR_ImplicitInitialization();
+ rv = _PR_MD_GETFILEINFO64_UTF16(fn, info);
+ if (rv < 0) {
+ return PR_FAILURE;
+ } else {
+ return PR_SUCCESS;
+ }
+}
+
+/* ================ UTF16 Interfaces ================================ */
+#endif /* MOZ_UNICODE */
diff --git a/pr/src/io/prio.c b/pr/src/io/prio.c
index 250d9b6f..66ecd7cc 100644
--- a/pr/src/io/prio.c
+++ b/pr/src/io/prio.c
@@ -164,7 +164,7 @@ PR_IMPLEMENT(PRStatus) PR_SetFDInheritable(
PRFileDesc *fd,
PRBool inheritable)
{
-#if defined(XP_UNIX) || defined(WIN32) || defined(XP_OS2)
+#if defined(XP_UNIX) || defined(WIN32) || defined(XP_OS2) || defined(XP_BEOS)
/*
* Only a non-layered, NSPR file descriptor can be inherited
* by a child process.
@@ -188,3 +188,12 @@ PR_IMPLEMENT(PRStatus) PR_SetFDInheritable(
return PR_FAILURE;
#endif
}
+
+/*
+** This function only has a useful implementation in the debug build of
+** the pthreads version.
+*/
+PR_IMPLEMENT(void) PT_FPrintStats(PRFileDesc *debug_out, const char *msg)
+{
+ /* do nothing */
+} /* PT_FPrintStats */
diff --git a/pr/src/io/priometh.c b/pr/src/io/priometh.c
index a2b8e9c8..b9279fad 100644
--- a/pr/src/io/priometh.c
+++ b/pr/src/io/priometh.c
@@ -76,21 +76,21 @@ PRIOMethods _pr_faulty_methods = {
(PRReservedFN)_PR_InvalidInt
};
-PRIntn _PR_InvalidInt()
+PRIntn _PR_InvalidInt(void)
{
PR_ASSERT(!"I/O method is invalid");
PR_SetError(PR_INVALID_METHOD_ERROR, 0);
return -1;
} /* _PR_InvalidInt */
-PRInt16 _PR_InvalidInt16()
+PRInt16 _PR_InvalidInt16(void)
{
PR_ASSERT(!"I/O method is invalid");
PR_SetError(PR_INVALID_METHOD_ERROR, 0);
return -1;
} /* _PR_InvalidInt */
-PRInt64 _PR_InvalidInt64()
+PRInt64 _PR_InvalidInt64(void)
{
PRInt64 rv;
LL_I2L(rv, -1);
@@ -103,7 +103,7 @@ PRInt64 _PR_InvalidInt64()
* An invalid method that returns PRStatus
*/
-PRStatus _PR_InvalidStatus()
+PRStatus _PR_InvalidStatus(void)
{
PR_ASSERT(!"I/O method is invalid");
PR_SetError(PR_INVALID_METHOD_ERROR, 0);
@@ -114,7 +114,7 @@ PRStatus _PR_InvalidStatus()
* An invalid method that returns a pointer
*/
-PRFileDesc *_PR_InvalidDesc()
+PRFileDesc *_PR_InvalidDesc(void)
{
PR_ASSERT(!"I/O method is invalid");
PR_SetError(PR_INVALID_METHOD_ERROR, 0);
diff --git a/pr/src/io/prlayer.c b/pr/src/io/prlayer.c
index d74fa8be..d377f546 100644
--- a/pr/src/io/prlayer.c
+++ b/pr/src/io/prlayer.c
@@ -459,7 +459,7 @@ static PRIOMethods pl_methods = {
(PRReservedFN)_PR_InvalidInt
};
-PR_IMPLEMENT(const PRIOMethods*) PR_GetDefaultIOMethods()
+PR_IMPLEMENT(const PRIOMethods*) PR_GetDefaultIOMethods(void)
{
return &pl_methods;
} /* PR_GetDefaultIOMethods */
@@ -736,7 +736,7 @@ PR_IMPLEMENT(PRFileDesc*) PR_GetIdentitiesLayer(PRFileDesc* fd, PRDescIdentity i
return NULL;
} /* PR_GetIdentitiesLayer */
-void _PR_InitLayerCache()
+void _PR_InitLayerCache(void)
{
memset(&identity_cache, 0, sizeof(identity_cache));
identity_cache.ml = PR_NewLock();
diff --git a/pr/src/io/prlog.c b/pr/src/io/prlog.c
index 16f68823..ac1c5492 100644
--- a/pr/src/io/prlog.c
+++ b/pr/src/io/prlog.c
@@ -194,13 +194,16 @@ void _PR_InitLog(void)
ev = PR_GetEnv("NSPR_LOG_MODULES");
if (ev && ev[0]) {
- char module[64];
+ char module[64]; /* Security-Critical: If you change this
+ * size, you must also change the sscanf
+ * format string to be size-1.
+ */
PRBool isSync = PR_FALSE;
PRIntn evlen = strlen(ev), pos = 0;
PRInt32 bufSize = DEFAULT_BUF_SIZE;
while (pos < evlen) {
PRIntn level = 1, count = 0, delta = 0;
- count = sscanf(&ev[pos], "%64[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]%n:%d%n",
+ count = sscanf(&ev[pos], "%63[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]%n:%d%n",
module, &delta, &level, &delta);
pos += delta;
if (count == 0) break;
@@ -232,7 +235,7 @@ void _PR_InitLog(void)
/*found:*/
count = sscanf(&ev[pos], " , %n", &delta);
pos += delta;
- if (count == -1) break;
+ if (count == EOF) break;
}
PR_SetLogBuffering(isSync ? bufSize : 0);
@@ -277,11 +280,16 @@ void _PR_LogCleanup(void)
while (lm != NULL) {
PRLogModuleInfo *next = lm->next;
- PR_Free((/*const*/ char *)lm->name);
+ free((/*const*/ char *)lm->name);
PR_Free(lm);
lm = next;
}
logModules = NULL;
+
+ if (_pr_logLock) {
+ PR_DestroyLock(_pr_logLock);
+ _pr_logLock = NULL;
+ }
}
static void _PR_SetLogModuleLevel( PRLogModuleInfo *lm )
@@ -290,12 +298,15 @@ static void _PR_SetLogModuleLevel( PRLogModuleInfo *lm )
ev = PR_GetEnv("NSPR_LOG_MODULES");
if (ev && ev[0]) {
- char module[64];
+ char module[64]; /* Security-Critical: If you change this
+ * size, you must also change the sscanf
+ * format string to be size-1.
+ */
PRIntn evlen = strlen(ev), pos = 0;
while (pos < evlen) {
PRIntn level = 1, count = 0, delta = 0;
- count = sscanf(&ev[pos], "%64[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]%n:%d%n",
+ count = sscanf(&ev[pos], "%63[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]%n:%d%n",
module, &delta, &level, &delta);
pos += delta;
if (count == 0) break;
@@ -314,7 +325,7 @@ static void _PR_SetLogModuleLevel( PRLogModuleInfo *lm )
}
count = sscanf(&ev[pos], " , %n", &delta);
pos += delta;
- if (count == -1) break;
+ if (count == EOF) break;
}
}
} /* end _PR_SetLogModuleLevel() */
@@ -361,7 +372,7 @@ PR_IMPLEMENT(PRBool) PR_SetLogFile(const char *file)
#else
PRFileDesc *newLogFile;
- newLogFile = PR_Open(file, PR_WRONLY|PR_CREATE_FILE, 0666);
+ newLogFile = PR_Open(file, PR_WRONLY|PR_CREATE_FILE|PR_TRUNCATE, 0666);
if (newLogFile) {
if (logFile && logFile != _pr_stdout && logFile != _pr_stderr) {
PR_Close(logFile);
diff --git a/pr/src/io/prmapopt.c b/pr/src/io/prmapopt.c
index f017c36a..d8570ccb 100644
--- a/pr/src/io/prmapopt.c
+++ b/pr/src/io/prmapopt.c
@@ -46,9 +46,14 @@
* includes winsock.h, with _WIN32_WINNT undefined.
*/
-#ifdef WINNT
+#ifdef WIN32
+#ifdef __MINGW32__
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#elif defined(WINNT)
#include <winsock.h>
#endif
+#endif
#include "primpl.h"
@@ -57,7 +62,7 @@
#include <netinet/in_systm.h> /* n_short, n_long, n_time */
#endif
-#if defined(XP_UNIX) || defined(OS2)
+#if defined(XP_UNIX) || defined(OS2) || (defined(XP_BEOS) && defined(BONE_VERSION))
#include <netinet/tcp.h> /* TCP_NODELAY, TCP_MAXSEG */
#endif
@@ -86,7 +91,7 @@ PRStatus PR_CALLBACK _PR_SocketGetSocketOption(PRFileDesc *fd, PRSocketOptionDat
{
case PR_SockOpt_Linger:
{
-#if !defined(XP_BEOS)
+#if !defined(XP_BEOS) || defined(BONE_VERSION)
struct linger linger;
length = sizeof(linger);
rv = _PR_MD_GETSOCKOPT(
@@ -244,7 +249,7 @@ PRStatus PR_CALLBACK _PR_SocketSetSocketOption(PRFileDesc *fd, const PRSocketOpt
{
case PR_SockOpt_Linger:
{
-#if !defined(XP_BEOS)
+#if !defined(XP_BEOS) || defined(BONE_VERSION)
struct linger linger;
linger.l_onoff = data->value.linger.polarity;
linger.l_linger = PR_IntervalToSeconds(data->value.linger.linger);
diff --git a/pr/src/io/prmwait.c b/pr/src/io/prmwait.c
index a48fbc19..65ea1cd6 100644
--- a/pr/src/io/prmwait.c
+++ b/pr/src/io/prmwait.c
@@ -58,19 +58,8 @@ typedef struct TimerEvent {
struct {
PRLock *ml;
PRCondVar *new_timer;
- PRCondVar *cancel_timer; /* The cancel_timer condition variable is
- * used to cancel a timer (i.e., remove a
- * timer event from the timer queue). At
- * startup I'm borrowing this condition
- * variable for a different purpose (to
- * tell the primordial thread that the
- * timer manager thread has started) so
- * that I don't need to create a new
- * condition variable just for this one
- * time use.
- */
+ PRCondVar *cancel_timer;
PRThread *manager_thread;
- PRBool manager_started;
PRCList timer_queue;
} tm_vars;
@@ -88,11 +77,6 @@ static void TimerManager(void *arg)
TimerEvent *timer;
PR_Lock(tm_vars.ml);
- /* tell the primordial thread that we have started */
- tm_vars.manager_started = PR_TRUE;
- if (!_native_threads_only) {
- PR_NotifyCondVar(tm_vars.cancel_timer);
- }
while (1)
{
if (PR_CLIST_IS_EMPTY(&tm_vars.timer_queue))
@@ -216,16 +200,6 @@ static PRStatus TimerInit(void)
{
goto failed;
}
- /*
- * Need to wait until the timer manager thread starts
- * if the timer manager thread is a local thread.
- */
- if (!_native_threads_only) {
- PR_Lock(tm_vars.ml);
- while (!tm_vars.manager_started)
- PR_WaitCondVar(tm_vars.cancel_timer, PR_INTERVAL_NO_TIMEOUT);
- PR_Unlock(tm_vars.ml);
- }
return PR_SUCCESS;
failed:
@@ -269,6 +243,17 @@ void _PR_InitMW(void)
max_polling_interval = PR_MillisecondsToInterval(MAX_POLLING_INTERVAL);
} /* _PR_InitMW */
+void _PR_CleanupMW(void)
+{
+ PR_DestroyLock(mw_lock);
+ mw_lock = NULL;
+ if (mw_state->group) {
+ PR_DestroyWaitGroup(mw_state->group);
+ /* mw_state->group is set to NULL as a side effect. */
+ }
+ PR_DELETE(mw_state);
+} /* _PR_CleanupMW */
+
static PRWaitGroup *MW_Init2(void)
{
PRWaitGroup *group = mw_state->group; /* it's the null group */
diff --git a/pr/src/io/prprf.c b/pr/src/io/prprf.c
index 2d6a78d8..95c165a4 100644
--- a/pr/src/io/prprf.c
+++ b/pr/src/io/prprf.c
@@ -89,9 +89,6 @@ struct NumArgState{
va_list ap; /* point to the corresponding position on ap */
};
-static PRBool l10n_debug_init = PR_FALSE;
-static PRBool l10n_debug = PR_FALSE;
-
#define NAS_DEFAULT_NUM 20 /* default number of NumberedArgumentState array */
@@ -108,11 +105,11 @@ static PRBool l10n_debug = PR_FALSE;
#define TYPE_INTSTR 10
#define TYPE_UNKNOWN 20
-#define _LEFT 0x1
-#define _SIGNED 0x2
-#define _SPACED 0x4
-#define _ZEROS 0x8
-#define _NEG 0x10
+#define FLAG_LEFT 0x1
+#define FLAG_SIGNED 0x2
+#define FLAG_SPACED 0x4
+#define FLAG_ZEROS 0x8
+#define FLAG_NEG 0x10
/*
** Fill into the buffer using the data in src
@@ -124,8 +121,8 @@ static int fill2(SprintfState *ss, const char *src, int srclen, int width,
int rv;
width -= srclen;
- if ((width > 0) && ((flags & _LEFT) == 0)) { /* Right adjusting */
- if (flags & _ZEROS) {
+ if ((width > 0) && ((flags & FLAG_LEFT) == 0)) { /* Right adjusting */
+ if (flags & FLAG_ZEROS) {
space = '0';
}
while (--width >= 0) {
@@ -142,7 +139,7 @@ static int fill2(SprintfState *ss, const char *src, int srclen, int width,
return rv;
}
- if ((width > 0) && ((flags & _LEFT) != 0)) { /* Left adjusting */
+ if ((width > 0) && ((flags & FLAG_LEFT) != 0)) { /* Left adjusting */
while (--width >= 0) {
rv = (*ss->stuff)(ss, &space, 1);
if (rv < 0) {
@@ -169,13 +166,13 @@ static int fill_n(SprintfState *ss, const char *src, int srclen, int width,
char sign;
if ((type & 1) == 0) {
- if (flags & _NEG) {
+ if (flags & FLAG_NEG) {
sign = '-';
signwidth = 1;
- } else if (flags & _SIGNED) {
+ } else if (flags & FLAG_SIGNED) {
sign = '+';
signwidth = 1;
- } else if (flags & _SPACED) {
+ } else if (flags & FLAG_SPACED) {
sign = ' ';
signwidth = 1;
}
@@ -189,14 +186,14 @@ static int fill_n(SprintfState *ss, const char *src, int srclen, int width,
}
}
- if ((flags & _ZEROS) && (prec < 0)) {
+ if ((flags & FLAG_ZEROS) && (prec < 0)) {
if (width > cvtwidth) {
zerowidth = width - cvtwidth; /* Zero filling */
cvtwidth += zerowidth;
}
}
- if (flags & _LEFT) {
+ if (flags & FLAG_LEFT) {
if (width > cvtwidth) {
/* Space filling on the right (i.e. left adjusting) */
rightspaces = width - cvtwidth;
@@ -412,20 +409,6 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
/*
- ** set the l10n_debug flag
- ** this routine should be executed only once
- ** 'cause getenv does take time
- */
- if( !l10n_debug_init ){
- l10n_debug_init = PR_TRUE;
- p = getenv( "NETSCAPE_LOCALIZATION_DEBUG" );
- if( ( p != NULL ) && ( *p == '1' ) ){
- l10n_debug = PR_TRUE;
- }
- }
-
-
- /*
** first pass:
** detemine how many legal % I have got, then allocate space
*/
@@ -444,23 +427,17 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
if( c == '$' ){ /* numbered argument csae */
if( i > 0 ){
*rv = -1;
- if( l10n_debug )
- printf( "either no *OR* all arguments are numbered \"%s\"\n", fmt );
return NULL;
}
number++;
- break;
-
} else{ /* non-numbered argument case */
if( number > 0 ){
- if( l10n_debug )
- printf( "either no *OR* all arguments are numbered \"%s\"\n", fmt );
*rv = -1;
return NULL;
}
i = 1;
- break;
}
+ break;
}
c = *p++;
@@ -476,8 +453,6 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
nas = (struct NumArgState*)PR_MALLOC( number * sizeof( struct NumArgState ) );
if( !nas ){
*rv = -1;
- if( l10n_debug )
- printf( "PR_MALLOC() error for \"%s\"\n", fmt );
return NULL;
}
} else {
@@ -508,8 +483,6 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
if( !c || cn < 1 || cn > number ){
*rv = -1;
- if( l10n_debug )
- printf( "invalid argument number (valid range [1, %d]), \"%s\"\n", number, fmt );
break;
}
@@ -524,13 +497,11 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
if (c == '*') {
/* not supported feature, for the argument is not numbered */
*rv = -1;
- if( l10n_debug )
- printf( "* width specifier not support for numbered arguments \"%s\"\n", fmt );
break;
- } else {
- while ((c >= '0') && (c <= '9')) {
- c = *p++;
- }
+ }
+
+ while ((c >= '0') && (c <= '9')) {
+ c = *p++;
}
/* precision */
@@ -538,14 +509,12 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
c = *p++;
if (c == '*') {
/* not supported feature, for the argument is not numbered */
- if( l10n_debug )
- printf( "* precision specifier not support for numbered arguments \"%s\"\n", fmt );
*rv = -1;
break;
- } else {
- while ((c >= '0') && (c <= '9')) {
- c = *p++;
- }
+ }
+
+ while ((c >= '0') && (c <= '9')) {
+ c = *p++;
}
}
@@ -622,8 +591,6 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
/* get a legal para. */
if( nas[ cn ].type == TYPE_UNKNOWN ){
- if( l10n_debug )
- printf( "unknown type \"%s\"\n", fmt );
*rv = -1;
break;
}
@@ -757,8 +724,6 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
}
if( nas[i-1].type == TYPE_UNKNOWN ){
- if( l10n_debug )
- printf( "numbered argument type unknown\n" );
if( nas && ( nas != nasArray ) )
PR_DELETE( nas );
return -1;
@@ -777,14 +742,14 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
* on this feature.
*/
while ((c == '-') || (c == '+') || (c == ' ') || (c == '0')) {
- if (c == '-') flags |= _LEFT;
- if (c == '+') flags |= _SIGNED;
- if (c == ' ') flags |= _SPACED;
- if (c == '0') flags |= _ZEROS;
+ if (c == '-') flags |= FLAG_LEFT;
+ if (c == '+') flags |= FLAG_SIGNED;
+ if (c == ' ') flags |= FLAG_SPACED;
+ if (c == '0') flags |= FLAG_ZEROS;
c = *fmt++;
}
- if (flags & _SIGNED) flags &= ~_SPACED;
- if (flags & _LEFT) flags &= ~_ZEROS;
+ if (flags & FLAG_SIGNED) flags &= ~FLAG_SPACED;
+ if (flags & FLAG_LEFT) flags &= ~FLAG_ZEROS;
/* width */
if (c == '*') {
@@ -866,7 +831,7 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
u.l = va_arg(ap, int);
if (u.l < 0) {
u.l = -u.l;
- flags |= _NEG;
+ flags |= FLAG_NEG;
}
goto do_long;
case TYPE_UINT16:
@@ -876,7 +841,7 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
u.l = va_arg(ap, int);
if (u.l < 0) {
u.l = -u.l;
- flags |= _NEG;
+ flags |= FLAG_NEG;
}
goto do_long;
case TYPE_UINTN:
@@ -887,7 +852,7 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
u.l = va_arg(ap, PRInt32);
if (u.l < 0) {
u.l = -u.l;
- flags |= _NEG;
+ flags |= FLAG_NEG;
}
goto do_long;
case TYPE_UINT32:
@@ -903,7 +868,7 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
u.ll = va_arg(ap, PRInt64);
if (!LL_GE_ZERO(u.ll)) {
LL_NEG(u.ll, u.ll);
- flags |= _NEG;
+ flags |= FLAG_NEG;
}
goto do_longlong;
case TYPE_UINT64:
@@ -939,7 +904,7 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
case 'c':
u.ch = va_arg(ap, int);
- if ((flags & _LEFT) == 0) {
+ if ((flags & FLAG_LEFT) == 0) {
while (width-- > 1) {
rv = (*ss->stuff)(ss, " ", 1);
if (rv < 0) {
@@ -951,7 +916,7 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
if (rv < 0) {
return rv;
}
- if (flags & _LEFT) {
+ if (flags & FLAG_LEFT) {
while (width-- > 1) {
rv = (*ss->stuff)(ss, " ", 1);
if (rv < 0) {
diff --git a/pr/src/io/prsocket.c b/pr/src/io/prsocket.c
index 2483f963..652632fc 100644
--- a/pr/src/io/prsocket.c
+++ b/pr/src/io/prsocket.c
@@ -338,27 +338,16 @@ static PRStatus PR_CALLBACK SocketConnectContinue(
#elif defined(XP_OS2)
- if (out_flags & PR_POLL_EXCEPT) {
- int len = sizeof(err);
- if (getsockopt(osfd, SOL_SOCKET, SO_ERROR, (char *) &err, &len)
- < 0) {
- _PR_MD_MAP_GETSOCKOPT_ERROR(sock_errno());
- return PR_FAILURE;
- }
- if (err != 0) {
- _PR_MD_MAP_CONNECT_ERROR(err);
- } else {
- PR_SetError(PR_UNKNOWN_ERROR, 0);
- }
+ err = _MD_os2_get_nonblocking_connect_error(osfd);
+ if (err != 0) {
+ _PR_MD_MAP_CONNECT_ERROR(err);
return PR_FAILURE;
}
-
- PR_ASSERT(out_flags & PR_POLL_WRITE);
return PR_SUCCESS;
#elif defined(XP_MAC)
- err = _MD_mac_get_nonblocking_connect_error(osfd);
+ err = _MD_mac_get_nonblocking_connect_error(fd);
if (err == -1)
return PR_FAILURE;
else
@@ -366,13 +355,23 @@ static PRStatus PR_CALLBACK SocketConnectContinue(
#elif defined(XP_BEOS)
+#ifdef BONE_VERSION /* bug 122364 */
+ /* temporary workaround until getsockopt(SO_ERROR) works in BONE */
+ if (out_flags & PR_POLL_EXCEPT) {
+ PR_SetError(PR_CONNECT_REFUSED_ERROR, 0);
+ return PR_FAILURE;
+ }
+ PR_ASSERT(out_flags & PR_POLL_WRITE);
+ return PR_SUCCESS;
+#else
err = _MD_beos_get_nonblocking_connect_error(fd);
if( err != 0 ) {
- _PR_MD_MAP_CONNECT_ERROR(err);
- return PR_FAILURE;
+ _PR_MD_MAP_CONNECT_ERROR(err);
+ return PR_FAILURE;
}
else
- return PR_SUCCESS;
+ return PR_SUCCESS;
+#endif /* BONE_VERSION */
#else
PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
@@ -1396,7 +1395,7 @@ PR_IMPLEMENT(PRStatus) PR_NewTCPSocketPair(PRFileDesc *f[])
*/
SOCKET listenSock;
SOCKET osfd[2];
- struct sockaddr_in selfAddr;
+ struct sockaddr_in selfAddr, peerAddr;
int addrLen;
if (!_pr_initialized) _PR_ImplicitInitialization();
@@ -1440,10 +1439,24 @@ PR_IMPLEMENT(PRStatus) PR_NewTCPSocketPair(PRFileDesc *f[])
addrLen) == SOCKET_ERROR) {
goto failed;
}
- osfd[1] = accept(listenSock, NULL, NULL);
+ /*
+ * A malicious local process may connect to the listening
+ * socket, so we need to verify that the accepted connection
+ * is made from our own socket osfd[0].
+ */
+ if (getsockname(osfd[0], (struct sockaddr *) &selfAddr,
+ &addrLen) == SOCKET_ERROR) {
+ goto failed;
+ }
+ osfd[1] = accept(listenSock, (struct sockaddr *) &peerAddr, &addrLen);
if (osfd[1] == INVALID_SOCKET) {
goto failed;
}
+ if (peerAddr.sin_port != selfAddr.sin_port) {
+ /* the connection we accepted is not from osfd[0] */
+ PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, 0);
+ goto failed;
+ }
closesocket(listenSock);
f[0] = PR_AllocFileDesc(osfd[0], PR_GetTCPMethods());
@@ -1480,7 +1493,7 @@ failed:
* default implementation
*/
PRFileDesc *listenSock;
- PRNetAddr selfAddr;
+ PRNetAddr selfAddr, peerAddr;
PRUint16 port;
f[0] = f[1] = NULL;
@@ -1503,6 +1516,17 @@ failed:
if (f[0] == NULL) {
goto failed;
}
+#ifdef _PR_CONNECT_DOES_NOT_BIND
+ /*
+ * If connect does not implicitly bind the socket (e.g., on
+ * BeOS), we have to bind the socket so that we can get its
+ * port with getsockname later.
+ */
+ PR_InitializeNetAddr(PR_IpAddrLoopback, 0, &selfAddr);
+ if (PR_Bind(f[0], &selfAddr) == PR_FAILURE) {
+ goto failed;
+ }
+#endif
PR_InitializeNetAddr(PR_IpAddrLoopback, port, &selfAddr);
/*
@@ -1518,10 +1542,23 @@ failed:
== PR_FAILURE) {
goto failed;
}
- f[1] = PR_Accept(listenSock, NULL, PR_INTERVAL_NO_TIMEOUT);
+ /*
+ * A malicious local process may connect to the listening
+ * socket, so we need to verify that the accepted connection
+ * is made from our own socket f[0].
+ */
+ if (PR_GetSockName(f[0], &selfAddr) == PR_FAILURE) {
+ goto failed;
+ }
+ f[1] = PR_Accept(listenSock, &peerAddr, PR_INTERVAL_NO_TIMEOUT);
if (f[1] == NULL) {
goto failed;
}
+ if (peerAddr.inet.port != selfAddr.inet.port) {
+ /* the connection we accepted is not from f[0] */
+ PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, 0);
+ goto failed;
+ }
PR_Close(listenSock);
return PR_SUCCESS;
@@ -1532,6 +1569,9 @@ failed:
if (f[0]) {
PR_Close(f[0]);
}
+ if (f[1]) {
+ PR_Close(f[1]);
+ }
return PR_FAILURE;
#endif
}
@@ -1539,20 +1579,14 @@ failed:
PR_IMPLEMENT(PRInt32)
PR_FileDesc2NativeHandle(PRFileDesc *fd)
{
- if (fd) {
- /*
- * The fd may be layered. Chase the links to the
- * bottom layer to get the osfd.
- */
- PRFileDesc *bottom = fd;
- while (bottom->lower != NULL) {
- bottom = bottom->lower;
- }
- return bottom->secret->md.osfd;
- } else {
- PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
- return -1;
- }
+ if (fd) {
+ fd = PR_GetIdentitiesLayer(fd, PR_NSPR_IO_LAYER);
+ }
+ if (!fd) {
+ PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
+ return -1;
+ }
+ return fd->secret->md.osfd;
}
PR_IMPLEMENT(void)
diff --git a/pr/src/linking/Makefile.in b/pr/src/linking/Makefile.in
index 1c5de3c1..d997ccba 100644
--- a/pr/src/linking/Makefile.in
+++ b/pr/src/linking/Makefile.in
@@ -58,6 +58,16 @@ TARGETS = $(OBJS)
INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private
+# For Dl_info and dladdr.
+ifeq ($(OS_TARGET),Linux)
+DEFINES += -D_GNU_SOURCE
+endif
+
+# On Mac OS X use flat #includes.
+ifeq ($(OS_TARGET),MacOSX)
+INCLUDES += -I/Developer/Headers/FlatCarbon
+endif
+
DEFINES += -D_NSPR_BUILD_
include $(topsrcdir)/config/rules.mk
diff --git a/pr/src/linking/prlink.c b/pr/src/linking/prlink.c
index b3802055..6b9f94a4 100644
--- a/pr/src/linking/prlink.c
+++ b/pr/src/linking/prlink.c
@@ -17,7 +17,7 @@
* Copyright (C) 1998-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
- * Contributor(s):
+ * Contributor(s): Steve Streeter (Hewlett-Packard Company)
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
@@ -40,21 +40,26 @@
#include <image.h>
#endif
-#ifdef XP_MAC
+#if defined(XP_MAC) || defined(XP_MACOSX)
#include <CodeFragments.h>
#include <TextUtils.h>
#include <Types.h>
-#include <Strings.h>
#include <Aliases.h>
#if TARGET_CARBON
#include <CFURL.h>
#include <CFBundle.h>
#include <CFString.h>
+#include <CFDictionary.h>
+#include <CFData.h>
#endif
+#if defined(XP_MACOSX)
+#define PStrFromCStr(src, dst) c2pstrcpy(dst, src)
+#else
#include "macdll.h"
#include "mdmac.h"
+#endif /* XP_MACOSX */
#endif
#ifdef XP_UNIX
@@ -73,6 +78,13 @@
#ifndef RTLD_LOCAL
#define RTLD_LOCAL 0
#endif
+#ifdef AIX
+#include <sys/ldr.h>
+#endif
+#ifdef OSF1
+#include <loader.h>
+#include <rld_interface.h>
+#endif
#elif defined(USE_HPSHL)
#include <dl.h>
#elif defined(USE_MACH_DYLD)
@@ -111,14 +123,18 @@ struct PRLibrary {
#endif
#endif
-#ifdef XP_MAC
- CFragConnectionID dlh;
+#if defined(XP_MAC) || defined(XP_MACOSX)
+ CFragConnectionID connection;
#if TARGET_CARBON
CFBundleRef bundle;
#endif
Ptr main;
+
+#if defined(XP_MACOSX)
+ CFMutableDictionaryRef wrappers;
+#endif /* XP_MACOSX */
#endif
#ifdef XP_UNIX
@@ -262,6 +278,10 @@ void _PR_InitLinker(void)
}
#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);
@@ -282,6 +302,32 @@ void _PR_ShutdownLinker(void)
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
+ * 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;
+ }
+
+#if !defined(USE_DLFCN) && !defined(HAVE_STRERROR)
+ PR_DELETE(errStrBuf);
+#endif
+}
#endif
/******************************************************************************/
@@ -292,7 +338,9 @@ PR_IMPLEMENT(PRStatus) PR_SetLibraryPath(const char *path)
if (!_pr_initialized) _PR_ImplicitInitialization();
PR_EnterMonitor(pr_linker_lock);
- PR_FREEIF(_pr_currentLibPath);
+ if (_pr_currentLibPath) {
+ free(_pr_currentLibPath);
+ }
if (path) {
_pr_currentLibPath = strdup(path);
if (!_pr_currentLibPath) {
@@ -310,7 +358,7 @@ PR_IMPLEMENT(PRStatus) PR_SetLibraryPath(const char *path)
** Return the library path for finding shared libraries.
*/
PR_IMPLEMENT(char *)
-PR_GetLibraryPath()
+PR_GetLibraryPath(void)
{
char *ev;
char *copy = NULL; /* a copy of _pr_currentLibPath */
@@ -342,7 +390,7 @@ PR_GetLibraryPath()
ev = "";
len = strlen(ev) + 1; /* +1 for the null */
- p = (char*) PR_MALLOC(len);
+ p = (char*) malloc(len);
if (p) {
strcpy(p, ev);
}
@@ -369,7 +417,7 @@ PR_GetLibraryPath()
#endif
len = strlen(ev) + 1; /* +1 for the null */
- p = (char*) PR_MALLOC(len);
+ p = (char*) malloc(len);
if (p) {
strcpy(p, ev);
} /* if (p) */
@@ -410,20 +458,40 @@ PR_GetLibraryName(const char *path, const char *lib)
#ifdef XP_PC
if (strstr(lib, PR_DLL_SUFFIX) == NULL)
{
- fullname = PR_smprintf("%s\\%s%s", path, lib, PR_DLL_SUFFIX);
+ if (path) {
+ fullname = PR_smprintf("%s\\%s%s", path, lib, PR_DLL_SUFFIX);
+ } else {
+ fullname = PR_smprintf("%s%s", lib, PR_DLL_SUFFIX);
+ }
} else {
- fullname = PR_smprintf("%s\\%s", path, lib);
+ if (path) {
+ fullname = PR_smprintf("%s\\%s", path, lib);
+ } else {
+ fullname = PR_smprintf("%s", lib);
+ }
}
#endif /* XP_PC */
#ifdef XP_MAC
- fullname = PR_smprintf("%s%s", path, lib);
+ if (path) {
+ fullname = PR_smprintf("%s%s", path, lib);
+ } else {
+ fullname = PR_smprintf("%s", lib);
+ }
#endif
#if defined(XP_UNIX) || defined(XP_BEOS)
if (strstr(lib, PR_DLL_SUFFIX) == NULL)
{
- fullname = PR_smprintf("%s/lib%s%s", path, lib, PR_DLL_SUFFIX);
+ if (path) {
+ fullname = PR_smprintf("%s/lib%s%s", path, lib, PR_DLL_SUFFIX);
+ } else {
+ fullname = PR_smprintf("lib%s%s", lib, PR_DLL_SUFFIX);
+ }
} else {
- fullname = PR_smprintf("%s/%s", path, lib);
+ if (path) {
+ fullname = PR_smprintf("%s/%s", path, lib);
+ } else {
+ fullname = PR_smprintf("%s", lib);
+ }
}
#endif /* XP_UNIX || XP_BEOS */
return fullname;
@@ -501,37 +569,258 @@ PR_LoadLibrary(const char *name)
return PR_LoadLibraryWithFlags(libSpec, 0);
}
+#if defined(USE_MACH_DYLD)
+static NSModule
+pr_LoadMachDyldModule(const char *name)
+{
+ NSObjectFileImage ofi;
+ NSModule h = NULL;
+ if (NSCreateObjectFileImageFromFile(name, &ofi)
+ == NSObjectFileImageSuccess) {
+ h = NSLinkModule(ofi, name, NSLINKMODULE_OPTION_PRIVATE);
+ }
+ return h;
+}
+#endif
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+
+#ifdef XP_MACOSX
+static void* TV2FP(CFMutableDictionaryRef dict, const char* name, void *tvp)
+{
+ static uint32 glue[6] = { 0x3D800000, 0x618C0000, 0x800C0000, 0x804C0004, 0x7C0903A6, 0x4E800420 };
+ uint32* newGlue = NULL;
+
+ if (tvp != NULL) {
+ CFStringRef nameRef = CFStringCreateWithCString(NULL, name, kCFStringEncodingASCII);
+ if (nameRef) {
+ CFMutableDataRef glueData = (CFMutableDataRef) CFDictionaryGetValue(dict, nameRef);
+ if (glueData == NULL) {
+ glueData = CFDataCreateMutable(NULL, sizeof(glue));
+ if (glueData != NULL) {
+ newGlue = (uint32*) CFDataGetMutableBytePtr(glueData);
+ memcpy(newGlue, glue, sizeof(glue));
+ newGlue[0] |= ((UInt32)tvp >> 16);
+ newGlue[1] |= ((UInt32)tvp & 0xFFFF);
+ MakeDataExecutable(newGlue, sizeof(glue));
+ CFDictionaryAddValue(dict, nameRef, glueData);
+ CFRelease(glueData);
+
+ PR_LOG(_pr_linker_lm, PR_LOG_MIN, ("TV2FP: created wrapper for CFM function %s().", name));
+ }
+ } else {
+ PR_LOG(_pr_linker_lm, PR_LOG_MIN, ("TV2FP: found wrapper for CFM function %s().", name));
+
+ newGlue = (uint32*) CFDataGetMutableBytePtr(glueData);
+ }
+ CFRelease(nameRef);
+ }
+ }
+
+ return newGlue;
+}
+#endif
+
+/*
+** macLibraryLoadProc is a function definition for a Mac shared library
+** loading method. The "name" param is the same full or partial pathname
+** that was passed to pr_LoadLibraryByPathName. The function must fill
+** in the fields of "lm" which apply to its library type. Returns
+** PR_SUCCESS if successful.
+*/
+
+typedef PRStatus (*macLibraryLoadProc)(const char *name, PRLibrary *lm);
+
+static PRStatus
+pr_LoadViaCFM(const char *name, PRLibrary *lm)
+{
+ OSErr err;
+ char cName[64];
+ Str255 errName;
+
+#if !defined(XP_MACOSX)
+ Str255 pName;
+ /*
+ * Algorithm: The "name" passed in could be either a shared
+ * library name that we should look for in the normal library
+ * search paths, or a full path name to a specific library on
+ * disk. Since the full path will always contain a ":"
+ * (shortest possible path is "Volume:File"), and since a
+ * library name can not contain a ":", we can test for the
+ * presence of a ":" to see which type of library we should load.
+ * or its a full UNIX path which we for now assume is Java
+ * enumerating all the paths (see below)
+ */
+ if (strchr(name, PR_PATH_SEPARATOR) == NULL) {
+ if (strchr(name, PR_DIRECTORY_SEPARATOR) == NULL) {
+ /*
+ * The name did not contain a ":", so it must be a
+ * library name. Convert the name to a Pascal string
+ * and try to find the library.
+ */
+ } else {
+ /*
+ * name contained a "/" which means we need to suck off
+ * the last part of the path and pass that on the
+ * NSGetSharedLibrary. this may not be what we really
+ * want to do .. because Java could be iterating through
+ * the whole LD path, and we'll find it if it's anywhere
+ * on that path -- it appears that's what UNIX and the
+ * PC do too...so we'll emulate but it could be wrong.
+ */
+ name = strrchr(name, PR_DIRECTORY_SEPARATOR) + 1;
+ }
+
+ PStrFromCStr(name, pName);
+
+ /*
+ * beard: NSGetSharedLibrary was so broken that I just decided to
+ * use GetSharedLibrary for now. This will need to change for
+ * plugins, but those should go in the Extensions folder anyhow.
+ */
+ err = GetSharedLibrary(pName, kCompiledCFragArch, kReferenceCFrag,
+ &lm->connection, &lm->main, errName);
+ if (err != noErr)
+ return PR_FAILURE;
+ }
+ else
+#endif
+ {
+ /*
+ * The name did contain a ":", so it must be a full path name.
+ * Now we have to do a lot of work to convert the path name to
+ * an FSSpec (silly, since we were probably just called from the
+ * MacFE plug-in code that already knew the FSSpec and converted
+ * it to a full path just to pass to us). Make an FSSpec from
+ * the full path and call GetDiskFragment.
+ */
+ FSSpec fileSpec;
+ Boolean tempUnusedBool;
+
+#if defined(XP_MACOSX)
+ {
+ /* Use direct conversion of POSIX path to FSRef to FSSpec. */
+ FSRef ref;
+ err = FSPathMakeRef((const UInt8*)name, &ref, NULL);
+ if (err == noErr)
+ err = FSGetCatalogInfo(&ref, kFSCatInfoNone, NULL, NULL,
+ &fileSpec, NULL);
+ }
+#else
+ PStrFromCStr(name, pName);
+ err = FSMakeFSSpec(0, 0, pName, &fileSpec);
+#endif
+ if (err != noErr)
+ return PR_FAILURE;
+
+ /* Resolve an alias if this was one */
+ err = ResolveAliasFile(&fileSpec, true, &tempUnusedBool,
+ &tempUnusedBool);
+ if (err != noErr)
+ return PR_FAILURE;
+
+ /* Finally, try to load the library */
+ err = GetDiskFragment(&fileSpec, 0, kCFragGoesToEOF, fileSpec.name,
+ kLoadCFrag, &lm->connection, &lm->main, errName);
+
#if TARGET_CARBON
+ p2cstrcpy(cName, fileSpec.name);
+#else
+ memcpy(cName, fileSpec.name + 1, fileSpec.name[0]);
+ cName[fileSpec.name[0]] = '\0';
+#endif
+
+#ifdef XP_MACOSX
+ if (err == noErr && lm->connection) {
+ /*
+ * if we're a mach-o binary, need to wrap all CFM function
+ * pointers. need a hash-table of already seen function
+ * pointers, etc.
+ */
+ lm->wrappers = CFDictionaryCreateMutable(NULL, 16,
+ &kCFTypeDictionaryKeyCallBacks,
+ &kCFTypeDictionaryValueCallBacks);
+ if (lm->wrappers) {
+ lm->main = TV2FP(lm->wrappers, "main", lm->main);
+ } else
+ err = memFullErr;
+ }
+#endif
+ }
+ return (err == noErr) ? PR_SUCCESS : PR_FAILURE;
+}
/*
-** Returns a CFBundleRef if the FSSpec refers to a Mac OS X bundle directory.
-** The caller is responsible for calling CFRelease() to deallocate.
+** Creates a CFBundleRef if the pathname refers to a Mac OS X bundle
+** directory. The caller is responsible for calling CFRelease() to
+** deallocate.
*/
-static CFBundleRef getLibraryBundle(const FSSpec* spec)
+
+#if TARGET_CARBON
+static PRStatus
+pr_LoadCFBundle(const char *name, PRLibrary *lm)
{
+ CFURLRef bundleURL;
CFBundleRef bundle = NULL;
- FSRef ref;
- OSErr err = FSpMakeFSRef(spec, &ref);
- char path[512];
- if (err == noErr && ((UInt32)(FSRefMakePath) != kUnresolvedCFragSymbolAddress)) {
- err = FSRefMakePath(&ref, (UInt8*)path, sizeof(path) - 1);
- if (err == noErr) {
- CFStringRef pathRef = CFStringCreateWithCString(NULL, path, kCFStringEncodingUTF8);
- if (pathRef) {
- CFURLRef bundleURL = CFURLCreateWithFileSystemPath(NULL, pathRef, kCFURLPOSIXPathStyle, true);
- if (bundleURL != NULL) {
- bundle = CFBundleCreate(NULL, bundleURL);
- CFRelease(bundleURL);
- }
- CFRelease(pathRef);
- }
+
+#ifdef XP_MACOSX
+ char pathBuf[PATH_MAX];
+ const char *resolvedPath;
+ CFStringRef pathRef;
+
+ /* Takes care of relative paths and symlinks */
+ resolvedPath = realpath(name, pathBuf);
+ if (!resolvedPath)
+ return PR_FAILURE;
+
+ pathRef = CFStringCreateWithCString(NULL, pathBuf, kCFStringEncodingUTF8);
+ if (pathRef) {
+ bundleURL = CFURLCreateWithFileSystemPath(NULL, pathRef,
+ kCFURLPOSIXPathStyle, true);
+ if (bundleURL) {
+ bundle = CFBundleCreate(NULL, bundleURL);
+ CFRelease(bundleURL);
}
+ CFRelease(pathRef);
+ }
+#else
+ OSErr err;
+ Str255 pName;
+ FSSpec fsSpec;
+ FSRef fsRef;
+
+ if ((UInt32)(CFURLCreateFromFSRef) == kUnresolvedCFragSymbolAddress)
+ return PR_FAILURE;
+ PStrFromCStr(name, pName);
+ err = FSMakeFSSpec(0, 0, pName, &fsSpec);
+ if (err != noErr)
+ return PR_FAILURE;
+ err = FSpMakeFSRef(&fsSpec, &fsRef);
+ if (err != noErr)
+ return PR_FAILURE;
+ bundleURL = CFURLCreateFromFSRef(NULL, &fsRef);
+ if (bundleURL) {
+ bundle = CFBundleCreate(NULL, bundleURL);
+ CFRelease(bundleURL);
}
- return bundle;
+#endif
+
+ lm->bundle = bundle;
+ return (bundle != NULL) ? PR_SUCCESS : PR_FAILURE;
}
+#endif
+#ifdef XP_MACOSX
+static PRStatus
+pr_LoadViaDyld(const char *name, PRLibrary *lm)
+{
+ lm->dlh = pr_LoadMachDyldModule(name);
+ return (lm->dlh != NULL) ? PR_SUCCESS : PR_FAILURE;
+}
#endif
+#endif /* defined(XP_MAC) || defined(XP_MACOSX) */
+
/*
** Dynamically load a library. Only load libraries once, so scan the load
** map first.
@@ -594,157 +883,48 @@ pr_LoadLibraryByPathname(const char *name, PRIntn flags)
lm->next = pr_loadmap;
pr_loadmap = lm;
- /*
- ** Try to load a table of "static functions" provided by the DLL
- */
+ /*
+ ** Try to load a table of "static functions" provided by the DLL
+ */
- pfn = (NODL_PROC *)GetProcAddress(h, "NODL_TABLE");
- if (pfn != NULL) {
- lm->staticTable = (*pfn)();
- }
+ pfn = (NODL_PROC *)GetProcAddress(h, "NODL_TABLE");
+ if (pfn != NULL) {
+ lm->staticTable = (*pfn)();
+ }
}
#endif /* WIN32 || WIN16 */
-#if defined(XP_MAC) && TARGET_RT_MAC_CFM
- {
- OSErr err;
- CFragConnectionID connectionID;
- Str255 errName;
- Str255 pName;
- char cName[64];
- const char* libName;
-
- /*
- * Algorithm: The "name" passed in could be either a shared
- * library name that we should look for in the normal library
- * search paths, or a full path name to a specific library on
- * disk. Since the full path will always contain a ":"
- * (shortest possible path is "Volume:File"), and since a
- * library name can not contain a ":", we can test for the
- * presence of a ":" to see which type of library we should load.
- * or its a full UNIX path which we for now assume is Java
- * enumerating all the paths (see below)
- */
- if (strchr(name, PR_PATH_SEPARATOR) == NULL)
+#if defined(XP_MAC) || defined(XP_MACOSX)
{
- if (strchr(name, PR_DIRECTORY_SEPARATOR) == NULL)
- {
- /*
- * The name did not contain a ":", so it must be a
- * library name. Convert the name to a Pascal string
- * and try to find the library.
- */
- }
- else
- {
- /* name contained a "/" which means we need to suck off the last part */
- /* of the path and pass that on the NSGetSharedLibrary */
- /* this may not be what we really want to do .. because Java could */
- /* be iterating through the whole LD path, and we'll find it if it's */
- /* anywhere on that path -- it appears that's what UNIX and the PC do */
- /* too...so we'll emulate but it could be wrong. */
- name = strrchr(name, PR_DIRECTORY_SEPARATOR) + 1;
- }
-
- PStrFromCStr(name, pName);
-
- /*
- * beard: NSGetSharedLibrary was so broken that I just decided to
- * use GetSharedLibrary for now. This will need to change for
- * plugins, but those should go in the Extensions folder anyhow.
- */
-#if 0
- err = NSGetSharedLibrary(pName, &connectionID, &lm->main);
+ int i;
+ PRStatus status;
+
+ static const macLibraryLoadProc loadProcs[] = {
+#if defined(XP_MACOSX)
+ pr_LoadViaDyld, pr_LoadCFBundle, pr_LoadViaCFM
+#elif TARGET_CARBON
+ pr_LoadViaCFM, pr_LoadCFBundle
#else
- err = GetSharedLibrary(pName, kCompiledCFragArch, kReferenceCFrag,
- &connectionID, &lm->main, errName);
+ pr_LoadViaCFM
#endif
- if (err != noErr)
- {
- oserr = err;
- PR_DELETE(lm);
- goto unlock;
- }
-
- libName = name;
- }
- else
- {
- /*
- * The name did contain a ":", so it must be a full path name.
- * Now we have to do a lot of work to convert the path name to
- * an FSSpec (silly, since we were probably just called from the
- * MacFE plug-in code that already knew the FSSpec and converted
- * it to a full path just to pass to us). First we copy out the
- * volume name (the text leading up to the first ":"); then we
- * separate the file name (the text following the last ":") from
- * rest of the path. After converting the strings to Pascal
- * format we can call GetCatInfo to get the parent directory ID
- * of the file, and then (finally) make an FSSpec and call
- * GetDiskFragment.
- */
- FSSpec fileSpec;
- Boolean tempUnusedBool;
-
- PStrFromCStr(name, pName);
- err = FSMakeFSSpec(0, 0, pName, &fileSpec);
- if (err != noErr) {
- oserr = _MD_ERRNO();
- PR_DELETE(lm);
- goto unlock;
- }
+ };
- /* Resolve an alias if this was one */
- err = ResolveAliasFile(&fileSpec, true, &tempUnusedBool, &tempUnusedBool);
- if (err != noErr)
- {
- oserr = err;
- PR_DELETE(lm);
- goto unlock;
- }
-
- /* Finally, try to load the library */
- err = GetDiskFragment(&fileSpec, 0, kCFragGoesToEOF, fileSpec.name,
- kLoadCFrag, &connectionID, &lm->main, errName);
-
- memcpy(cName, fileSpec.name + 1, fileSpec.name[0]);
- cName[fileSpec.name[0]] = '\0';
- libName = cName;
-
- if (err != noErr)
- {
-#if TARGET_CARBON
- /* If not a CFM library, perhaps it's a CFBundle. */
- lm->bundle = getLibraryBundle(&fileSpec);
-#ifdef DEBUG
- fprintf(stderr, "*** loading bundle for library '%s' [%s]. ***\n",
- libName, lm->bundle ? "SUCCEEDED" : "FAILED");
-#endif
- if (lm->bundle == NULL) {
- oserr = err;
- PR_DELETE(lm);
- goto unlock;
- }
-#else
- oserr = err;
- PR_DELETE(lm);
- goto unlock;
-#endif
- }
+ for (i = 0; i < sizeof(loadProcs) / sizeof(loadProcs[0]); i++) {
+ if ((status = loadProcs[i](name, lm)) == PR_SUCCESS)
+ break;
}
-
- lm->name = strdup(libName);
- lm->dlh = connectionID;
+ if (status != PR_SUCCESS) {
+ oserr = cfragNoLibraryErr;
+ PR_DELETE(lm);
+ goto unlock;
+ }
+ lm->name = strdup(name);
lm->next = pr_loadmap;
pr_loadmap = lm;
}
-#elif defined(XP_MAC) && !TARGET_RT_MAC_CFM
- {
-
- }
#endif
-#ifdef XP_UNIX
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
#ifdef HAVE_DLL
{
#if defined(USE_DLFCN)
@@ -790,12 +970,7 @@ pr_LoadLibraryByPathname(const char *name, PRIntn flags)
/* No equivalent of PR_LD_GLOBAL and PR_LD_LOCAL. */
h = shl_load(name, shl_flags, 0L);
#elif defined(USE_MACH_DYLD)
- NSObjectFileImage ofi;
- NSModule h = NULL;
- if (NSCreateObjectFileImageFromFile(name, &ofi)
- == NSObjectFileImageSuccess) {
- h = NSLinkModule(ofi, name, NSLINKMODULE_OPTION_PRIVATE);
- }
+ NSModule h = pr_LoadMachDyldModule(name);
#else
#error Configuration error
#endif
@@ -971,7 +1146,7 @@ pr_Mac_LoadNamedFragment(const FSSpec *fileSpec, const char* fragmentName)
goto unlock;
newLib->name = strdup(fragmentName);
- newLib->dlh = connectionID;
+ newLib->connection = connectionID;
newLib->next = pr_loadmap;
pr_loadmap = newLib;
@@ -1037,7 +1212,7 @@ pr_Mac_LoadIndexedFragment(const FSSpec *fileSpec, PRUint32 fragIndex)
}
newLib->name = fragmentName; /* was malloced in NSLoadIndexedFragment */
- newLib->dlh = connectionID;
+ newLib->connection = connectionID;
newLib->next = pr_loadmap;
pr_loadmap = newLib;
@@ -1107,14 +1282,18 @@ PR_UnloadLibrary(PRLibrary *lib)
}
#endif /* XP_PC */
-#if defined(XP_MAC) && TARGET_RT_MAC_CFM
+#if defined(XP_MAC) || defined(XP_MACOSX)
/* Close the connection */
+ if (lib->connection)
+ CloseConnection(&(lib->connection));
#if TARGET_CARBON
if (lib->bundle)
CFRelease(lib->bundle);
- else
#endif
- CloseConnection(&(lib->dlh));
+#if defined(XP_MACOSX)
+ if (lib->wrappers)
+ CFRelease(lib->wrappers);
+#endif
#endif
/* unlink from library search list */
@@ -1148,7 +1327,8 @@ PR_UnloadLibrary(PRLibrary *lib)
freeLib:
PR_LOG(_pr_linker_lm, PR_LOG_MIN, ("Unloaded library %s", lib->name));
- PR_DELETE(lib->name);
+ free(lib->name);
+ lib->name = NULL;
PR_DELETE(lib);
if (result == -1) {
PR_SetError(PR_UNLOAD_LIBRARY_ERROR, _MD_ERRNO());
@@ -1167,12 +1347,12 @@ pr_FindSymbolInLib(PRLibrary *lm, const char *name)
void *f = NULL;
if (lm->staticTable != NULL) {
- const PRStaticLinkTable* tp;
- for (tp = lm->staticTable; tp->name; tp++) {
- if (strcmp(name, tp->name) == 0) {
- return (void*) tp->fp;
+ const PRStaticLinkTable* tp;
+ for (tp = lm->staticTable; tp->name; tp++) {
+ if (strcmp(name, tp->name) == 0) {
+ return (void*) tp->fp;
+ }
}
- }
/*
** If the symbol was not found in the static table then check if
** the symbol was exported in the DLL... Win16 only!!
@@ -1191,29 +1371,46 @@ pr_FindSymbolInLib(PRLibrary *lm, const char *name)
f = GetProcAddress(lm->dlh, name);
#endif /* WIN32 || WIN16 */
-#ifdef XP_MAC
+#if defined(XP_MAC) || defined(XP_MACOSX)
+#if defined(NEED_LEADING_UNDERSCORE)
+#define SYM_OFFSET 1
+#else
+#define SYM_OFFSET 0
+#endif
#if TARGET_CARBON
- if (lm->bundle)
- {
- CFStringRef nameRef = CFStringCreateWithCString(NULL, name, kCFStringEncodingASCII);
+ if (lm->bundle) {
+ CFStringRef nameRef = CFStringCreateWithCString(NULL, name + SYM_OFFSET, kCFStringEncodingASCII);
if (nameRef) {
f = CFBundleGetFunctionPointerForName(lm->bundle, nameRef);
CFRelease(nameRef);
}
}
- else
#endif
- {
+ if (lm->connection) {
Ptr symAddr;
CFragSymbolClass symClass;
Str255 pName;
-
- PStrFromCStr(name, pName);
- f = (NSFindSymbol(lm->dlh, pName, &symAddr, &symClass) == noErr) ? symAddr : NULL;
+ PR_LOG(_pr_linker_lm, PR_LOG_MIN, ("Looking up symbol: %s", name + SYM_OFFSET));
- if (f == NULL && strcmp(name, "main") == 0) f = lm->main;
+ PStrFromCStr(name + SYM_OFFSET, pName);
+
+#if defined(XP_MACOSX)
+ f = (FindSymbol(lm->connection, pName, &symAddr, &symClass) == noErr) ? symAddr : NULL;
+#else
+ f = (NSFindSymbol(lm->connection, pName, &symAddr, &symClass) == noErr) ? symAddr : NULL;
+#endif
+
+#if defined(XP_MACOSX)
+ /* callers expect mach-o function pointers, so must wrap tvectors with glue. */
+ if (f && symClass == kTVectorCFragSymbol) {
+ f = TV2FP(lm->wrappers, name + SYM_OFFSET, f);
+ }
+#endif
+
+ if (f == NULL && strcmp(name + SYM_OFFSET, "main") == 0) f = lm->main;
}
+#undef SYM_OFFSET
#endif /* XP_MAC */
#ifdef XP_BEOS
@@ -1231,7 +1428,7 @@ pr_FindSymbolInLib(PRLibrary *lm, const char *name)
f = NULL;
}
#elif defined(USE_MACH_DYLD)
- {
+ if (lm->dlh) {
NSSymbol symbol;
symbol = NSLookupSymbolInModule(lm->dlh, name);
if (symbol != NULL)
@@ -1385,7 +1582,11 @@ PR_LoadStaticLibrary(const char *name, const PRStaticLinkTable *slt)
lm->name = strdup(name);
lm->refCount = 1;
+#if defined(XP_MAC)
+ lm->connection = pr_exe_loadmap ? pr_exe_loadmap->connection : 0;
+#else
lm->dlh = pr_exe_loadmap ? pr_exe_loadmap->dlh : 0;
+#endif
lm->staticTable = slt;
lm->next = pr_loadmap;
pr_loadmap = lm;
@@ -1397,3 +1598,219 @@ PR_LoadStaticLibrary(const char *name, const PRStaticLinkTable *slt)
PR_ExitMonitor(pr_linker_lock);
return result;
}
+
+PR_IMPLEMENT(char *)
+PR_GetLibraryFilePathname(const char *name, PRFuncPtr addr)
+{
+#if defined(SOLARIS) || defined(LINUX)
+ Dl_info dli;
+ char *result;
+
+ if (dladdr((void *)addr, &dli) == 0) {
+ PR_SetError(PR_LIBRARY_NOT_LOADED_ERROR, _MD_ERRNO());
+ DLLErrorInternal(_MD_ERRNO());
+ return NULL;
+ }
+ result = PR_Malloc(strlen(dli.dli_fname)+1);
+ if (result != NULL) {
+ strcpy(result, dli.dli_fname);
+ }
+ return result;
+#elif defined(USE_MACH_DYLD)
+ char *result;
+ char *image_name;
+ int i, count = _dyld_image_count();
+
+ for (i = 0; i < count; i++) {
+ image_name = _dyld_get_image_name(i);
+ if (strstr(image_name, name) != NULL) {
+ result = PR_Malloc(strlen(image_name)+1);
+ if (result != NULL) {
+ strcpy(result, image_name);
+ }
+ return result;
+ }
+ }
+ PR_SetError(PR_LIBRARY_NOT_LOADED_ERROR, 0);
+ return NULL;
+#elif defined(AIX)
+ char *result;
+#define LD_INFO_INCREMENT 64
+ struct ld_info *info;
+ unsigned int info_length = LD_INFO_INCREMENT * sizeof(struct ld_info);
+ struct ld_info *infop;
+
+ for (;;) {
+ info = PR_Malloc(info_length);
+ if (info == NULL) {
+ return NULL;
+ }
+ /* If buffer is too small, loadquery fails with ENOMEM. */
+ if (loadquery(L_GETINFO, info, info_length) != -1) {
+ break;
+ }
+ PR_Free(info);
+ if (errno != ENOMEM) {
+ /* should not happen */
+ _PR_MD_MAP_DEFAULT_ERROR(_MD_ERRNO());
+ return NULL;
+ }
+ /* retry with a larger buffer */
+ info_length += LD_INFO_INCREMENT * sizeof(struct ld_info);
+ }
+
+ for (infop = info;
+ ;
+ infop = (struct ld_info *)((char *)infop + infop->ldinfo_next)) {
+ if (strstr(infop->ldinfo_filename, name) != NULL) {
+ result = PR_Malloc(strlen(infop->ldinfo_filename)+1);
+ if (result != NULL) {
+ strcpy(result, infop->ldinfo_filename);
+ }
+ break;
+ }
+ if (!infop->ldinfo_next) {
+ PR_SetError(PR_LIBRARY_NOT_LOADED_ERROR, 0);
+ result = NULL;
+ break;
+ }
+ }
+ PR_Free(info);
+ return result;
+#elif defined(OSF1)
+ /* Contributed by Steve Streeter of HP */
+ ldr_process_t process, ldr_my_process();
+ ldr_module_t mod_id;
+ ldr_module_info_t info;
+ ldr_region_t regno;
+ ldr_region_info_t reginfo;
+ size_t retsize;
+ int rv;
+ char *result;
+
+ /* Get process for which dynamic modules will be listed */
+
+ process = ldr_my_process();
+
+ /* Attach to process */
+
+ rv = ldr_xattach(process);
+ if (rv) {
+ /* should not happen */
+ _PR_MD_MAP_DEFAULT_ERROR(_MD_ERRNO());
+ return NULL;
+ }
+
+ /* Print information for list of modules */
+
+ mod_id = LDR_NULL_MODULE;
+
+ for (;;) {
+
+ /* Get information for the next module in the module list. */
+
+ ldr_next_module(process, &mod_id);
+ if (ldr_inq_module(process, mod_id, &info, sizeof(info),
+ &retsize) != 0) {
+ /* No more modules */
+ break;
+ }
+ if (retsize < sizeof(info)) {
+ continue;
+ }
+
+ /*
+ * Get information for each region in the module and check if any
+ * contain the address of this function.
+ */
+
+ for (regno = 0; ; regno++) {
+ if (ldr_inq_region(process, mod_id, regno, &reginfo,
+ sizeof(reginfo), &retsize) != 0) {
+ /* No more regions */
+ break;
+ }
+ if (((unsigned long)reginfo.lri_mapaddr <=
+ (unsigned long)addr) &&
+ (((unsigned long)reginfo.lri_mapaddr + reginfo.lri_size) >
+ (unsigned long)addr)) {
+ /* Found it. */
+ result = PR_Malloc(strlen(info.lmi_name)+1);
+ if (result != NULL) {
+ strcpy(result, info.lmi_name);
+ }
+ return result;
+ }
+ }
+ }
+ PR_SetError(PR_LIBRARY_NOT_LOADED_ERROR, 0);
+ return NULL;
+#elif defined(HPUX) && defined(USE_HPSHL)
+ shl_t handle;
+ struct shl_descriptor desc;
+ char *result;
+
+ handle = shl_load(name, DYNAMIC_PATH, 0L);
+ if (handle == NULL) {
+ PR_SetError(PR_LIBRARY_NOT_LOADED_ERROR, _MD_ERRNO());
+ DLLErrorInternal(_MD_ERRNO());
+ return NULL;
+ }
+ if (shl_gethandle_r(handle, &desc) == -1) {
+ /* should not happen */
+ _PR_MD_MAP_DEFAULT_ERROR(_MD_ERRNO());
+ return NULL;
+ }
+ result = PR_Malloc(strlen(desc.filename)+1);
+ if (result != NULL) {
+ strcpy(result, desc.filename);
+ }
+ return result;
+#elif defined(HPUX) && defined(USE_DLFCN)
+ struct load_module_desc desc;
+ char *result;
+ const char *module_name;
+
+ if (dlmodinfo((unsigned long)addr, &desc, sizeof desc, NULL, 0, 0) == 0) {
+ PR_SetError(PR_LIBRARY_NOT_LOADED_ERROR, _MD_ERRNO());
+ DLLErrorInternal(_MD_ERRNO());
+ return NULL;
+ }
+ module_name = dlgetname(&desc, sizeof desc, NULL, 0, 0);
+ if (module_name == NULL) {
+ /* should not happen */
+ _PR_MD_MAP_DEFAULT_ERROR(_MD_ERRNO());
+ DLLErrorInternal(_MD_ERRNO());
+ return NULL;
+ }
+ result = PR_Malloc(strlen(module_name)+1);
+ if (result != NULL) {
+ strcpy(result, module_name);
+ }
+ return result;
+#elif defined(WIN32)
+ HMODULE handle;
+ char module_name[MAX_PATH];
+ char *result;
+
+ handle = GetModuleHandle(name);
+ if (handle == NULL) {
+ PR_SetError(PR_LIBRARY_NOT_LOADED_ERROR, _MD_ERRNO());
+ DLLErrorInternal(_MD_ERRNO());
+ return NULL;
+ }
+ if (GetModuleFileName(handle, module_name, sizeof module_name) == 0) {
+ /* should not happen */
+ _PR_MD_MAP_DEFAULT_ERROR(_MD_ERRNO());
+ return NULL;
+ }
+ result = PR_Malloc(strlen(module_name)+1);
+ if (result != NULL) {
+ strcpy(result, module_name);
+ }
+ return result;
+#else
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return NULL;
+#endif
+}
diff --git a/pr/src/malloc/prmem.c b/pr/src/malloc/prmem.c
index 0a70b439..c3870ec7 100644
--- a/pr/src/malloc/prmem.c
+++ b/pr/src/malloc/prmem.c
@@ -97,20 +97,79 @@ _PR_DestroyZones(void)
while (mz->head) {
MemBlockHdr *hdr = mz->head;
mz->head = hdr->s.next; /* unlink it */
- pr_ZoneFree(hdr);
+ free(hdr);
mz->elements--;
}
}
}
+ use_zone_allocator = PR_FALSE;
}
+/*
+** pr_FindSymbolInProg
+**
+** Find the specified data symbol in the program and return
+** its address.
+*/
+
+#ifdef USE_DLFCN
+
+#include <dlfcn.h>
+
+static void *
+pr_FindSymbolInProg(const char *name)
+{
+ void *h;
+ void *sym;
+
+ h = dlopen(0, RTLD_LAZY);
+ if (h == NULL)
+ return NULL;
+ sym = dlsym(h, name);
+ (void)dlclose(h);
+ return sym;
+}
+
+#elif defined(USE_HPSHL)
+
+#include <dl.h>
+
+static void *
+pr_FindSymbolInProg(const char *name)
+{
+ shl_t h = NULL;
+ void *sym;
+
+ if (shl_findsym(&h, name, TYPE_DATA, &sym) == -1)
+ return NULL;
+ return sym;
+}
+
+#elif defined(USE_MACH_DYLD)
+
+static void *
+pr_FindSymbolInProg(const char *name)
+{
+ /* FIXME: not implemented */
+ return NULL;
+}
+
+#else
+
+#error "The zone allocator is not supported on this platform"
+
+#endif
+
void
_PR_InitZones(void)
{
int i, j;
char *envp;
+ PRBool *sym;
- if (envp = getenv("NSPR_USE_ZONE_ALLOCATOR")) {
+ if ((sym = (PRBool *)pr_FindSymbolInProg("nspr_use_zone_allocator")) != NULL) {
+ use_zone_allocator = *sym;
+ } else if ((envp = getenv("NSPR_USE_ZONE_ALLOCATOR")) != NULL) {
use_zone_allocator = (atoi(envp) == 1);
}
@@ -275,6 +334,11 @@ pr_ZoneRealloc(void *oldptr, PRUint32 bytes)
PR_ASSERT(mb->s.magic == ZONE_MAGIC);
if (mb->s.magic != ZONE_MAGIC) {
/* Maybe this just came from ordinary malloc */
+#ifdef DEBUG
+ fprintf(stderr,
+ "Warning: reallocing memory block %p from ordinary malloc\n",
+ oldptr);
+#endif
/* We don't know how big it is. But we can fix that. */
oldptr = realloc(oldptr, bytes);
if (!oldptr) {
@@ -329,6 +393,10 @@ pr_ZoneFree(void *ptr)
if (mb->s.magic != ZONE_MAGIC) {
/* maybe this came from ordinary malloc */
+#ifdef DEBUG
+ fprintf(stderr,
+ "Warning: freeing memory block %p from ordinary malloc\n", ptr);
+#endif
free(ptr);
return;
}
@@ -342,7 +410,7 @@ pr_ZoneFree(void *ptr)
if (!mz) {
PR_ASSERT(blockSize > 65536);
/* This block was not in any zone. Just free it. */
- free(ptr);
+ free(mb);
return;
}
PR_ASSERT(mz->blockSize == blockSize);
diff --git a/pr/src/md/beos/bfile.c b/pr/src/md/beos/bfile.c
index e80181cc..6fd6cce9 100644
--- a/pr/src/md/beos/bfile.c
+++ b/pr/src/md/beos/bfile.c
@@ -118,18 +118,45 @@ _MD_make_nonblock (PRFileDesc *fd)
}
+PRStatus
+_MD_set_fd_inheritable (PRFileDesc *fd, PRBool inheritable)
+{
+ int rv;
+
+ rv = fcntl(fd->secret->md.osfd, F_SETFD, inheritable ? 0 : FD_CLOEXEC);
+ if (-1 == rv) {
+ PR_SetError(PR_UNKNOWN_ERROR, _MD_ERRNO());
+ return PR_FAILURE;
+ }
+ return PR_SUCCESS;
+}
+
void
_MD_init_fd_inheritable (PRFileDesc *fd, PRBool imported)
{
- /* XXX this function needs to be implemented */
- fd->secret->inheritable = _PR_TRI_UNKNOWN;
+ if (imported) {
+ fd->secret->inheritable = _PR_TRI_UNKNOWN;
+ } else {
+ int flags = fcntl(fd->secret->md.osfd, F_GETFD, 0);
+ if (flags == -1) {
+ PR_SetError(PR_UNKNOWN_ERROR, _MD_ERRNO());
+ return;
+ }
+ fd->secret->inheritable = (flags & FD_CLOEXEC) ?
+ _PR_TRI_TRUE : _PR_TRI_FALSE;
+ }
}
void
_MD_query_fd_inheritable (PRFileDesc *fd)
{
- /* XXX this function needs to be implemented */
- PR_ASSERT(0);
+ int flags;
+
+ PR_ASSERT(_PR_TRI_UNKNOWN == fd->secret->inheritable);
+ flags = fcntl(fd->secret->md.osfd, F_GETFD, 0);
+ PR_ASSERT(-1 != flags);
+ fd->secret->inheritable = (flags & FD_CLOEXEC) ?
+ _PR_TRI_FALSE : _PR_TRI_TRUE;
}
PRInt32
@@ -223,12 +250,14 @@ _MD_write (PRFileDesc *fd, const void *buf, PRInt32 amount)
return( rv );
}
+#ifndef BONE_VERSION /* Writev moves to bnet.c with BONE */
PRInt32
-_MD_writev (PRFileDesc *fd, struct PRIOVec *iov, PRInt32 iov_size,
+_MD_writev (PRFileDesc *fd, const PRIOVec *iov, PRInt32 iov_size,
PRIntervalTime timeout)
{
return PR_NOT_IMPLEMENTED_ERROR;
}
+#endif
PRInt32
_MD_lseek (PRFileDesc *fd, PRInt32 offset, int whence)
@@ -524,191 +553,281 @@ int rv, err;
}
PRInt32
-_MD_pr_poll (PRPollDesc *pds, PRIntn npds, PRIntervalTime timeout)
+_MD_pr_poll(PRPollDesc *pds, PRIntn npds, PRIntervalTime timeout)
{
- PRInt32 rc = 0;
- fd_set rd, wr;
- struct timeval tv, *tvp = NULL;
+ PRInt32 rv = 0;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
+ /*
+ * This code is almost a duplicate of w32poll.c's _PR_MD_PR_POLL().
+ */
+ fd_set rd, wt, ex;
+ PRFileDesc *bottom;
PRPollDesc *pd, *epd;
- int i = 0, j = 0;
- int maxfd = -1;
- PRInt32 osfd;
- PRInt16 in_flags;
- PRFileDesc *bottom;
+ PRInt32 maxfd = -1, ready, err;
+ PRIntervalTime remaining, elapsed, start;
- /*printf("POLL: entering _MD_pr_poll\n");*/
-
- /*
- * Is it an empty set? If so, just sleep for the timeout and return
- */
- if (npds < 1)
- {
- /*printf("POLL: empty set. exiting _MD_pr_poll\n");*/
- PR_Sleep(timeout);
- return rc;
- }
+ struct timeval tv, *tvp = NULL;
+
+ if (_PR_PENDING_INTERRUPT(me))
+ {
+ me->flags &= ~_PR_INTERRUPT;
+ PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
+ return -1;
+ }
+
+ if (0 == npds) {
+ PR_Sleep(timeout);
+ return rv;
+ }
- FD_ZERO(&rd);
- FD_ZERO(&wr);
+ FD_ZERO(&rd);
+ FD_ZERO(&wt);
+ FD_ZERO(&ex);
- /*
- * first, sort out the new connects, the reads, and the writes
- */
- epd = pds + npds;
- for(pd = pds; pd < epd; pd++)
+ ready = 0;
+ for (pd = pds, epd = pd + npds; pd < epd; pd++)
{
- in_flags = pd->in_flags;
- bottom = pd->fd;
+ PRInt16 in_flags_read = 0, in_flags_write = 0;
+ PRInt16 out_flags_read = 0, out_flags_write = 0;
- if(bottom != 0 && in_flags != 0)
+ if ((NULL != pd->fd) && (0 != pd->in_flags))
{
- while(bottom->lower != 0)
+ if (pd->in_flags & PR_POLL_READ)
{
- bottom = bottom->lower;
+ in_flags_read = (pd->fd->methods->poll)(pd->fd, pd->in_flags & ~PR_POLL_WRITE, &out_flags_read);
}
- osfd = bottom->secret->md.osfd;
-
- if(in_flags & PR_POLL_WRITE || in_flags & PR_POLL_EXCEPT)
+ if (pd->in_flags & PR_POLL_WRITE)
{
- /*printf("POLL: adding to write\n");*/
- FD_SET(osfd, &wr);
- if( osfd > maxfd ) maxfd = osfd;
+ in_flags_write = (pd->fd->methods->poll)(pd->fd, pd->in_flags & ~PR_POLL_READ, &out_flags_write);
+ }
+ if ((0 != (in_flags_read & out_flags_read))
+ || (0 != (in_flags_write & out_flags_write)))
+ {
+ /* this one's ready right now */
+ if (0 == ready)
+ {
+ /*
+ * We will have to return without calling the
+ * system poll/select function. So zero the
+ * out_flags fields of all the poll descriptors
+ * before this one.
+ */
+ PRPollDesc *prev;
+ for (prev = pds; prev < pd; prev++)
+ {
+ prev->out_flags = 0;
+ }
+ }
+ ready += 1;
+ pd->out_flags = out_flags_read | out_flags_write;
}
- if(in_flags & PR_POLL_READ || in_flags & PR_POLL_EXCEPT)
+ else
{
- /*printf("POLL: adding to read\n");*/
- FD_SET(osfd, &rd);
- if( osfd > maxfd ) maxfd = osfd;
+ pd->out_flags = 0; /* pre-condition */
+
+ /* make sure this is an NSPR supported stack */
+ bottom = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
+ PR_ASSERT(NULL != bottom); /* what to do about that? */
+ if ((NULL != bottom)
+ && (_PR_FILEDESC_OPEN == bottom->secret->state))
+ {
+ if (0 == ready)
+ {
+ PRInt32 osfd = bottom->secret->md.osfd;
+ if (osfd > maxfd) maxfd = osfd;
+ if (in_flags_read & PR_POLL_READ)
+ {
+ pd->out_flags |= _PR_POLL_READ_SYS_READ;
+ FD_SET(osfd, &rd);
+ }
+ if (in_flags_read & PR_POLL_WRITE)
+ {
+ pd->out_flags |= _PR_POLL_READ_SYS_WRITE;
+ FD_SET(osfd, &wt);
+ }
+ if (in_flags_write & PR_POLL_READ)
+ {
+ pd->out_flags |= _PR_POLL_WRITE_SYS_READ;
+ FD_SET(osfd, &rd);
+ }
+ if (in_flags_write & PR_POLL_WRITE)
+ {
+ pd->out_flags |= _PR_POLL_WRITE_SYS_WRITE;
+ FD_SET(osfd, &wt);
+ }
+ if (pd->in_flags & PR_POLL_EXCEPT) FD_SET(osfd, &ex);
+ }
+ }
+ else
+ {
+ if (0 == ready)
+ {
+ PRPollDesc *prev;
+ for (prev = pds; prev < pd; prev++)
+ {
+ prev->out_flags = 0;
+ }
+ }
+ ready += 1; /* this will cause an abrupt return */
+ pd->out_flags = PR_POLL_NVAL; /* bogii */
+ }
}
}
-
-
- }
+ else
+ {
+ pd->out_flags = 0;
+ }
+ }
+
+ if (0 != ready) return ready; /* no need to block */
- if(maxfd >= 0)
+ remaining = timeout;
+ start = PR_IntervalNow();
+
+ retry:
+ if (timeout != PR_INTERVAL_NO_TIMEOUT)
+ {
+ PRInt32 ticksPerSecond = PR_TicksPerSecond();
+ tv.tv_sec = remaining / ticksPerSecond;
+ tv.tv_usec = remaining - (ticksPerSecond * tv.tv_sec);
+ tv.tv_usec = (PR_USEC_PER_SEC * tv.tv_usec) / ticksPerSecond;
+ tvp = &tv;
+ }
+
+ ready = _MD_SELECT(maxfd + 1, &rd, &wt, &ex, tvp);
+
+ if (ready == -1 && errno == EINTR)
{
- PRInt32 n;
- do {
- PRIntervalTime start = PR_IntervalNow();
- if (timeout != PR_INTERVAL_NO_TIMEOUT)
+ if (timeout == PR_INTERVAL_NO_TIMEOUT) goto retry;
+ else
+ {
+ elapsed = (PRIntervalTime) (PR_IntervalNow() - start);
+ if (elapsed > timeout) ready = 0; /* timed out */
+ else
{
- /*printf("POLL: timeout = %ld\n", (long) PR_IntervalToMicroseconds(timeout));*/
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(timeout) % PR_USEC_PER_SEC;
- tvp = &tv;
+ remaining = timeout - elapsed;
+ goto retry;
}
+ }
+ }
-
- n = select(maxfd + 1, &rd, &wr, 0, tvp);
- /*printf("POLL: maxfd = %d, select returns %d, errno = %d %s\n", maxfd, n, errno, strerror(errno));*/
- if (n == 0 || (n < 0 && errno == EINTR))
+ /*
+ ** Now to unravel the select sets back into the client's poll
+ ** descriptor list. Is this possibly an area for pissing away
+ ** a few cycles or what?
+ */
+ if (ready > 0)
+ {
+ ready = 0;
+ for (pd = pds, epd = pd + npds; pd < epd; pd++)
+ {
+ PRInt16 out_flags = 0;
+ if ((NULL != pd->fd) && (0 != pd->in_flags))
{
- if (timeout != PR_INTERVAL_NO_TIMEOUT)
- {
- timeout -= PR_IntervalNow() - start;
- if(timeout <= 0)
+ PRInt32 osfd;
+ bottom = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
+ PR_ASSERT(NULL != bottom);
+
+ osfd = bottom->secret->md.osfd;
+
+ if (FD_ISSET(osfd, &rd))
{
- /* timed out */
- n = 0;
+ if (pd->out_flags & _PR_POLL_READ_SYS_READ)
+ out_flags |= PR_POLL_READ;
+ if (pd->out_flags & _PR_POLL_WRITE_SYS_READ)
+ out_flags |= PR_POLL_WRITE;
}
- }
- }
-
- } while(n < 0 && errno == EINTR);
-
- if(n > 0)
- {
- epd = pds + npds;
- for(pd = pds; pd < epd; pd++)
- {
- int selected;
- in_flags = pd->in_flags;
- bottom = pd->fd;
- selected = 0;
-
- if(bottom != 0 && in_flags != 0)
+ if (FD_ISSET(osfd, &wt))
{
- while(bottom->lower != 0)
- {
- bottom = bottom->lower;
- }
- osfd = bottom->secret->md.osfd;
- if (FD_ISSET(osfd, &rd))
- {
- pd->out_flags |= PR_POLL_READ;
- selected++;
- }
- if (FD_ISSET(osfd, &wr))
- {
- pd->out_flags |= PR_POLL_WRITE;
- selected++;
- }
-
- if(selected > 0)
+ if (pd->out_flags & _PR_POLL_READ_SYS_WRITE)
+ out_flags |= PR_POLL_READ;
+ if (pd->out_flags & _PR_POLL_WRITE_SYS_WRITE)
+ out_flags |= PR_POLL_WRITE;
+ }
+ if (FD_ISSET(osfd, &ex)) out_flags |= PR_POLL_EXCEPT;
+
+/* Workaround for nonblocking connects under net_server */
+#ifndef BONE_VERSION
+ if (out_flags)
+ {
+ /* check if it is a pending connect */
+ int i = 0, j = 0;
+ PR_Lock( _connectLock );
+ for( i = 0; i < connectCount; i++ )
{
- rc++;
- /*
- * check if it is a pending connect
- */
- PR_Lock( _connectLock );
- for( i = 0; i < connectCount; i++ )
+ if(connectList[i].osfd == osfd)
{
- if(connectList[i].osfd == osfd)
+ int connectError;
+ int connectResult;
+
+ connectResult = connect(connectList[i].osfd,
+ &connectList[i].addr,
+ connectList[i].addrlen);
+ connectError = errno;
+
+ if(connectResult < 0 )
{
- int connectError;
- int connectResult;
-
- connectResult = connect(connectList[i].osfd,
- &connectList[i].addr,
- connectList[i].addrlen);
- connectError = errno;
-
- if(connectResult < 0 )
+ if(connectError == EINTR || connectError == EWOULDBLOCK ||
+ connectError == EINPROGRESS || connectError == EALREADY)
{
- if(connectError == EINTR || connectError == EWOULDBLOCK
- || connectError == EINPROGRESS || connectError == EALREADY)
- {
- break;
- }
+ break;
}
-
- if(i == (connectCount - 1))
+ }
+
+ if(i == (connectCount - 1))
+ {
+ connectList[i].osfd = -1;
+ } else {
+ for(j = i; j < connectCount; j++ )
{
- connectList[i].osfd = -1;
- } else {
- for(j = i; j < connectCount; j++ )
- {
- memcpy( &connectList[j], &connectList[j+1],
- sizeof(connectList[j]));
- }
+ memcpy( &connectList[j], &connectList[j+1],
+ sizeof(connectList[j]));
}
- connectCount--;
-
- bottom->secret->md.connectReturnValue = connectResult;
- bottom->secret->md.connectReturnError = connectError;
- bottom->secret->md.connectValueValid = PR_TRUE;
- break;
}
+ connectCount--;
+
+ bottom->secret->md.connectReturnValue = connectResult;
+ bottom->secret->md.connectReturnError = connectError;
+ bottom->secret->md.connectValueValid = PR_TRUE;
+ break;
}
-
-
- PR_Unlock( _connectLock );
}
- } else {
- pd->out_flags = 0;
- continue;
+ PR_Unlock( _connectLock );
}
-
+#endif
}
- } else if (n < 0) {
- /* hit error that's not EINTR. */
- rc = -1;
+ pd->out_flags = out_flags;
+ if (out_flags) ready++;
}
+ PR_ASSERT(ready > 0);
}
-
- /*printf("POLL: exiting _MD_pr_poll with %d\n", rc);*/
- return rc;
-}
+ else if (ready < 0)
+ {
+ err = _MD_ERRNO();
+ if (err == EBADF)
+ {
+ /* Find the bad fds */
+ ready = 0;
+ for (pd = pds, epd = pd + npds; pd < epd; pd++)
+ {
+ pd->out_flags = 0;
+ if ((NULL != pd->fd) && (0 != pd->in_flags))
+ {
+ bottom = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
+ if (fcntl(bottom->secret->md.osfd, F_GETFL, 0) == -1)
+ {
+ pd->out_flags = PR_POLL_NVAL;
+ ready++;
+ }
+ }
+ }
+ PR_ASSERT(ready > 0);
+ }
+ else _PR_MD_MAP_SELECT_ERROR(err);
+ }
+
+ return ready;
+} /* _MD_pr_poll */
/*
* File locking.
diff --git a/pr/src/md/beos/bmisc.c b/pr/src/md/beos/bmisc.c
index 634bea11..056d26a9 100644
--- a/pr/src/md/beos/bmisc.c
+++ b/pr/src/md/beos/bmisc.c
@@ -37,8 +37,12 @@
#include <stdlib.h>
PRLock *_connectLock = NULL;
+
+#ifndef BONE_VERSION
+/* Workaround for nonblocking connects under net_server */
PRUint32 connectCount = 0;
ConnectListNode connectList[64];
+#endif
void
_MD_cleanup_before_exit (void)
@@ -63,7 +67,10 @@ _MD_final_init (void)
{
_connectLock = PR_NewLock();
PR_ASSERT(NULL != _connectLock);
+#ifndef BONE_VERSION
+ /* Workaround for nonblocking connects under net_server */
connectCount = 0;
+#endif
}
void
diff --git a/pr/src/md/beos/bmmap.c b/pr/src/md/beos/bmmap.c
index 2af102cc..27759693 100644
--- a/pr/src/md/beos/bmmap.c
+++ b/pr/src/md/beos/bmmap.c
@@ -37,6 +37,7 @@
PR_EXTERN(PRStatus)
_PR_MD_CREATE_FILE_MAP(PRFileMap *fmap, PRInt64 size)
{
+ PR_SetError( PR_NOT_IMPLEMENTED_ERROR, 0 );
return PR_FAILURE;
}
@@ -57,11 +58,13 @@ _PR_MD_MEM_MAP(PRFileMap *fmap, PRInt64 offset, PRUint32 len)
PR_EXTERN(PRStatus)
_PR_MD_MEM_UNMAP(void *addr, PRUint32 size)
{
+ PR_SetError( PR_NOT_IMPLEMENTED_ERROR, 0 );
return PR_FAILURE;
}
PR_EXTERN(PRStatus)
_PR_MD_CLOSE_FILE_MAP(PRFileMap *fmap)
{
+ PR_SetError( PR_NOT_IMPLEMENTED_ERROR, 0 );
return PR_FAILURE;
}
diff --git a/pr/src/md/beos/bnet.c b/pr/src/md/beos/bnet.c
index 86943b3b..2aa0194f 100644
--- a/pr/src/md/beos/bnet.c
+++ b/pr/src/md/beos/bnet.c
@@ -1,5 +1,5 @@
/* -*- Mode: C++; c-basic-offset: 4 -*- */
-/*
+/*
* 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
@@ -49,6 +49,7 @@
*/
#define _PRSockLen_t int
+
/*
** Global lock variable used to bracket calls into rusty libraries that
** aren't thread safe (like libc, libX, etc).
@@ -56,135 +57,154 @@
static PRLock *_pr_rename_lock = NULL;
static PRMonitor *_pr_Xfe_mon = NULL;
-/*
+#define READ_FD 1
+#define WRITE_FD 2
+
+/*
** This is a support routine to handle "deferred" i/o on sockets.
** It uses "select", so it is subject to all of the BeOS limitations
** (only READ notification, only sockets)
*/
-#define READ_FD 1
-#define WRITE_FD 2
+
+/*
+ * socket_io_wait --
+ *
+ * wait for socket i/o, periodically checking for interrupt
+ *
+ */
static PRInt32 socket_io_wait(PRInt32 osfd, PRInt32 fd_type,
- PRIntervalTime timeout)
+ PRIntervalTime timeout)
{
- PRInt32 rv = -1;
- struct timeval tv, *tvp;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- PRIntervalTime epoch, now, elapsed, remaining;
- PRInt32 syserror;
- fd_set rd_wr;
-
- switch (timeout) {
- case PR_INTERVAL_NO_WAIT:
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- break;
- case PR_INTERVAL_NO_TIMEOUT:
- /*
- * This is a special case of the 'default' case below.
- * Please see the comments there.
- */
- tv.tv_sec = _PR_INTERRUPT_CHECK_INTERVAL_SECS;
- tv.tv_usec = 0;
- tvp = &tv;
- FD_ZERO(&rd_wr);
- do {
- FD_SET(osfd, &rd_wr);
- if (fd_type == READ_FD)
- rv = _MD_SELECT(osfd + 1, &rd_wr, NULL, NULL, tvp);
- else
- rv = _MD_SELECT(osfd + 1, NULL, &rd_wr, NULL, tvp);
- if (rv == -1 && (syserror = _MD_ERRNO()) != EINTR) {
- if (syserror == EBADF) {
- PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
- } else {
- PR_SetError(PR_UNKNOWN_ERROR, syserror);
- }
- if( _PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
- rv = -1;
- break;
- }
- break;
- }
- } while (rv == 0 || (rv == -1 && syserror == EINTR));
- break;
- default:
- now = epoch = PR_IntervalNow();
- remaining = timeout;
- tvp = &tv;
- FD_ZERO(&rd_wr);
- do {
- /*
- * We block in _MD_SELECT for at most
- * _PR_INTERRUPT_CHECK_INTERVAL_SECS seconds,
- * so that there is an upper limit on the delay
- * before the interrupt bit is checked.
- */
- tv.tv_sec = PR_IntervalToSeconds(remaining);
- if (tv.tv_sec > _PR_INTERRUPT_CHECK_INTERVAL_SECS) {
- tv.tv_sec = _PR_INTERRUPT_CHECK_INTERVAL_SECS;
- tv.tv_usec = 0;
- } else {
- tv.tv_usec = PR_IntervalToMicroseconds(
- remaining -
- PR_SecondsToInterval(tv.tv_sec));
- }
- FD_SET(osfd, &rd_wr);
- if (fd_type == READ_FD)
- rv = _MD_SELECT(osfd + 1, &rd_wr, NULL, NULL, tvp);
- else
- rv = _MD_SELECT(osfd + 1, NULL, &rd_wr, NULL, tvp);
- /*
- * we don't consider EINTR a real error
- */
- if (rv == -1 && (syserror = _MD_ERRNO()) != EINTR) {
- if (syserror == EBADF) {
- PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
- } else {
- PR_SetError(PR_UNKNOWN_ERROR, syserror);
- }
- break;
- }
- if (_PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
- rv = -1;
- break;
- }
- /*
- * We loop again if _MD_SELECT timed out or got interrupted
- * by a signal, and the timeout deadline has not passed yet.
- */
- if (rv == 0 || (rv == -1 && syserror == EINTR)) {
- /*
- * If _MD_SELECT timed out, we know how much time
- * we spent in blocking, so we can avoid a
- * PR_IntervalNow() call.
- */
- if (rv == 0) {
- now += PR_SecondsToInterval(tv.tv_sec)
- + PR_MicrosecondsToInterval(tv.tv_usec);
- } else {
- now = PR_IntervalNow();
- }
- elapsed = (PRIntervalTime) (now - epoch);
- if (elapsed >= timeout) {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- rv = -1;
- break;
- } else {
- remaining = timeout - elapsed;
- }
- }
- } while (rv == 0 || (rv == -1 && syserror == EINTR));
- break;
- }
- return(rv);
+ PRInt32 rv = -1;
+ struct timeval tv;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
+ PRIntervalTime epoch, now, elapsed, remaining;
+ PRBool wait_for_remaining;
+ PRInt32 syserror;
+ fd_set rd_wr;
+
+ switch (timeout) {
+ case PR_INTERVAL_NO_WAIT:
+ PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
+ break;
+ case PR_INTERVAL_NO_TIMEOUT:
+ /*
+ * This is a special case of the 'default' case below.
+ * Please see the comments there.
+ */
+ tv.tv_sec = _PR_INTERRUPT_CHECK_INTERVAL_SECS;
+ tv.tv_usec = 0;
+ FD_ZERO(&rd_wr);
+ do {
+ FD_SET(osfd, &rd_wr);
+ if (fd_type == READ_FD)
+ rv = _MD_SELECT(osfd + 1, &rd_wr, NULL, NULL, &tv);
+ else
+ rv = _MD_SELECT(osfd + 1, NULL, &rd_wr, NULL, &tv);
+ if (rv == -1 && (syserror = _MD_ERRNO()) != EINTR) {
+#ifdef BONE_VERSION
+ _PR_MD_MAP_SELECT_ERROR(syserror);
+#else
+ if (syserror == EBADF) {
+ PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
+ } else {
+ PR_SetError(PR_UNKNOWN_ERROR, syserror);
+ }
+#endif
+ break;
+ }
+ if (_PR_PENDING_INTERRUPT(me)) {
+ me->flags &= ~_PR_INTERRUPT;
+ PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
+ rv = -1;
+ break;
+ }
+ } while (rv == 0 || (rv == -1 && syserror == EINTR));
+ break;
+ default:
+ now = epoch = PR_IntervalNow();
+ remaining = timeout;
+ FD_ZERO(&rd_wr);
+ do {
+ /*
+ * We block in _MD_SELECT for at most
+ * _PR_INTERRUPT_CHECK_INTERVAL_SECS seconds,
+ * so that there is an upper limit on the delay
+ * before the interrupt bit is checked.
+ */
+ wait_for_remaining = PR_TRUE;
+ tv.tv_sec = PR_IntervalToSeconds(remaining);
+ if (tv.tv_sec > _PR_INTERRUPT_CHECK_INTERVAL_SECS) {
+ wait_for_remaining = PR_FALSE;
+ tv.tv_sec = _PR_INTERRUPT_CHECK_INTERVAL_SECS;
+ tv.tv_usec = 0;
+ } else {
+ tv.tv_usec = PR_IntervalToMicroseconds(
+ remaining -
+ PR_SecondsToInterval(tv.tv_sec));
+ }
+ FD_SET(osfd, &rd_wr);
+ if (fd_type == READ_FD)
+ rv = _MD_SELECT(osfd + 1, &rd_wr, NULL, NULL, &tv);
+ else
+ rv = _MD_SELECT(osfd + 1, NULL, &rd_wr, NULL, &tv);
+ /*
+ * we don't consider EINTR a real error
+ */
+ if (rv == -1 && (syserror = _MD_ERRNO()) != EINTR) {
+#ifdef BONE_VERSION
+ _PR_MD_MAP_SELECT_ERROR(syserror);
+#else
+ if (syserror == EBADF) {
+ PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
+ } else {
+ PR_SetError(PR_UNKNOWN_ERROR, syserror);
+ }
+#endif
+ break;
+ }
+ if (_PR_PENDING_INTERRUPT(me)) {
+ me->flags &= ~_PR_INTERRUPT;
+ PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
+ rv = -1;
+ break;
+ }
+ /*
+ * We loop again if _MD_SELECT timed out or got interrupted
+ * by a signal, and the timeout deadline has not passed yet.
+ */
+ if (rv == 0 || (rv == -1 && syserror == EINTR)) {
+ /*
+ * If _MD_SELECT timed out, we know how much time
+ * we spent in blocking, so we can avoid a
+ * PR_IntervalNow() call.
+ */
+ if (rv == 0) {
+ if (wait_for_remaining) {
+ now += remaining;
+ } else {
+ now += PR_SecondsToInterval(tv.tv_sec)
+ + PR_MicrosecondsToInterval(tv.tv_usec);
+ }
+ } else {
+ now = PR_IntervalNow();
+ }
+ elapsed = (PRIntervalTime) (now - epoch);
+ if (elapsed >= timeout) {
+ PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
+ rv = -1;
+ break;
+ } else {
+ remaining = timeout - elapsed;
+ }
+ }
+ } while (rv == 0 || (rv == -1 && syserror == EINTR));
+ break;
+ }
+ return(rv);
}
-
-
PRInt32
_MD_recv (PRFileDesc *fd, void *buf, PRInt32 amount, PRInt32 flags,
PRIntervalTime timeout)
@@ -193,33 +213,44 @@ _MD_recv (PRFileDesc *fd, void *buf, PRInt32 amount, PRInt32 flags,
PRInt32 rv, err;
PRThread *me = _PR_MD_CURRENT_THREAD();
+#ifndef BONE_VERSION
if (fd->secret->md.sock_state & BE_SOCK_SHUTDOWN_READ) {
- _PR_MD_MAP_RECV_ERROR(EPIPE);
- return -1;
+ _PR_MD_MAP_RECV_ERROR(EPIPE);
+ return -1;
}
+#endif
+
+#ifdef BONE_VERSION
+ /*
+ ** Gah, stupid hack. If reading a zero amount, instantly return success.
+ ** BONE beta 6 returns EINVAL for reads of zero bytes, which parts of
+ ** mozilla use to check for socket availability.
+ */
+
+ if( 0 == amount ) return(0);
+#endif
while ((rv = recv(osfd, buf, amount, flags)) == -1) {
- err = _MD_ERRNO();
+ err = _MD_ERRNO();
- if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
- if (fd->secret->nonblocking) {
- break;
- }
- /* If socket was supposed to be blocking,
- wait a while for the condition to be
- satisfied. */
- if ((rv = socket_io_wait(osfd, READ_FD, timeout)) < 0)
- goto done;
- } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))){
- continue;
+ if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
+ break;
+ }
+ /* If socket was supposed to be blocking,
+ wait a while for the condition to be
+ satisfied. */
+ if ((rv = socket_io_wait(osfd, READ_FD, timeout)) < 0)
+ goto done;
+ } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))){
+ continue;
- } else {
- break;
- }
+ } else
+ break;
}
if (rv < 0) {
- _PR_MD_MAP_RECV_ERROR(err);
+ _PR_MD_MAP_RECV_ERROR(err);
}
done:
@@ -235,31 +266,38 @@ _MD_recvfrom (PRFileDesc *fd, void *buf, PRInt32 amount, PRIntn flags,
PRThread *me = _PR_MD_CURRENT_THREAD();
while ((*addrlen = PR_NETADDR_SIZE(addr)),
- ((rv = recvfrom(osfd, buf, amount, flags,
- (struct sockaddr *) addr,
- (_PRSockLen_t *)addrlen)) == -1)) {
- err = _MD_ERRNO();
-
- if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
- if (fd->secret->nonblocking) {
- break;
- }
+ ((rv = recvfrom(osfd, buf, amount, flags,
+ (struct sockaddr *) addr,
+ (_PRSockLen_t *)addrlen)) == -1)) {
+ err = _MD_ERRNO();
+
+ if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
+ break;
+ }
if ((rv = socket_io_wait(osfd, READ_FD, timeout)) < 0)
goto done;
- } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))) {
- continue;
-
- } else {
- break;
- }
+ } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))) {
+ continue;
+ } else {
+ break;
+ }
}
if (rv < 0) {
- _PR_MD_MAP_RECVFROM_ERROR(err);
+ _PR_MD_MAP_RECVFROM_ERROR(err);
}
done:
+#ifdef _PR_HAVE_SOCKADDR_LEN
+ if (rv != -1) {
+ /* ignore the sa_len field of struct sockaddr */
+ if (addr) {
+ addr->raw.family = ((struct sockaddr *) addr)->sa_family;
+ }
+ }
+#endif /* _PR_HAVE_SOCKADDR_LEN */
return(rv);
}
@@ -271,46 +309,56 @@ _MD_send (PRFileDesc *fd, const void *buf, PRInt32 amount, PRInt32 flags,
PRInt32 rv, err;
PRThread *me = _PR_MD_CURRENT_THREAD();
+#ifndef BONE_VERSION
if (fd->secret->md.sock_state & BE_SOCK_SHUTDOWN_WRITE)
{
- _PR_MD_MAP_SEND_ERROR(EPIPE);
- return -1;
+ _PR_MD_MAP_SEND_ERROR(EPIPE);
+ return -1;
}
+#endif
while ((rv = send(osfd, buf, amount, flags)) == -1) {
- err = _MD_ERRNO();
+ err = _MD_ERRNO();
- if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
- if (fd->secret->nonblocking) {
- break;
- }
+ if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
+ break;
+ }
- if( _PR_PENDING_INTERRUPT(me)) {
+#ifndef BONE_VERSION
+ if( _PR_PENDING_INTERRUPT(me)) {
me->flags &= ~_PR_INTERRUPT;
PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
return -1;
}
- /* in UNIX implementations, you could do a socket_io_wait here.
- * but since BeOS doesn't yet support WRITE notification in select,
- * you're spanked.
- */
- snooze( 10000L );
- continue;
-
- } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))) {
- continue;
+ /* in UNIX implementations, you could do a socket_io_wait here.
+ * but since BeOS doesn't yet support WRITE notification in select,
+ * you're spanked.
+ */
+ snooze( 10000L );
+ continue;
+#else /* BONE_VERSION */
+ if ((rv = socket_io_wait(osfd, WRITE_FD, timeout))< 0)
+ goto done;
+#endif
+
+ } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))) {
+ continue;
- } else {
- break;
- }
+ } else {
+ break;
+ }
}
if (rv < 0) {
- _PR_MD_MAP_SEND_ERROR(err);
+ _PR_MD_MAP_SEND_ERROR(err);
}
+#ifdef BONE_VERSION
+done:
+#endif
return(rv);
}
@@ -321,32 +369,97 @@ _MD_sendto (PRFileDesc *fd, const void *buf, PRInt32 amount, PRIntn flags,
PRInt32 osfd = fd->secret->md.osfd;
PRInt32 rv, err;
PRThread *me = _PR_MD_CURRENT_THREAD();
+#ifdef _PR_HAVE_SOCKADDR_LEN
+ PRNetAddr addrCopy;
+
+ addrCopy = *addr;
+ ((struct sockaddr *) &addrCopy)->sa_len = addrlen;
+ ((struct sockaddr *) &addrCopy)->sa_family = addr->raw.family;
while ((rv = sendto(osfd, buf, amount, flags,
- (struct sockaddr *) addr, addrlen)) == -1) {
- err = _MD_ERRNO();
+ (struct sockaddr *) &addrCopy, addrlen)) == -1) {
+#else
+ while ((rv = sendto(osfd, buf, amount, flags,
+ (struct sockaddr *) addr, addrlen)) == -1) {
+#endif
+ err = _MD_ERRNO();
- if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
- if (fd->secret->nonblocking) {
- break;
- }
+ if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
+ break;
+ }
- printf( "This should be a blocking sendto call!!!\n" );
- } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))) {
- continue;
+#ifdef BONE_VERSION
+ if ((rv = socket_io_wait(osfd, WRITE_FD, timeout))< 0)
+ goto done;
+#endif
+ } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))) {
+ continue;
- } else {
- break;
- }
+ } else {
+ break;
+ }
}
if (rv < 0) {
- _PR_MD_MAP_SENDTO_ERROR(err);
+ _PR_MD_MAP_SENDTO_ERROR(err);
}
+#ifdef BONE_VERSION
+done:
+#endif
+ return(rv);
+}
+
+#ifdef BONE_VERSION
+
+PRInt32 _MD_writev(
+ PRFileDesc *fd, const PRIOVec *iov,
+ PRInt32 iov_size, PRIntervalTime timeout)
+{
+ PRInt32 rv, err;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
+ PRInt32 index, amount = 0;
+ PRInt32 osfd = fd->secret->md.osfd;
+
+ /*
+ * Calculate the total number of bytes to be sent; needed for
+ * optimization later.
+ * We could avoid this if this number was passed in; but it is
+ * probably not a big deal because iov_size is usually small (less than
+ * 3)
+ */
+ if (!fd->secret->nonblocking) {
+ for (index=0; index<iov_size; index++) {
+ amount += iov[index].iov_len;
+ }
+ }
+
+ while ((rv = writev(osfd, (const struct iovec*)iov, iov_size)) == -1) {
+ err = _MD_ERRNO();
+ if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
+ break;
+ }
+ if ((rv = socket_io_wait(osfd, WRITE_FD, timeout))<0)
+ goto done;
+
+ } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))){
+ continue;
+ } else {
+ break;
+ }
+ }
+
+ if (rv < 0) {
+ _PR_MD_MAP_WRITEV_ERROR(err);
+ }
+done:
return(rv);
}
+#endif /* BONE_VERSION */
+
PRInt32
_MD_accept (PRFileDesc *fd, PRNetAddr *addr, PRUint32 *addrlen,
PRIntervalTime timeout)
@@ -356,42 +469,39 @@ _MD_accept (PRFileDesc *fd, PRNetAddr *addr, PRUint32 *addrlen,
PRThread *me = _PR_MD_CURRENT_THREAD();
while ((rv = accept(osfd, (struct sockaddr *) addr,
- (_PRSockLen_t *)addrlen)) == -1) {
- err = _MD_ERRNO();
-
- if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
- if (fd->secret->nonblocking) {
- break;
- }
- /* If it's SUPPOSED to be a blocking thread, wait
- * a while to see if the triggering condition gets
- * satisfied.
- */
- /* Assume that we're always using a native thread */
- if ((rv = socket_io_wait(osfd, READ_FD, timeout)) < 0)
- goto done;
- } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))) {
- continue;
- } else {
- break;
- }
- }
-
- if (addr) addr->raw.family = AF_INET;
+ (_PRSockLen_t *)addrlen)) == -1) {
+ err = _MD_ERRNO();
+ if ((err == EAGAIN) || (err == EWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
+ break;
+ }
+ /* If it's SUPPOSED to be a blocking thread, wait
+ * a while to see if the triggering condition gets
+ * satisfied.
+ */
+ /* Assume that we're always using a native thread */
+ if ((rv = socket_io_wait(osfd, READ_FD, timeout)) < 0)
+ goto done;
+ } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))) {
+ continue;
+ } else {
+ break;
+ }
+ }
if (rv < 0) {
- _PR_MD_MAP_ACCEPT_ERROR(err);
+ _PR_MD_MAP_ACCEPT_ERROR(err);
+ } else if (addr != NULL) {
+ /* bug 134099 */
+ err = getpeername(rv, (struct sockaddr *) addr, (_PRSockLen_t *)addrlen);
}
done:
#ifdef _PR_HAVE_SOCKADDR_LEN
if (rv != -1) {
- /* Mask off the first byte of struct sockaddr (the length field) */
- if (addr) {
- *((unsigned char *) addr) = 0;
-#ifdef IS_LITTLE_ENDIAN
- addr->raw.family = ntohs(addr->raw.family);
-#endif
- }
+ /* Mask off the first byte of struct sockaddr (the length field) */
+ if (addr) {
+ addr->raw.family = ((struct sockaddr *) addr)->sa_family;
+ }
}
#endif /* _PR_HAVE_SOCKADDR_LEN */
return(rv);
@@ -401,62 +511,118 @@ PRInt32
_MD_connect (PRFileDesc *fd, const PRNetAddr *addr, PRUint32 addrlen,
PRIntervalTime timeout)
{
- PRInt32 osfd = fd->secret->md.osfd;
PRInt32 rv, err;
PRThread *me = _PR_MD_CURRENT_THREAD();
+ PRInt32 osfd = fd->secret->md.osfd;
+#ifndef BONE_VERSION
fd->secret->md.connectValueValid = PR_FALSE;
+#endif
+#ifdef _PR_HAVE_SOCKADDR_LEN
+ PRNetAddr addrCopy;
+
+ addrCopy = *addr;
+ ((struct sockaddr *) &addrCopy)->sa_len = addrlen;
+ ((struct sockaddr *) &addrCopy)->sa_family = addr->raw.family;
+#endif
+
+ /* (Copied from unix.c)
+ * We initiate the connection setup by making a nonblocking connect()
+ * call. If the connect() call fails, there are two cases we handle
+ * specially:
+ * 1. The connect() call was interrupted by a signal. In this case
+ * we simply retry connect().
+ * 2. The NSPR socket is nonblocking and connect() fails with
+ * EINPROGRESS. We first wait until the socket becomes writable.
+ * Then we try to find out whether the connection setup succeeded
+ * or failed.
+ */
retry:
+#ifdef _PR_HAVE_SOCKADDR_LEN
+ if ((rv = connect(osfd, (struct sockaddr *)&addrCopy, addrlen)) == -1) {
+#else
if ((rv = connect(osfd, (struct sockaddr *)addr, addrlen)) == -1) {
+#endif
err = _MD_ERRNO();
- fd->secret->md.connectReturnValue = rv;
- fd->secret->md.connectReturnError = err;
- fd->secret->md.connectValueValid = PR_TRUE;
-
- if( err == EINTR ) {
+#ifndef BONE_VERSION
+ fd->secret->md.connectReturnValue = rv;
+ fd->secret->md.connectReturnError = err;
+ fd->secret->md.connectValueValid = PR_TRUE;
+#endif
+ if( err == EINTR ) {
- if( _PR_PENDING_INTERRUPT(me)) {
+ if( _PR_PENDING_INTERRUPT(me)) {
- me->flags &= ~_PR_INTERRUPT;
+ me->flags &= ~_PR_INTERRUPT;
PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
return -1;
}
- snooze( 100000L );
+#ifndef BONE_VERSION
+ snooze( 100000L );
+#endif
goto retry;
}
+#ifndef BONE_VERSION
if(!fd->secret->nonblocking && ((err == EINPROGRESS) || (err==EAGAIN) || (err==EALREADY))) {
- /*
- ** There's no timeout on this connect, but that's not
- ** a big deal, since the connect times out anyways
- ** after 30 seconds. Just sleep for 1/10th of a second
- ** and retry until we go through or die.
- */
+ /*
+ ** There's no timeout on this connect, but that's not
+ ** a big deal, since the connect times out anyways
+ ** after 30 seconds. Just sleep for 1/10th of a second
+ ** and retry until we go through or die.
+ */
- if( _PR_PENDING_INTERRUPT(me)) {
+ if( _PR_PENDING_INTERRUPT(me)) {
me->flags &= ~_PR_INTERRUPT;
PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
return -1;
- }
+ }
+
+ goto retry;
+ }
- goto retry;
- }
+ if( fd->secret->nonblocking && ((err == EAGAIN) || (err == EINPROGRESS))) {
+ PR_Lock(_connectLock);
+ if (connectCount < sizeof(connectList)/sizeof(connectList[0])) {
+ connectList[connectCount].osfd = osfd;
+ memcpy(&connectList[connectCount].addr, addr, addrlen);
+ connectList[connectCount].addrlen = addrlen;
+ connectList[connectCount].timeout = timeout;
+ connectCount++;
+ PR_Unlock(_connectLock);
+ _PR_MD_MAP_CONNECT_ERROR(err);
+ } else {
+ PR_Unlock(_connectLock);
+ PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, 0);
+ }
+ return rv;
+ }
+#else /* BONE_VERSION */
+ if(!fd->secret->nonblocking && (err == EINTR)) {
+
+ rv = socket_io_wait(osfd, WRITE_FD, timeout);
+ if (rv == -1) {
+ return -1;
+ }
- if( fd->secret->nonblocking && ((err == EAGAIN) || (err == EINPROGRESS))) {
- PR_Lock(_connectLock);
- connectList[connectCount].osfd = osfd;
- memcpy(&connectList[connectCount].addr, addr, addrlen);
- connectList[connectCount].addrlen = addrlen;
- connectList[connectCount].timeout = timeout;
- connectCount++;
- PR_Unlock(_connectLock);
- _PR_MD_MAP_CONNECT_ERROR(err);
- return rv;
- }
+ PR_ASSERT(rv == 1);
+ if (_PR_PENDING_INTERRUPT(me)) {
+ me->flags &= ~_PR_INTERRUPT;
+ PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
+ return -1;
+ }
+ err = _MD_beos_get_nonblocking_connect_error(osfd);
+ if (err != 0) {
+ _PR_MD_MAP_CONNECT_ERROR(err);
+ return -1;
+ }
+ return 0;
+ }
+#endif
- _PR_MD_MAP_CONNECT_ERROR(err);
+ _PR_MD_MAP_CONNECT_ERROR(err);
}
return rv;
@@ -466,9 +632,16 @@ PRInt32
_MD_bind (PRFileDesc *fd, const PRNetAddr *addr, PRUint32 addrlen)
{
PRInt32 rv, err;
+#ifdef _PR_HAVE_SOCKADDR_LEN
+ PRNetAddr addrCopy;
+ addrCopy = *addr;
+ ((struct sockaddr *) &addrCopy)->sa_len = addrlen;
+ ((struct sockaddr *) &addrCopy)->sa_family = addr->raw.family;
+ rv = bind(fd->secret->md.osfd, (struct sockaddr *) &addrCopy, (int )addrlen);
+#else
rv = bind(fd->secret->md.osfd, (struct sockaddr *) addr, (int )addrlen);
-
+#endif
if (rv < 0) {
err = _MD_ERRNO();
_PR_MD_MAP_BIND_ERROR(err);
@@ -482,12 +655,14 @@ _MD_listen (PRFileDesc *fd, PRIntn backlog)
{
PRInt32 rv, err;
+#ifndef BONE_VERSION
/* Bug workaround! Setting listen to 0 on Be accepts no connections.
** On most UN*Xes this sets the default.
*/
if( backlog == 0 ) backlog = 5;
-
+#endif
+
rv = listen(fd->secret->md.osfd, backlog);
if (rv < 0) {
err = _MD_ERRNO();
@@ -502,15 +677,24 @@ _MD_shutdown (PRFileDesc *fd, PRIntn how)
{
PRInt32 rv, err;
+#ifndef BONE_VERSION
if (how == PR_SHUTDOWN_SEND)
- fd->secret->md.sock_state = BE_SOCK_SHUTDOWN_WRITE;
+ fd->secret->md.sock_state = BE_SOCK_SHUTDOWN_WRITE;
else if (how == PR_SHUTDOWN_RCV)
- fd->secret->md.sock_state = BE_SOCK_SHUTDOWN_READ;
+ fd->secret->md.sock_state = BE_SOCK_SHUTDOWN_READ;
else if (how == PR_SHUTDOWN_BOTH) {
- fd->secret->md.sock_state = (BE_SOCK_SHUTDOWN_WRITE | BE_SOCK_SHUTDOWN_READ);
+ fd->secret->md.sock_state = (BE_SOCK_SHUTDOWN_WRITE | BE_SOCK_SHUTDOWN_READ);
}
return 0;
+#else /* BONE_VERSION */
+ rv = shutdown(fd->secret->md.osfd, how);
+ if (rv < 0) {
+ err = _MD_ERRNO();
+ _PR_MD_MAP_SHUTDOWN_ERROR(err);
+ }
+ return(rv);
+#endif
}
PRInt32
@@ -522,7 +706,11 @@ _MD_socketpair (int af, int type, int flags, PRInt32 *osfd)
PRInt32
_MD_close_socket (PRInt32 osfd)
{
+#ifdef BONE_VERSION
+ close( osfd );
+#else
closesocket( osfd );
+#endif
}
PRStatus
@@ -532,7 +720,14 @@ _MD_getsockname (PRFileDesc *fd, PRNetAddr *addr, PRUint32 *addrlen)
rv = getsockname(fd->secret->md.osfd,
(struct sockaddr *) addr, (_PRSockLen_t *)addrlen);
-
+#ifdef _PR_HAVE_SOCKADDR_LEN
+ if (rv == 0) {
+ /* ignore the sa_len field of struct sockaddr */
+ if (addr) {
+ addr->raw.family = ((struct sockaddr *) addr)->sa_family;
+ }
+ }
+#endif /* _PR_HAVE_SOCKADDR_LEN */
if (rv < 0) {
err = _MD_ERRNO();
_PR_MD_MAP_GETSOCKNAME_ERROR(err);
@@ -560,9 +755,6 @@ PRStatus
_MD_getsockopt (PRFileDesc *fd, PRInt32 level,
PRInt32 optname, char* optval, PRInt32* optlen)
{
- return PR_NOT_IMPLEMENTED_ERROR;
-
-#if 0
PRInt32 rv, err;
rv = getsockopt(fd->secret->md.osfd, level, optname,
@@ -573,7 +765,6 @@ _MD_getsockopt (PRFileDesc *fd, PRInt32 level,
}
return rv==0?PR_SUCCESS:PR_FAILURE;
-#endif
}
PRStatus
@@ -597,6 +788,7 @@ _MD_accept_read (PRFileDesc *sd, PRInt32 *newSock, PRNetAddr **raddr,
return PR_NOT_IMPLEMENTED_ERROR;
}
+#ifndef BONE_VERSION
PRInt32
_MD_socket (int af, int type, int flags)
{
@@ -606,17 +798,43 @@ _MD_socket (int af, int type, int flags)
if( -1 == osfd ) {
- err = _MD_ERRNO();
- _PR_MD_MAP_SOCKET_ERROR( err );
+ err = _MD_ERRNO();
+ _PR_MD_MAP_SOCKET_ERROR( err );
}
return( osfd );
}
+#else
+PRInt32
+_MD_socket(PRInt32 domain, PRInt32 type, PRInt32 proto)
+{
+ PRInt32 osfd, err;
+
+ osfd = socket(domain, type, proto);
+
+ if (osfd == -1) {
+ err = _MD_ERRNO();
+ _PR_MD_MAP_SOCKET_ERROR(err);
+ }
+
+ return(osfd);
+}
+#endif
PRInt32
_MD_socketavailable (PRFileDesc *fd)
{
+#ifdef BONE_VERSION
+ PRInt32 result;
+
+ if (ioctl(fd->secret->md.osfd, FIONREAD, &result) < 0) {
+ _PR_MD_MAP_SOCKETAVAILABLE_ERROR(_MD_ERRNO());
+ return -1;
+ }
+ return result;
+#else
return PR_NOT_IMPLEMENTED_ERROR;
+#endif
}
PRInt32
@@ -628,32 +846,25 @@ _MD_get_socket_error (void)
PRStatus
_MD_gethostname (char *name, PRUint32 namelen)
{
-PRInt32 rv, err;
+ PRInt32 rv, err;
rv = gethostname(name, namelen);
if (rv == 0)
{
- err = _MD_ERRNO();
- _PR_MD_MAP_GETHOSTNAME_ERROR(err);
- return PR_FAILURE;
+ err = _MD_ERRNO();
+ _PR_MD_MAP_GETHOSTNAME_ERROR(err);
+ return PR_FAILURE;
}
return PR_SUCCESS;
}
+#ifndef BONE_VERSION
PRInt32
_MD_beos_get_nonblocking_connect_error(PRFileDesc *fd)
{
int rv;
int flags = 0;
- if( fd->secret->md.connectValueValid == PR_TRUE )
-
- if( fd->secret->md.connectReturnValue == -1 )
-
- return fd->secret->md.connectReturnError;
- else
- return 0; /* No error */
-
rv = recv(fd->secret->md.osfd, NULL, 0, flags);
PR_ASSERT(-1 == rv || 0 == rv);
if (-1 == rv && errno != EAGAIN && errno != EWOULDBLOCK) {
@@ -661,3 +872,17 @@ _MD_beos_get_nonblocking_connect_error(PRFileDesc *fd)
}
return 0; /* no error */
}
+#else
+PRInt32
+_MD_beos_get_nonblocking_connect_error(int osfd)
+{
+ return PR_NOT_IMPLEMENTED_ERROR;
+ // int err;
+ // _PRSockLen_t optlen = sizeof(err);
+ // if (getsockopt(osfd, SOL_SOCKET, SO_ERROR, (char *) &err, &optlen) == -1) {
+ // return errno;
+ // } else {
+ // return err;
+ // }
+}
+#endif /* BONE_VERSION */
diff --git a/pr/src/md/beos/bproc.c b/pr/src/md/beos/bproc.c
index 5d9ac0a5..54ccaa0f 100644
--- a/pr/src/md/beos/bproc.c
+++ b/pr/src/md/beos/bproc.c
@@ -1,4 +1,4 @@
-/* -*- Mode: C++; c-basic-offset: 4 -*- */
+/* -*- Mode: C++; tab-width: 8; c-basic-offset: 8 -*- */
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
@@ -33,28 +33,202 @@
*/
#include "primpl.h"
+#include <stdio.h>
+#include <signal.h>
+
+#define _PR_SIGNALED_EXITSTATUS 256
PRProcess*
_MD_create_process (const char *path, char *const *argv,
char *const *envp, const PRProcessAttr *attr)
{
- return NULL;
+ PRProcess *process;
+ int nEnv, idx;
+ char *const *childEnvp;
+ char **newEnvp = NULL;
+ int flags;
+
+ process = PR_NEW(PRProcess);
+ if (!process) {
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
+ return NULL;
+ }
+
+ childEnvp = envp;
+ if (attr && attr->fdInheritBuffer) {
+ if (NULL == childEnvp) {
+ childEnvp = environ;
+ }
+ for (nEnv = 0; childEnvp[nEnv]; nEnv++) {
+ }
+ newEnvp = (char **) PR_MALLOC((nEnv + 2) * sizeof(char *));
+ if (NULL == newEnvp) {
+ PR_DELETE(process);
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
+ return NULL;
+ }
+ for (idx = 0; idx < nEnv; idx++) {
+ newEnvp[idx] = childEnvp[idx];
+ }
+ newEnvp[idx++] = attr->fdInheritBuffer;
+ newEnvp[idx] = NULL;
+ childEnvp = newEnvp;
+ }
+
+ process->md.pid = fork();
+
+ if ((pid_t) -1 == process->md.pid) {
+ PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, errno);
+ PR_DELETE(process);
+ if (newEnvp) {
+ PR_DELETE(newEnvp);
+ }
+ return NULL;
+ } else if (0 == process->md.pid) { /* the child process */
+ /*
+ * If the child process needs to exit, it must call _exit().
+ * Do not call exit(), because exit() will flush and close
+ * the standard I/O file descriptors, and hence corrupt
+ * the parent process's standard I/O data structures.
+ */
+
+ if (attr) {
+ /* the osfd's to redirect stdin, stdout, and stderr to */
+ int in_osfd = -1, out_osfd = -1, err_osfd = -1;
+
+ if (attr->stdinFd
+ && attr->stdinFd->secret->md.osfd != 0) {
+ in_osfd = attr->stdinFd->secret->md.osfd;
+ if (dup2(in_osfd, 0) != 0) {
+ _exit(1); /* failed */
+ }
+ flags = fcntl(0, F_GETFL, 0);
+ if (flags & O_NONBLOCK) {
+ fcntl(0, F_SETFL, flags & ~O_NONBLOCK);
+ }
+ }
+ if (attr->stdoutFd
+ && attr->stdoutFd->secret->md.osfd != 1) {
+ out_osfd = attr->stdoutFd->secret->md.osfd;
+ if (dup2(out_osfd, 1) != 1) {
+ _exit(1); /* failed */
+ }
+ flags = fcntl(1, F_GETFL, 0);
+ if (flags & O_NONBLOCK) {
+ fcntl(1, F_SETFL, flags & ~O_NONBLOCK);
+ }
+ }
+ if (attr->stderrFd
+ && attr->stderrFd->secret->md.osfd != 2) {
+ err_osfd = attr->stderrFd->secret->md.osfd;
+ if (dup2(err_osfd, 2) != 2) {
+ _exit(1); /* failed */
+ }
+ flags = fcntl(2, F_GETFL, 0);
+ if (flags & O_NONBLOCK) {
+ fcntl(2, F_SETFL, flags & ~O_NONBLOCK);
+ }
+ }
+ if (in_osfd != -1) {
+ close(in_osfd);
+ }
+ if (out_osfd != -1 && out_osfd != in_osfd) {
+ close(out_osfd);
+ }
+ if (err_osfd != -1 && err_osfd != in_osfd
+ && err_osfd != out_osfd) {
+ close(err_osfd);
+ }
+ if (attr->currentDirectory) {
+ if (chdir(attr->currentDirectory) < 0) {
+ _exit(1); /* failed */
+ }
+ }
+ }
+
+ if (childEnvp) {
+ (void)execve(path, argv, childEnvp);
+ } else {
+ /* Inherit the environment of the parent. */
+ (void)execv(path, argv);
+ }
+ /* Whoops! It returned. That's a bad sign. */
+ _exit(1);
+ }
+
+ if (newEnvp) {
+ PR_DELETE(newEnvp);
+ }
+
+ return process;
}
PRStatus
_MD_detach_process (PRProcess *process)
{
- return PR_NOT_IMPLEMENTED_ERROR;
+ /* If we kept a process table like unix does,
+ * we'd remove the entry here.
+ * Since we dont', just delete the process variable
+ */
+ PR_DELETE(process);
+ return PR_SUCCESS;
}
PRStatus
_MD_wait_process (PRProcess *process, PRInt32 *exitCode)
{
- return PR_NOT_IMPLEMENTED_ERROR;
+ PRStatus retVal = PR_SUCCESS;
+ int ret, status;
+
+ /* Ignore interruptions */
+ do {
+ ret = waitpid(process->md.pid, &status, 0);
+ } while (ret == -1 && errno == EINTR);
+
+ /*
+ * waitpid() cannot return 0 because we did not invoke it
+ * with the WNOHANG option.
+ */
+ PR_ASSERT(0 != ret);
+
+ if (ret < 0) {
+ PR_SetError(PR_UNKNOWN_ERROR, _MD_ERRNO());
+ return PR_FAILURE;
+ }
+
+ /* If child process exited normally, return child exit code */
+ if (WIFEXITED(status)) {
+ *exitCode = WEXITSTATUS(status);
+ } else {
+ PR_ASSERT(WIFSIGNALED(status));
+ *exitCode = _PR_SIGNALED_EXITSTATUS;
+ }
+
+ PR_DELETE(process);
+ return PR_SUCCESS;
}
PRStatus
_MD_kill_process (PRProcess *process)
{
- return PR_NOT_IMPLEMENTED_ERROR;
+ PRErrorCode prerror;
+ PRInt32 oserror;
+
+ if (kill(process->md.pid, SIGKILL) == 0) {
+ return PR_SUCCESS;
+ }
+ oserror = errno;
+ switch (oserror) {
+ case EPERM:
+ prerror = PR_NO_ACCESS_RIGHTS_ERROR;
+ break;
+ case ESRCH:
+ prerror = PR_INVALID_ARGUMENT_ERROR;
+ break;
+ default:
+ prerror = PR_UNKNOWN_ERROR;
+ break;
+ }
+ PR_SetError(prerror, oserror);
+ return PR_FAILURE;
}
diff --git a/pr/src/md/mac/macdll.c b/pr/src/md/mac/macdll.c
index 2cfe79db..23b32759 100644
--- a/pr/src/md/mac/macdll.c
+++ b/pr/src/md/mac/macdll.c
@@ -218,7 +218,7 @@ GetSharedLibraryFilterProc(const CInfoPBRec* const inCpb, Boolean* inWantQuit, v
// see if this symbol is in this fragment
if (LibInPefContainer(&fragSpec, pFilterData->inName, &codeOffset, &codeLength))
- tempErr = GetDiskFragment(&fragSpec, codeOffset, codeLength, pFilterData->inName, kLoadCFrag, &pFilterData->outID, &pFilterData->outAddress, errName);
+ tempErr = GetDiskFragment(&fragSpec, codeOffset, codeLength, fragSpec.name, kLoadCFrag, &pFilterData->outID, &pFilterData->outAddress, errName);
else
return;
@@ -503,19 +503,30 @@ done:
OSErr NSLoadNamedFragment(const FSSpec *fileSpec, const char* fragmentName, CFragConnectionID *outConnectionID)
{
- UInt32 fragOffset, fragLength;
- Ptr main;
- Str255 fragName = "\p";
- Str255 errName;
- OSErr err;
-
- err = GetNamedFragmentOffsets(fileSpec, fragmentName, &fragOffset, &fragLength);
- if (err != noErr) return err;
-
- err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
- kLoadCFrag, outConnectionID, &main, errName);
-
- return err;
+ UInt32 fragOffset, fragLength;
+ short fragNameLength;
+ Ptr main;
+ Str255 fragName;
+ Str255 errName;
+ OSErr err;
+
+ err = GetNamedFragmentOffsets(fileSpec, fragmentName, &fragOffset, &fragLength);
+ if (err != noErr) return err;
+
+ // convert fragment name to pascal string
+ fragNameLength = strlen(fragmentName);
+ if (fragNameLength > 255)
+ fragNameLength = 255;
+ BlockMoveData(fragmentName, &fragName[1], fragNameLength);
+ fragName[0] = fragNameLength;
+
+ // Note that we pass the fragment name as the 4th param to GetDiskFragment.
+ // This value affects the ability of debuggers, and the Talkback system,
+ // to match code fragments with symbol files
+ err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
+ kLoadCFrag, outConnectionID, &main, errName);
+
+ return err;
}
@@ -532,39 +543,42 @@ OSErr NSLoadNamedFragment(const FSSpec *fileSpec, const char* fragmentName, CFra
-----------------------------------------------------------------*/
OSErr NSLoadIndexedFragment(const FSSpec *fileSpec, PRUint32 fragmentIndex,
- char** outFragName, CFragConnectionID *outConnectionID)
+ char** outFragName, CFragConnectionID *outConnectionID)
{
- UInt32 fragOffset, fragLength;
- char *fragNameBlock = NULL;
- Ptr main;
- Str255 fragName = "\p";
- Str255 errName;
- OSErr err;
-
- *outFragName = NULL;
-
- err = GetIndexedFragmentOffsets(fileSpec, fragmentIndex, &fragOffset, &fragLength, &fragNameBlock);
- if (err != noErr) return err;
-
- if (fragNameBlock)
- {
- UInt32 nameLen = strlen(fragNameBlock);
- if (nameLen > 63)
- nameLen = 63;
- BlockMoveData(fragNameBlock, &fragName[1], nameLen);
- fragName[0] = nameLen;
- }
-
- err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
- kLoadCFrag, outConnectionID, &main, errName);
- if (err != noErr)
- {
- free(fragNameBlock);
- return err;
- }
-
- *outFragName = fragNameBlock;
- return noErr;
+ UInt32 fragOffset, fragLength;
+ char *fragNameBlock = NULL;
+ Ptr main;
+ Str255 fragName = "\p";
+ Str255 errName;
+ OSErr err;
+
+ *outFragName = NULL;
+
+ err = GetIndexedFragmentOffsets(fileSpec, fragmentIndex, &fragOffset, &fragLength, &fragNameBlock);
+ if (err != noErr) return err;
+
+ if (fragNameBlock)
+ {
+ UInt32 nameLen = strlen(fragNameBlock);
+ if (nameLen > 63)
+ nameLen = 63;
+ BlockMoveData(fragNameBlock, &fragName[1], nameLen);
+ fragName[0] = nameLen;
+ }
+
+ // Note that we pass the fragment name as the 4th param to GetDiskFragment.
+ // This value affects the ability of debuggers, and the Talkback system,
+ // to match code fragments with symbol files
+ err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
+ kLoadCFrag, outConnectionID, &main, errName);
+ if (err != noErr)
+ {
+ free(fragNameBlock);
+ return err;
+ }
+
+ *outFragName = fragNameBlock;
+ return noErr;
}
diff --git a/pr/src/md/mac/macio.c b/pr/src/md/mac/macio.c
index 0a546635..f4bb60a4 100644
--- a/pr/src/md/mac/macio.c
+++ b/pr/src/md/mac/macio.c
@@ -81,15 +81,16 @@ static void AsyncIOCompletion (ExtendedParamBlock *pbAsyncPtr)
if (_PR_MD_GET_INTSOFF()) {
thread->md.missedIONotify = PR_TRUE;
cpu->u.missed[cpu->where] |= _PR_MISSED_IO;
- return;
- }
+ } else {
+ _PR_INTSOFF(is);
- _PR_INTSOFF(is);
+ thread->md.osErrCode = noErr;
+ DoneWaitingOnThisThread(thread);
- thread->md.osErrCode = noErr;
- DoneWaitingOnThisThread(thread);
+ _PR_FAST_INTSON(is);
+ }
- _PR_FAST_INTSON(is);
+ SignalIdleSemaphore();
}
void _MD_SetError(OSErr oserror)
@@ -266,7 +267,7 @@ PRInt32 ReadWriteProc(PRFileDesc *fd, void *buf, PRUint32 bytes, IOOperation op)
a 32 byte Ptr in the heap, so only do this once
*/
if (!sCompletionUPP)
- sCompletionUPP = NewIOCompletionProc((IOCompletionProcPtr)&AsyncIOCompletion);
+ sCompletionUPP = NewIOCompletionUPP((IOCompletionProcPtr)&AsyncIOCompletion);
/* grab the thread so we know which one to post to at completion */
pbAsync.thread = me;
@@ -1295,7 +1296,9 @@ ConvertUnixPathToMacPath(const char *unixPath, char **macPath)
FSSpec foundSpec;
short pathBufferSize;
+#if DEBUG
char *temp;
+#endif
int tempLen;
// Are we dealing with the temp folder?
@@ -1905,14 +1908,12 @@ PRStatus _MD_CreateFileMap(PRFileMap *fmap, PRInt64 size)
{
#pragma unused (fmap, 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;
}
@@ -1924,7 +1925,6 @@ void * _MD_MemMap(
{
#pragma unused (fmap, offset, len)
- PR_ASSERT(!"Not implemented");
PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
return NULL;
}
@@ -1933,7 +1933,6 @@ PRStatus _MD_MemUnmap(void *addr, PRUint32 len)
{
#pragma unused (addr, len)
- PR_ASSERT(!"Not implemented");
PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
return PR_FAILURE;
}
@@ -1942,7 +1941,6 @@ PRStatus _MD_CloseFileMap(PRFileMap *fmap)
{
#pragma unused (fmap)
- PR_ASSERT(!"Not implemented");
PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
return PR_FAILURE;
}
diff --git a/pr/src/md/mac/macsocket.h b/pr/src/md/mac/macsocket.h
index b1045e36..b9194c52 100644
--- a/pr/src/md/mac/macsocket.h
+++ b/pr/src/md/mac/macsocket.h
@@ -39,6 +39,7 @@
// Interface visible to xp code
// C socket type definitions and routines
// from sys/socket.h
+#include <Files.h>
#include <OpenTptInternet.h> // All the internet typedefs
#include <utime.h> // For timeval
/*
diff --git a/pr/src/md/mac/macsockotpt.c b/pr/src/md/mac/macsockotpt.c
index ef15a56b..6c54de4c 100644
--- a/pr/src/md/mac/macsockotpt.c
+++ b/pr/src/md/mac/macsockotpt.c
@@ -38,6 +38,7 @@
#include <string.h>
#include <Gestalt.h>
+#include <Files.h>
#include <OpenTransport.h>
#include <OSUtils.h>
@@ -173,9 +174,9 @@ static pascal void DNSNotifierRoutine(void * contextPtr, OTEventCode otEvent, O
if (_PR_MD_GET_INTSOFF()) {
dnsContext.thread->md.missedIONotify = PR_TRUE;
cpu->u.missed[cpu->where] |= _PR_MISSED_IO;
- return;
+ } else {
+ DoneWaitingOnThisThread(dnsContext.thread);
}
- DoneWaitingOnThisThread(dnsContext.thread);
break;
case kOTProviderWillClose:
@@ -189,9 +190,9 @@ static pascal void DNSNotifierRoutine(void * contextPtr, OTEventCode otEvent, O
if (_PR_MD_GET_INTSOFF()) {
dnsContext.thread->md.missedIONotify = PR_TRUE;
cpu->u.missed[cpu->where] |= _PR_MISSED_IO;
- return;
+ } else {
+ DoneWaitingOnThisThread(dnsContext.thread);
}
- DoneWaitingOnThisThread(dnsContext.thread);
break;
default: // or else we don't handle the event
@@ -199,6 +200,8 @@ static pascal void DNSNotifierRoutine(void * contextPtr, OTEventCode otEvent, O
}
// or else we don't handle the event
+
+ SignalIdleSemaphore();
}
@@ -296,10 +299,12 @@ WakeUpNotifiedThread(PRThread *thread, OTResult result)
if (_PR_MD_GET_INTSOFF()) {
thread->md.missedIONotify = PR_TRUE;
cpu->u.missed[cpu->where] |= _PR_MISSED_IO;
- return;
+ } else {
+ DoneWaitingOnThisThread(thread);
}
- DoneWaitingOnThisThread(thread);
}
+
+ SignalIdleSemaphore();
}
// Notification routine
@@ -369,6 +374,8 @@ static pascal void NotifierRoutine(void * contextPtr, OTEventCode code, OTResul
PR_ASSERT(err == kOTNoError);
secret->md.exceptReady = PR_TRUE; // XXX Check this
+ md->disconnectError = discon.reason; // save for _MD_mac_get_nonblocking_connect_error
+
// wake up waiting threads, if any
result = -3199 - discon.reason; // obtain the negative error code
if ((readThread = secret->md.read.thread) != NULL) {
@@ -1080,12 +1087,12 @@ typedef struct RawEndpointAndThread
// A5 is OK. Cannot allocate memory here
static pascal void RawEndpointNotifierRoutine(void * contextPtr, OTEventCode code, OTResult result, void * cookie)
{
- RawEndpointAndThread *endthr = (RawEndpointAndThread *) contextPtr;
+ RawEndpointAndThread *endthr = (RawEndpointAndThread *) contextPtr;
PRThread * thread = endthr->thread;
EndpointRef * endpoint = endthr->endpoint;
_PRCPU * cpu = _PR_MD_CURRENT_CPU();
- OSStatus err;
- OTResult resultOT;
+ OSStatus err;
+ OTResult resultOT;
switch (code)
{
@@ -1169,10 +1176,12 @@ static pascal void RawEndpointNotifierRoutine(void * contextPtr, OTEventCode co
if (_PR_MD_GET_INTSOFF()) {
thread->md.asyncNotifyPending = PR_TRUE;
cpu->u.missed[cpu->where] |= _PR_MISSED_IO;
- return;
+ } else {
+ DoneWaitingOnThisThread(thread);
}
- DoneWaitingOnThisThread(thread);
}
+
+ SignalIdleSemaphore();
}
PRInt32 _MD_accept(PRFileDesc *fd, PRNetAddr *addr, PRUint32 *addrlen, PRIntervalTime timeout)
@@ -1309,7 +1318,7 @@ PRInt32 _MD_connect(PRFileDesc *fd, PRNetAddr *addr, PRUint32 addrlen, PRInterva
err = kEFAULTErr;
goto ErrorExit;
}
-
+
// Bind to a local port; let the system assign it.
bindAddr.inet.family = AF_INET;
@@ -1320,19 +1329,19 @@ PRInt32 _MD_connect(PRFileDesc *fd, PRNetAddr *addr, PRUint32 addrlen, PRInterva
bindReq.addr.buf = (UInt8*) &bindAddr;
bindReq.qlen = 0;
- PR_Lock(fd->secret->md.miscLock);
+ PR_Lock(fd->secret->md.miscLock);
PrepareForAsyncCompletion(me, fd->secret->md.osfd);
- fd->secret->md.misc.thread = me;
+ fd->secret->md.misc.thread = me;
err = OTBind(endpoint, &bindReq, NULL);
if (err != kOTNoError) {
- me->io_pending = PR_FALSE;
- PR_Unlock(fd->secret->md.miscLock);
- goto ErrorExit;
- }
+ me->io_pending = PR_FALSE;
+ PR_Unlock(fd->secret->md.miscLock);
+ goto ErrorExit;
+ }
WaitOnThisThread(me, PR_INTERVAL_NO_TIMEOUT);
- PR_Unlock(fd->secret->md.miscLock);
+ PR_Unlock(fd->secret->md.miscLock);
err = me->md.osErrCode;
if (err != kOTNoError)
@@ -1344,26 +1353,26 @@ PRInt32 _MD_connect(PRFileDesc *fd, PRNetAddr *addr, PRUint32 addrlen, PRInterva
sndCall.addr.len = addrlen;
sndCall.addr.buf = (UInt8*) addr;
- if (!fd->secret->nonblocking) {
- PrepareForAsyncCompletion(me, fd->secret->md.osfd);
- PR_ASSERT(fd->secret->md.write.thread == NULL);
- fd->secret->md.write.thread = me;
+ if (!fd->secret->nonblocking) {
+ PrepareForAsyncCompletion(me, fd->secret->md.osfd);
+ PR_ASSERT(fd->secret->md.write.thread == NULL);
+ fd->secret->md.write.thread = me;
}
-
+
err = OTConnect (endpoint, &sndCall, NULL);
- if (err == kOTNoError) {
- PR_ASSERT(!"OTConnect returned kOTNoError in async mode!?!");
- }
- if (fd->secret->nonblocking) {
- if (err == kOTNoDataErr)
- err = EINPROGRESS;
- goto ErrorExit;
- } else {
- if (err != kOTNoError && err != kOTNoDataErr) {
- me->io_pending = PR_FALSE;
- goto ErrorExit;
- }
- }
+ if (err == kOTNoError) {
+ PR_ASSERT(!"OTConnect returned kOTNoError in async mode!?!");
+ }
+ if (fd->secret->nonblocking) {
+ if (err == kOTNoDataErr)
+ err = EINPROGRESS;
+ goto ErrorExit;
+ } else {
+ if (err != kOTNoError && err != kOTNoDataErr) {
+ me->io_pending = PR_FALSE;
+ goto ErrorExit;
+ }
+ }
WaitOnThisThread(me, timeout);
@@ -1583,7 +1592,6 @@ static PRInt32 SendReceiveDgram(PRFileDesc *fd, void *buf, PRInt32 amount,
PRThread *me = _PR_MD_CURRENT_THREAD();
PRInt32 bytesLeft = amount;
TUnitData dgram;
- OTResult result;
PR_ASSERT(flags == 0);
@@ -1618,13 +1626,13 @@ static PRInt32 SendReceiveDgram(PRFileDesc *fd, void *buf, PRInt32 amount,
fd->secret->md.write.thread = me;
fd->secret->md.writeReady = PR_FALSE; // expect the worst
err = OTSndUData(endpoint, &dgram);
- if (result != kOTFlowErr) // hope for the best
+ if (err != kOTFlowErr) // hope for the best
fd->secret->md.writeReady = PR_TRUE;
} else {
fd->secret->md.read.thread = me;
fd->secret->md.readReady = PR_FALSE; // expect the worst
err = OTRcvUData(endpoint, &dgram, NULL);
- if (result != kOTNoDataErr) // hope for the best
+ if (err != kOTNoDataErr) // hope for the best
fd->secret->md.readReady = PR_TRUE;
}
@@ -1754,83 +1762,131 @@ static PRBool GetState(PRFileDesc *fd, PRBool *readReady, PRBool *writeReady, PR
}
// check to see if any of the poll descriptors have data available
+// for reading or writing, by calling their poll methods (layered IO).
+static PRInt32 CheckPollDescMethods(PRPollDesc *pds, PRIntn npds, PRInt16 *outReadFlags, PRInt16 *outWriteFlags)
+{
+ PRInt32 ready = 0;
+ PRPollDesc *pd, *epd;
+ PRInt16 *readFlag, *writeFlag;
+
+ for (pd = pds, epd = pd + npds, readFlag = outReadFlags, writeFlag = outWriteFlags;
+ pd < epd;
+ pd++, readFlag++, writeFlag++)
+ {
+ PRInt16 in_flags_read = 0, in_flags_write = 0;
+ PRInt16 out_flags_read = 0, out_flags_write = 0;
+
+ pd->out_flags = 0;
+
+ if (NULL == pd->fd || pd->in_flags == 0) continue;
+
+ if (pd->in_flags & PR_POLL_READ)
+ {
+ in_flags_read = (pd->fd->methods->poll)(
+ pd->fd, pd->in_flags & ~PR_POLL_WRITE, &out_flags_read);
+ }
+
+ if (pd->in_flags & PR_POLL_WRITE)
+ {
+ in_flags_write = (pd->fd->methods->poll)(
+ pd->fd, pd->in_flags & ~PR_POLL_READ, &out_flags_write);
+ }
+
+ if ((0 != (in_flags_read & out_flags_read)) ||
+ (0 != (in_flags_write & out_flags_write)))
+ {
+ ready += 1; /* some layer has buffer input */
+ pd->out_flags = out_flags_read | out_flags_write;
+ }
+
+ *readFlag = in_flags_read;
+ *writeFlag = in_flags_write;
+ }
+
+ return ready;
+}
+
+// check to see if any of OT endpoints of the poll descriptors have data available
// for reading or writing.
-static PRInt32 CheckPollDescs(PRPollDesc *pds, PRIntn npds)
+static PRInt32 CheckPollDescEndpoints(PRPollDesc *pds, PRIntn npds, const PRInt16 *inReadFlags, const PRInt16 *inWriteFlags)
{
PRInt32 ready = 0;
PRPollDesc *pd, *epd;
+ const PRInt16 *readFlag, *writeFlag;
- for (pd = pds, epd = pd + npds; pd < epd; pd++)
- {
- PRInt16 in_flags_read = 0, in_flags_write = 0;
- PRInt16 out_flags_read = 0, out_flags_write = 0;
+ for (pd = pds, epd = pd + npds, readFlag = inReadFlags, writeFlag = inWriteFlags;
+ pd < epd;
+ pd++, readFlag++, writeFlag++)
+ {
+ PRFileDesc *bottomFD;
+ PRBool readReady, writeReady, exceptReady;
+ PRInt16 in_flags_read = *readFlag;
+ PRInt16 in_flags_write = *writeFlag;
- if (NULL == pd->fd || pd->in_flags == 0) continue;
+ if (NULL == pd->fd || pd->in_flags == 0) continue;
- if (pd->in_flags & PR_POLL_READ)
- {
- in_flags_read = (pd->fd->methods->poll)(
- pd->fd, pd->in_flags & ~PR_POLL_WRITE, &out_flags_read);
- }
- if (pd->in_flags & PR_POLL_WRITE)
- {
- in_flags_write = (pd->fd->methods->poll)(
- pd->fd, pd->in_flags & ~PR_POLL_READ, &out_flags_write);
- }
- if ((0 != (in_flags_read & out_flags_read))
- || (0 != (in_flags_write & out_flags_write)))
- {
- ready += 1; /* some layer has buffer input */
- pd->out_flags = out_flags_read | out_flags_write;
- }
- else
- {
- PRFileDesc *bottomFD;
- PRBool readReady, writeReady, exceptReady;
+ if ((pd->in_flags & ~pd->out_flags) == 0) {
+ ready++;
+ continue;
+ }
- pd->out_flags = 0; /* pre-condition */
- bottomFD = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
- /* bottomFD can be NULL for pollable sockets */
- if (bottomFD)
+ bottomFD = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
+ /* bottomFD can be NULL for pollable sockets */
+ if (bottomFD)
+ {
+ if (_PR_FILEDESC_OPEN == bottomFD->secret->state)
+ {
+ if (GetState(bottomFD, &readReady, &writeReady, &exceptReady))
{
- if (_PR_FILEDESC_OPEN == bottomFD->secret->state)
+ if (readReady)
+ {
+ if (in_flags_read & PR_POLL_READ)
+ pd->out_flags |= PR_POLL_READ;
+ if (in_flags_write & PR_POLL_READ)
+ pd->out_flags |= PR_POLL_WRITE;
+ }
+ if (writeReady)
{
- if (GetState(bottomFD, &readReady, &writeReady, &exceptReady))
- {
- if (readReady)
- {
- if (in_flags_read & PR_POLL_READ)
- pd->out_flags |= PR_POLL_READ;
- if (in_flags_write & PR_POLL_READ)
- pd->out_flags |= PR_POLL_WRITE;
- }
- if (writeReady)
- {
- if (in_flags_read & PR_POLL_WRITE)
- pd->out_flags |= PR_POLL_READ;
- if (in_flags_write & PR_POLL_WRITE)
- pd->out_flags |= PR_POLL_WRITE;
- }
- if (exceptReady && (pd->in_flags & PR_POLL_EXCEPT))
- {
- pd->out_flags |= PR_POLL_EXCEPT;
- }
- if (0 != pd->out_flags) ready++;
- }
+ if (in_flags_read & PR_POLL_WRITE)
+ pd->out_flags |= PR_POLL_READ;
+ if (in_flags_write & PR_POLL_WRITE)
+ pd->out_flags |= PR_POLL_WRITE;
}
- else /* bad state */
+ if (exceptReady && (pd->in_flags & PR_POLL_EXCEPT))
{
- ready += 1; /* this will cause an abrupt return */
- pd->out_flags = PR_POLL_NVAL; /* bogii */
+ pd->out_flags |= PR_POLL_EXCEPT;
}
}
+ if (0 != pd->out_flags) ready++;
+ }
+ else /* bad state */
+ {
+ ready += 1; /* this will cause an abrupt return */
+ pd->out_flags = PR_POLL_NVAL; /* bogii */
}
}
+ }
return ready;
}
-// set or clear md.poll.thread on the poll descriptors
+
+// see how many of the poll descriptors are ready
+static PRInt32 CountReadyPollDescs(PRPollDesc *pds, PRIntn npds)
+{
+ PRInt32 ready = 0;
+ PRPollDesc *pd, *epd;
+
+ for (pd = pds, epd = pd + npds; pd < epd; pd++)
+ {
+ if (pd->out_flags)
+ ready ++;
+ }
+
+ return ready;
+}
+
+// set or clear the poll thread on the poll descriptors
static void SetDescPollThread(PRPollDesc *pds, PRIntn npds, PRThread* thread)
{
PRInt32 ready = 0;
@@ -1862,43 +1918,82 @@ static void SetDescPollThread(PRPollDesc *pds, PRIntn npds, PRThread* thread)
bottomFD->secret->md.write.thread = thread;
}
}
- }
+ }
}
}
+
+#define DESCRIPTOR_FLAGS_ARRAY_SIZE 32
+
PRInt32 _MD_poll(PRPollDesc *pds, PRIntn npds, PRIntervalTime timeout)
{
+ PRInt16 readFlagsArray[DESCRIPTOR_FLAGS_ARRAY_SIZE];
+ PRInt16 writeFlagsArray[DESCRIPTOR_FLAGS_ARRAY_SIZE];
+
+ PRInt16 *readFlags = readFlagsArray;
+ PRInt16 *writeFlags = writeFlagsArray;
+
+ PRInt16 *ioFlags = NULL;
+
PRThread *thread = _PR_MD_CURRENT_THREAD();
- intn is;
- PRInt32 ready;
+ PRInt32 ready;
- if (timeout == PR_INTERVAL_NO_WAIT) {
- return CheckPollDescs(pds, npds);
+ if (npds > DESCRIPTOR_FLAGS_ARRAY_SIZE)
+ {
+ // we allocate a single double-size array. The first half is used
+ // for read flags, and the second half for write flags.
+ ioFlags = (PRInt16*)PR_Malloc(sizeof(PRInt16) * npds * 2);
+ if (!ioFlags)
+ {
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
+ return -1;
+ }
+
+ readFlags = ioFlags;
+ writeFlags = &ioFlags[npds];
}
-
- _PR_INTSOFF(is);
- PR_Lock(thread->md.asyncIOLock);
- // ensure that we don't miss the firing of the notifier while checking socket status
- // need to set up the thread
- PrepareForAsyncCompletion(thread, 0);
+ // we have to be outside the lock when calling this, since
+ // it can call arbitrary user code (including other socket
+ // entry points)
+ ready = CheckPollDescMethods(pds, npds, readFlags, writeFlags);
- SetDescPollThread(pds, npds, thread);
- ready = CheckPollDescs(pds, npds);
+ if (!ready && timeout != PR_INTERVAL_NO_WAIT) {
+ intn is;
+
- PR_Unlock(thread->md.asyncIOLock);
- _PR_FAST_INTSON(is);
+ _PR_INTSOFF(is);
+ PR_Lock(thread->md.asyncIOLock);
+ PrepareForAsyncCompletion(thread, 0);
- if (ready == 0) {
- WaitOnThisThread(thread, timeout);
- ready = CheckPollDescs(pds, npds);
+ SetDescPollThread(pds, npds, thread);
- } else {
+ (void)CheckPollDescEndpoints(pds, npds, readFlags, writeFlags);
+
+ PR_Unlock(thread->md.asyncIOLock);
+ _PR_FAST_INTSON(is);
+
+ ready = CountReadyPollDescs(pds, npds);
+
+ if (ready == 0) {
+ WaitOnThisThread(thread, timeout);
+
+ // since we may have been woken by a pollable event firing,
+ // we have to check both poll methods and endpoints.
+ (void)CheckPollDescMethods(pds, npds, readFlags, writeFlags);
+ ready = CheckPollDescEndpoints(pds, npds, readFlags, writeFlags);
+ }
+
thread->io_pending = PR_FALSE;
+ SetDescPollThread(pds, npds, NULL);
+ }
+ else {
+ ready = CheckPollDescEndpoints(pds, npds, readFlags, writeFlags);
}
- SetDescPollThread(pds, npds, NULL);
-
+ if (readFlags != readFlagsArray)
+ PR_Free(ioFlags);
+
return ready;
}
@@ -2192,25 +2287,32 @@ ErrorExit:
}
-int _MD_mac_get_nonblocking_connect_error(PRInt32 osfd)
+int _MD_mac_get_nonblocking_connect_error(PRFileDesc* fd)
{
- OTResult resultOT;
- EndpointRef endpoint = (EndpointRef) osfd;
+ EndpointRef endpoint = (EndpointRef)fd->secret->md.osfd;
+ OTResult resultOT = OTGetEndpointState(endpoint);
- resultOT = OTGetEndpointState(endpoint);
switch (resultOT) {
case T_OUTCON:
macsock_map_error(EINPROGRESS);
return -1;
+
case T_DATAXFER:
return 0;
+
case T_IDLE:
+ macsock_map_error(fd->secret->md.disconnectError);
+ fd->secret->md.disconnectError = 0;
return -1;
+
case T_INREL:
macsock_map_error(ENOTCONN);
return -1;
+
default:
PR_ASSERT(0);
return -1;
}
+
+ return -1; // not reached
}
diff --git a/pr/src/md/mac/macthr.c b/pr/src/md/mac/macthr.c
index 0df8a590..fd3b489d 100644
--- a/pr/src/md/mac/macthr.c
+++ b/pr/src/md/mac/macthr.c
@@ -39,7 +39,7 @@
#include <MacTypes.h>
#include <Timer.h>
#include <OSUtils.h>
-
+#include <Math64.h>
#include <LowMem.h>
#include <Multiprocessing.h>
#include <Gestalt.h>
@@ -49,6 +49,8 @@
TimerUPP gTimerCallbackUPP = NULL;
PRThread * gPrimaryThread = NULL;
+ProcessSerialNumber gApplicationProcess;
+
PR_IMPLEMENT(PRThread *) PR_GetPrimaryThread()
{
return gPrimaryThread;
@@ -159,7 +161,21 @@ extern void _MD_ClearStack(PRThreadStack *ts)
#pragma mark -
#pragma mark TIME MANAGER-BASED CLOCK
-TMTask gTimeManagerTaskElem;
+// On Mac OS X, it's possible for the application to spend lots of time
+// in WaitNextEvent, yielding to other applications. Since NSPR threads are
+// cooperative here, this means that NSPR threads will also get very little
+// time to run. To kick ourselves out of a WaitNextEvent call when we have
+// determined that it's time to schedule another thread, the Timer Task
+// (which fires every 8ms, even when other apps have the CPU) calls WakeUpProcess.
+// We only want to do this on Mac OS X; the gTimeManagerTaskDoesWUP variable
+// indicates when we're running on that OS.
+//
+// Note that the TimerCallback makes use of gApplicationProcess. We need to
+// have set this up before the first possible run of the timer task; we do
+// so in _MD_EarlyInit().
+static Boolean gTimeManagerTaskDoesWUP;
+
+static TMTask gTimeManagerTaskElem;
extern void _MD_IOInterrupt(void);
_PRInterruptTable _pr_interruptTable[] = {
@@ -168,6 +184,8 @@ _PRInterruptTable _pr_interruptTable[] = {
{ 0 }
};
+#define kMacTimerInMiliSecs 8L
+
pascal void TimerCallback(TMTaskPtr tmTaskPtr)
{
_PRCPU *cpu = _PR_MD_CURRENT_CPU();
@@ -184,8 +202,20 @@ pascal void TimerCallback(TMTaskPtr tmTaskPtr)
// And tell nspr that a clock interrupt occured.
_PR_ClockInterrupt();
- if ((_PR_RUNQREADYMASK(cpu)) >> ((_PR_MD_CURRENT_THREAD()->priority)))
+ if ((_PR_RUNQREADYMASK(cpu)) >> ((_PR_MD_CURRENT_THREAD()->priority))) {
+ if (gTimeManagerTaskDoesWUP) {
+ // We only want to call WakeUpProcess if we know that NSPR has managed to switch threads
+ // since the last call, otherwise we end up spewing out WakeUpProcess() calls while the
+ // application is blocking somewhere. This can interfere with events loops other than
+ // our own (see bug 158927).
+ if (UnsignedWideToUInt64(cpu->md.lastThreadSwitch) > UnsignedWideToUInt64(cpu->md.lastWakeUpProcess))
+ {
+ WakeUpProcess(&gApplicationProcess);
+ cpu->md.lastWakeUpProcess = UpTime();
+ }
+ }
_PR_SET_RESCHED_FLAG();
+ }
_PR_FAST_INTSON(is);
@@ -198,8 +228,10 @@ void _MD_StartInterrupts(void)
{
gPrimaryThread = _PR_MD_CURRENT_THREAD();
+ gTimeManagerTaskDoesWUP = RunningOnOSX();
+
if ( !gTimerCallbackUPP )
- gTimerCallbackUPP = NewTimerProc(TimerCallback);
+ gTimerCallbackUPP = NewTimerUPP(TimerCallback);
// Fill in the Time Manager queue element
@@ -222,26 +254,36 @@ void _MD_StopInterrupts(void)
}
}
+
+#define MAX_PAUSE_TIMEOUT_MS 500
+
void _MD_PauseCPU(PRIntervalTime timeout)
{
if (timeout != PR_INTERVAL_NO_WAIT)
{
- EventRecord theEvent;
-
- /*
- ** Calling WaitNextEvent() here is suboptimal. This routine should
- ** pause the process until IO or the timeout occur, yielding time to
- ** other processes on operating systems that require this (Mac OS classic).
- ** WaitNextEvent() may incur too much latency, and has other problems,
- ** such as the potential to drop suspend/resume events, and to handle
- ** AppleEvents at a time at which we're not prepared to handle them.
- */
- (void) WaitNextEvent(nullEvent, &theEvent, 1, NULL);
-
+ // There is a race condition entering the critical section
+ // in AsyncIOCompletion (and probably elsewhere) that can
+ // causes deadlock for the duration of this timeout. To
+ // work around this, use a max 500ms timeout for now.
+ // See bug 99561 for details.
+ if (PR_IntervalToMilliseconds(timeout) > MAX_PAUSE_TIMEOUT_MS)
+ timeout = PR_MillisecondsToInterval(MAX_PAUSE_TIMEOUT_MS);
+
+ WaitOnIdleSemaphore(timeout);
(void) _MD_IOInterrupt();
}
}
+void _MD_InitRunningCPU(_PRCPU* cpu)
+{
+ cpu->md.trackScheduling = RunningOnOSX();
+ if (cpu->md.trackScheduling) {
+ AbsoluteTime zeroTime = {0, 0};
+ cpu->md.lastThreadSwitch = UpTime();
+ cpu->md.lastWakeUpProcess = zeroTime;
+ }
+}
+
//##############################################################################
//##############################################################################
@@ -528,19 +570,25 @@ void _MD_SetIntsOff(PRInt32 ints)
#pragma mark -
#pragma mark CRITICAL REGION SUPPORT
+
+static PRBool RunningOnOSX()
+{
+ long systemVersion;
+ OSErr err = Gestalt(gestaltSystemVersion, &systemVersion);
+ return (err == noErr) && (systemVersion >= 0x00001000);
+}
+
+
#if MAC_CRITICAL_REGIONS
MDCriticalRegionID gCriticalRegion;
void InitCriticalRegion()
{
- long systemVersion;
OSStatus err;
// we only need to do critical region stuff on Mac OS X
- err = Gestalt(gestaltSystemVersion, &systemVersion);
- gUseCriticalRegions = (err == noErr) && (systemVersion >= 0x00001000);
-
+ gUseCriticalRegions = RunningOnOSX();
if (!gUseCriticalRegions) return;
err = MD_CriticalRegionCreate(&gCriticalRegion);
@@ -586,3 +634,85 @@ void LeaveCritialRegion()
#endif // MAC_CRITICAL_REGIONS
+//##############################################################################
+//##############################################################################
+#pragma mark -
+#pragma mark IDLE SEMAPHORE SUPPORT
+
+/*
+ Since the WaitNextEvent() in _MD_PauseCPU() is causing all sorts of
+ headache under Mac OS X we're going to switch to MPWaitOnSemaphore()
+ which should do what we want
+*/
+
+#if TARGET_CARBON
+PRBool gUseIdleSemaphore = PR_FALSE;
+MPSemaphoreID gIdleSemaphore = NULL;
+#endif
+
+void InitIdleSemaphore()
+{
+ // we only need to do idle semaphore stuff on Mac OS X
+#if TARGET_CARBON
+ gUseIdleSemaphore = RunningOnOSX();
+ if (gUseIdleSemaphore)
+ {
+ OSStatus err = MPCreateSemaphore(1 /* max value */, 0 /* initial value */, &gIdleSemaphore);
+ PR_ASSERT(err == noErr);
+ }
+#endif
+}
+
+void TermIdleSemaphore()
+{
+#if TARGET_CARBON
+ if (gUseIdleSemaphore)
+ {
+ OSStatus err = MPDeleteSemaphore(gIdleSemaphore);
+ PR_ASSERT(err == noErr);
+ gUseIdleSemaphore = NULL;
+ }
+#endif
+}
+
+
+void WaitOnIdleSemaphore(PRIntervalTime timeout)
+{
+#if TARGET_CARBON
+ if (gUseIdleSemaphore)
+ {
+ OSStatus err = MPWaitOnSemaphore(gIdleSemaphore, kDurationMillisecond * PR_IntervalToMilliseconds(timeout));
+ PR_ASSERT(err == noErr);
+ }
+ else
+#endif
+ {
+ EventRecord theEvent;
+ /*
+ ** Calling WaitNextEvent() here is suboptimal. This routine should
+ ** pause the process until IO or the timeout occur, yielding time to
+ ** other processes on operating systems that require this (Mac OS classic).
+ ** WaitNextEvent() may incur too much latency, and has other problems,
+ ** such as the potential to drop suspend/resume events.
+ */
+ (void)WaitNextEvent(nullEvent, &theEvent, 1, NULL);
+ }
+}
+
+
+void SignalIdleSemaphore()
+{
+#if TARGET_CARBON
+ if (gUseIdleSemaphore)
+ {
+ // often we won't be waiting on the semaphore here, so ignore any errors
+ (void)MPSignalSemaphore(gIdleSemaphore);
+ }
+ else
+#endif
+ {
+ WakeUpProcess(&gApplicationProcess);
+ }
+}
+
+
diff --git a/pr/src/md/mac/mdcriticalregion.c b/pr/src/md/mac/mdcriticalregion.c
index 927b9246..ff035d0d 100644
--- a/pr/src/md/mac/mdcriticalregion.c
+++ b/pr/src/md/mac/mdcriticalregion.c
@@ -35,6 +35,7 @@
*/
#include "mdcriticalregion.h"
+#include <MacErrors.h>
/*
This code is a replacement for MPEnterCriticalRegion/MPLeaveCriticalRegion,
diff --git a/pr/src/md/mac/mdmac.c b/pr/src/md/mac/mdmac.c
index f7e9a4fa..6d65e578 100644
--- a/pr/src/md/mac/mdmac.c
+++ b/pr/src/md/mac/mdmac.c
@@ -70,6 +70,7 @@
unsigned char GarbageCollectorCacheFlusher(PRUint32 size);
extern PRThread *gPrimaryThread;
+extern ProcessSerialNumber gApplicationProcess; // in macthr.c
//##############################################################################
@@ -288,7 +289,10 @@ void _MD_EarlyInit()
{
Handle environmentVariables;
+ GetCurrentProcess(&gApplicationProcess);
+
INIT_CRITICAL_REGION();
+ InitIdleSemaphore();
#if !defined(MAC_NSPR_STANDALONE)
// MacintoshInitializeMemory(); Moved to mdmacmem.c: AllocateRawMemory(Size blockSize)
@@ -376,6 +380,7 @@ void CleanupTermProc(void)
_MD_StopInterrupts(); // deactive Time Manager task
CLOSE_OPEN_TRANSPORT();
+ TermIdleSemaphore();
TERM_CRITICAL_REGION();
__NSTerminate();
diff --git a/pr/src/md/os2/os2_errors.c b/pr/src/md/os2/os2_errors.c
index f5be8391..5efd2c16 100644
--- a/pr/src/md/os2/os2_errors.c
+++ b/pr/src/md/os2/os2_errors.c
@@ -35,6 +35,44 @@
#include "prerror.h"
#include "primpl.h"
+void _MD_os2_map_default_error(PRInt32 err)
+{
+ switch (err) {
+ case EWOULDBLOCK:
+ PR_SetError(PR_WOULD_BLOCK_ERROR, err);
+ break;
+ case EBADF:
+ PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err);
+ break;
+ case ENOTSOCK:
+ PR_SetError(PR_NOT_SOCKET_ERROR, err);
+ break;
+ case EMSGSIZE:
+ case EINVAL:
+ PR_SetError(PR_INVALID_ARGUMENT_ERROR, err);
+ break;
+ case ENOBUFS:
+ PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err);
+ break;
+ case ECONNREFUSED:
+ PR_SetError(PR_CONNECT_REFUSED_ERROR, err);
+ break;
+ case EISCONN:
+ PR_SetError(PR_IS_CONNECTED_ERROR, err);
+ break;
+#ifdef SOCEFAULT
+ case SOCEFAULT:
+ PR_SetError(PR_ACCESS_FAULT_ERROR, err);
+ break;
+#endif
+ case ERROR_NETNAME_DELETED:
+ PR_SetError(PR_CONNECT_RESET_ERROR, err);
+ break;
+ default:
+ PR_SetError(PR_UNKNOWN_ERROR, err);
+ break;
+ }
+}
void _MD_os2_map_opendir_error(PRInt32 err)
{
switch (err) {
@@ -92,7 +130,7 @@ void _MD_os2_map_closedir_error(PRInt32 err)
}
}
-void _MD_unix_readdir_error(PRInt32 err)
+void _MD_os2_readdir_error(PRInt32 err)
{
switch (err) {
@@ -671,73 +709,17 @@ void _MD_os2_map_send_error(PRInt32 err)
void _MD_os2_map_sendto_error(PRInt32 err)
{
- switch (err) {
- case EWOULDBLOCK:
- PR_SetError(PR_WOULD_BLOCK_ERROR, err);
- break;
- case EBADF:
- PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err);
- break;
- case ENOTSOCK:
- PR_SetError(PR_NOT_SOCKET_ERROR, err);
- break;
- case EMSGSIZE:
- case EINVAL:
- PR_SetError(PR_INVALID_ARGUMENT_ERROR, err);
- break;
- case ENOBUFS:
- PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, err);
- break;
- case ECONNREFUSED:
- PR_SetError(PR_CONNECT_REFUSED_ERROR, err);
- break;
- case EISCONN:
- PR_SetError(PR_IS_CONNECTED_ERROR, err);
- break;
-#ifdef SOCEFAULT
- case SOCEFAULT:
- PR_SetError(PR_ACCESS_FAULT_ERROR, err);
- break;
-#endif
- case ERROR_NETNAME_DELETED:
- PR_SetError(PR_CONNECT_RESET_ERROR, err);
- break;
- default:
- PR_SetError(PR_UNKNOWN_ERROR, err);
- break;
- }
+ _MD_os2_map_default_error(err);
+}
+
+void _MD_os2_map_writev_error(int err)
+{
+ _MD_os2_map_default_error(err);
}
void _MD_os2_map_accept_error(PRInt32 err)
{
- switch (err) {
- case EWOULDBLOCK:
- PR_SetError(PR_WOULD_BLOCK_ERROR, err);
- break;
- case EBADF:
- PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err);
- break;
- case ENOTSOCK:
- PR_SetError(PR_NOT_SOCKET_ERROR, err);
- break;
- case EOPNOTSUPP:
- PR_SetError(PR_NOT_TCP_SOCKET_ERROR, err);
- break;
-#ifdef SOCEFAULT
- case SOCEFAULT:
- PR_SetError(PR_ACCESS_FAULT_ERROR, err);
- break;
-#endif
- case EMFILE:
- PR_SetError(PR_PROC_DESC_TABLE_FULL_ERROR, err);
- break;
- case ENOBUFS:
- PR_SetError(PR_OUT_OF_MEMORY_ERROR, err);
- break;
- default:
- PR_SetError(PR_UNKNOWN_ERROR, err);
- break;
- }
+ _MD_os2_map_default_error(err);
}
void _MD_os2_map_acceptex_error(PRInt32 err)
@@ -759,6 +741,21 @@ void _MD_os2_map_acceptex_error(PRInt32 err)
}
}
+/*
+ * An error code of 0 means that the nonblocking connect succeeded.
+ */
+
+int _MD_os2_get_nonblocking_connect_error(int osfd)
+{
+ int err;
+ int len = sizeof(err);
+ if (getsockopt(osfd, SOL_SOCKET, SO_ERROR, (char *) &err, &len) == -1) {
+ return sock_errno();
+ } else {
+ return err;
+ }
+}
+
void _MD_os2_map_connect_error(PRInt32 err)
{
switch (err) {
diff --git a/pr/src/md/os2/os2cv.c b/pr/src/md/os2/os2cv.c
index 1a2d9399..76c96330 100644
--- a/pr/src/md/os2/os2cv.c
+++ b/pr/src/md/os2/os2cv.c
@@ -48,6 +48,38 @@
#include "primpl.h"
+#ifdef USE_RAMSEM
+ULONG _Far16 _Pascal Dos16GetInfoSeg(PSEL pselGlobal, PSEL pselLocal);
+
+typedef struct _LINFOSEG
+{
+ USHORT pidCurrent;
+ USHORT pidParent;
+ USHORT prtyCurrent;
+ USHORT tidCurrent;
+ USHORT sgCurrent;
+ UCHAR rfProcStatus;
+ UCHAR dummy1;
+ BOOL16 fForeground;
+ UCHAR typProcess;
+ UCHAR dummy2;
+ SEL selEnvironment;
+ USHORT offCmdLine;
+ USHORT cbDataSegment;
+ USHORT cbStack;
+ USHORT cbHeap;
+ USHORT hmod;
+ SEL selDS;
+ SEL selPack;
+ SEL selPackShr;
+ SEL selPackPck;
+ ULONG ulReserved;
+} LINFOSEG;
+typedef LINFOSEG FAR *PLINFOSEG;
+
+PLINFOSEG plisCurrent = NULL;
+#endif
+
/*
* AddThreadToCVWaitQueueInternal --
*
@@ -82,7 +114,7 @@ AddThreadToCVWaitQueueInternal(PRThread *thred, struct _MDCVar *cv)
* This function is called by _PR_MD_WAIT_CV and _PR_MD_UNLOCK,
* the two places where a lock is unlocked.
*/
-static void
+void
md_UnlockAndPostNotifies(
_MDLock *lock,
PRThread *waitThred,
@@ -163,7 +195,11 @@ md_UnlockAndPostNotifies(
}
/* Release the lock before notifying */
- DosReleaseMutexSem(lock->mutex);
+#ifdef USE_RAMSEM
+ SemReleasex86(&lock->mutex, 0);
+#else
+ DosReleaseMutexSem(lock->mutex);
+#endif
notified = &post; /* this is where we start */
do {
@@ -270,7 +306,11 @@ _PR_MD_WAIT_CV(_MDCVar *cv, _MDLock *lock, PRIntervalTime timeout )
md_UnlockAndPostNotifies(lock, thred, cv);
} else {
AddThreadToCVWaitQueueInternal(thred, cv);
+#ifdef USE_RAMSEM
+ SemReleasex86( &lock->mutex, 0 );
+#else
DosReleaseMutexSem(lock->mutex);
+#endif
}
/* Wait for notification or timeout; don't really care which */
@@ -279,7 +319,11 @@ _PR_MD_WAIT_CV(_MDCVar *cv, _MDLock *lock, PRIntervalTime timeout )
DosResetEventSem(thred->md.blocked_sema, &count);
}
+#ifdef USE_RAMSEM
+ SemRequest486(&(lock->mutex), -1);
+#else
DosRequestMutexSem((lock->mutex), SEM_INDEFINITE_WAIT);
+#endif
PR_ASSERT(rv == NO_ERROR || rv == ERROR_TIMEOUT);
@@ -336,28 +380,41 @@ _PR_MD_NOTIFY_CV(_MDCVar *cv, _MDLock *lock)
PRStatus
_PR_MD_NEW_LOCK(_MDLock *lock)
{
+#ifdef USE_RAMSEM
+ // It's better if this API traps when pCriticalSect is not a valid
+ // pointer, because we can't return an error code and if we just return
+ // the API caller will have nasty bugs that are hard to find.
+
+ PRAMSEM pramsem = (PRAMSEM)(&(lock->mutex));
+ /* First time, set up addresses of processor specific functions
+ */
+ if (plisCurrent == NULL)
+ {
+ SEL selGlobal = 0, selLocal = 0;
+
+ /* Convert 16 bit global information segment to 32 bit address
+ * by performing CRMA on the 16 bit address: "shift" operation
+ * to convert sel to flat, "and" operation to mask the address
+ * to 32-bit
+ */
+ Dos16GetInfoSeg(&selGlobal, &selLocal);
+ plisCurrent = (PLINFOSEG)(((ULONG)selLocal << 13) &
+ (ULONG)0x1fff0000);
+
+ }
+
+ memset(pramsem, 0, sizeof(pramsem));
+ DosCreateEventSem(0, &pramsem->hevSem, DC_SEM_SHARED, 0);
+
+ lock->notified.length=0;
+ lock->notified.link=NULL;
+ return PR_SUCCESS;
+#else
DosCreateMutexSem(0, &(lock->mutex), 0, 0);
(lock)->notified.length=0;
(lock)->notified.link=NULL;
return PR_SUCCESS;
-}
-
-void
-_PR_MD_FREE_LOCK(_MDLock *lock)
-{
- DosCloseMutexSem(lock->mutex);
-}
-
-void _PR_MD_LOCK(_MDLock *lock)
-{
- DosRequestMutexSem(lock->mutex, SEM_INDEFINITE_WAIT);
-}
-
-PRIntn
-_PR_MD_TEST_AND_LOCK(_MDLock *lock)
-{
- DosRequestMutexSem(lock->mutex, SEM_INDEFINITE_WAIT);
- return 0;
+#endif
}
void
@@ -366,14 +423,3 @@ _PR_MD_NOTIFYALL_CV(_MDCVar *cv, _MDLock *lock)
md_PostNotifyToCvar(cv, lock, PR_TRUE);
return;
}
-
-void
-_PR_MD_UNLOCK(_MDLock *lock)
-{
- if (0 != lock->notified.length) {
- md_UnlockAndPostNotifies(lock, NULL, NULL);
- } else {
- DosReleaseMutexSem(lock->mutex);
- }
- return;
-}
diff --git a/pr/src/md/os2/os2inrval.c b/pr/src/md/os2/os2inrval.c
index 469da314..5c112531 100644
--- a/pr/src/md/os2/os2inrval.c
+++ b/pr/src/md/os2/os2inrval.c
@@ -39,57 +39,22 @@
#include "primpl.h"
-ULONG _os2_ticksPerSec = -1;
-PRIntn _os2_bitShift = 0;
-PRInt32 _os2_highMask = 0;
-
-
void
_PR_MD_INTERVAL_INIT()
{
- if (DosTmrQueryFreq(&_os2_ticksPerSec) == NO_ERROR)
- {
- while(_os2_ticksPerSec > PR_INTERVAL_MAX) {
- _os2_ticksPerSec >>= 1;
- _os2_bitShift++;
- _os2_highMask = (_os2_highMask << 1)+1;
- }
- }
- else
- _os2_ticksPerSec = -1;
-
- PR_ASSERT(_os2_ticksPerSec > PR_INTERVAL_MIN && _os2_ticksPerSec < PR_INTERVAL_MAX);
}
PRIntervalTime
_PR_MD_GET_INTERVAL()
{
- QWORD count;
-
- /* Sadly; nspr requires the interval to range from 1000 ticks per second
- * to only 100000 ticks per second; Counter is too high
- * resolution...
- */
- if (DosTmrQueryTime(&count) == NO_ERROR) {
- PRInt32 top = count.ulHi & _os2_highMask;
- top = top << (32 - _os2_bitShift);
- count.ulLo = count.ulLo >> _os2_bitShift;
- count.ulHi = count.ulLo + top;
- return (PRUint32)count.ulLo;
- }
- else{
- ULONG msCount = PR_FAILURE;
- DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &msCount, sizeof(msCount));
- return msCount;
- }
+ ULONG msCount = PR_FAILURE;
+ DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &msCount, sizeof(msCount));
+ return msCount;
}
PRIntervalTime
_PR_MD_INTERVAL_PER_SEC()
{
- if(_os2_ticksPerSec != -1)
- return _os2_ticksPerSec;
- else
- return 1000;
+ return 1000;
}
diff --git a/pr/src/md/os2/os2io.c b/pr/src/md/os2/os2io.c
index 12e2f2a2..acccf6a6 100644
--- a/pr/src/md/os2/os2io.c
+++ b/pr/src/md/os2/os2io.c
@@ -253,6 +253,12 @@ _PR_MD_WRITE(PRFileDesc *fd, const void *buf, PRInt32 len)
return -1;
}
+ if (len != bytes) {
+ rv = ERROR_DISK_FULL;
+ _PR_MD_MAP_WRITE_ERROR(rv);
+ return -1;
+ }
+
return bytes;
} /* --- end _PR_MD_WRITE() --- */
diff --git a/pr/src/md/os2/os2misc.c b/pr/src/md/os2/os2misc.c
index be597fcd..b3afa53d 100644
--- a/pr/src/md/os2/os2misc.c
+++ b/pr/src/md/os2/os2misc.c
@@ -118,107 +118,28 @@ PR_Now(void)
static int assembleCmdLine(char *const *argv, char **cmdLine)
{
char *const *arg;
- char *p, *q;
int cmdLineSize;
- int numBackslashes;
- int i;
- int argNeedQuotes;
/*
* Find out how large the command line buffer should be.
*/
- cmdLineSize = 0;
- for (arg = argv; *arg; arg++) {
- /*
- * \ and " need to be escaped by a \. In the worst case,
- * every character is a \ or ", so the string of length
- * may double. If we quote an argument, that needs two ".
- * Finally, we need a space between arguments, a null between
- * the EXE name and the arguments, and 2 nulls at the end
- * of command line.
- */
- cmdLineSize += 2 * strlen(*arg) /* \ and " need to be escaped */
- + 2 /* we quote every argument */
- + 4; /* space in between, or final nulls */
- }
- p = *cmdLine = PR_MALLOC(cmdLineSize);
- if (p == NULL) {
+ cmdLineSize = 1; /* final null */
+ for (arg = argv+1; *arg; arg++) {
+ cmdLineSize += strlen(*arg) + 1; /* space in between */
+ }
+ *cmdLine = PR_MALLOC(cmdLineSize);
+ if (*cmdLine == NULL) {
return -1;
}
- for (arg = argv; *arg; arg++) {
- /* Add a space to separates the arguments */
- if (arg > argv + 1) {
- *p++ = ' ';
- }
- q = *arg;
- numBackslashes = 0;
- argNeedQuotes = 0;
-
- /* If the argument contains white space, it needs to be quoted. */
- if (strpbrk(*arg, " \f\n\r\t\v")) {
- argNeedQuotes = 1;
- }
-
- if (argNeedQuotes) {
- *p++ = '"';
- }
- while (*q) {
- if (*q == '\\') {
- numBackslashes++;
- q++;
- } else if (*q == '"') {
- if (numBackslashes) {
- /*
- * Double the backslashes since they are followed
- * by a quote
- */
- for (i = 0; i < 2 * numBackslashes; i++) {
- *p++ = '\\';
- }
- numBackslashes = 0;
- }
- /* To escape the quote */
- *p++ = '\\';
- *p++ = *q++;
- } else {
- if (numBackslashes) {
- /*
- * Backslashes are not followed by a quote, so
- * don't need to double the backslashes.
- */
- for (i = 0; i < numBackslashes; i++) {
- *p++ = '\\';
- }
- numBackslashes = 0;
- }
- *p++ = *q++;
- }
- }
+ (*cmdLine)[0] = '\0';
- /* Now we are at the end of this argument */
- if (numBackslashes) {
- /*
- * Double the backslashes if we have a quote string
- * delimiter at the end.
- */
- if (argNeedQuotes) {
- numBackslashes *= 2;
- }
- for (i = 0; i < numBackslashes; i++) {
- *p++ = '\\';
- }
+ for (arg = argv+1; *arg; arg++) {
+ if (arg > argv +1) {
+ strcat(*cmdLine, " ");
}
- if (argNeedQuotes) {
- *p++ = '"';
- }
- if(arg == argv)
- *p++ = '\0';
+ strcat(*cmdLine, *arg);
}
-
- /* Add 2 nulls at the end */
- *p++ = '\0';
- *p = '\0';
return 0;
}
@@ -308,129 +229,154 @@ static int compare(const void *arg1, const void *arg2)
{
return stricmp(* (char**)arg1, * (char**)arg2);
}
+
PRProcess * _PR_CreateOS2Process(
const char *path,
char *const *argv,
char *const *envp,
const PRProcessAttr *attr)
{
- char szFailed[CCHMAXPATH];
- RESULTCODES procInfo;
- APIRET retVal;
- char *cmdLine = NULL;
- char *envBlock = NULL;
- char **newEnvp;
- PRProcess *proc = NULL;
- HFILE hStdIn = 0,
- hStdOut = 0,
- hStdErr = 0;
- HFILE hStdInSave = -1,
- hStdOutSave = -1,
- hStdErrSave = -1;
-
- proc = PR_NEW(PRProcess);
- if (!proc) {
- PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
- goto errorExit;
- }
-
- if (assembleCmdLine(argv, &cmdLine) == -1) {
- PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
- goto errorExit;
- }
-
- if (envp == NULL) {
- newEnvp = NULL;
- } else {
- int i;
- int numEnv = 0;
- while (envp[numEnv]) {
- numEnv++;
- }
- newEnvp = (char **) PR_MALLOC((numEnv+1) * sizeof(char *));
- for (i = 0; i <= numEnv; i++) {
- newEnvp[i] = envp[i];
- }
- qsort((void *) newEnvp, (size_t) numEnv, sizeof(char *), compare);
- }
- if (assembleEnvBlock(newEnvp, &envBlock) == -1) {
- PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
- goto errorExit;
- }
-
- if (attr) {
- /* On OS/2, there is really no way to pass file handles for stdin, stdout,
- * and stderr to a new process. Instead, we can make it a child process
- * and make the given file handles a copy of our stdin, stdout, and stderr.
- * The child process then inherits ours, and we set ours back. Twisted
- * and gross I know. If you know a better way, please use it.
- */
- if (attr->stdinFd) {
- hStdIn = 0;
- DosDupHandle(hStdIn, &hStdInSave);
- DosDupHandle((HFILE) attr->stdinFd->secret->md.osfd, &hStdIn);
- }
- if (attr->stdoutFd) {
- hStdOut = 1;
- DosDupHandle(hStdOut, &hStdOutSave);
- DosDupHandle((HFILE) attr->stdoutFd->secret->md.osfd, &hStdOut);
+ PRProcess *proc = NULL;
+ char *cmdLine = NULL;
+ char **newEnvp = NULL;
+ char *envBlock = NULL;
+
+ STARTDATA startData = {0};
+ APIRET rc;
+ ULONG ulAppType = 0;
+ PID pid = 0;
+ char *pEnvWPS = NULL;
+ char *pszComSpec;
+ char pszEXEName[CCHMAXPATH] = "";
+ char pszFormatString[CCHMAXPATH];
+ char pszObjectBuffer[CCHMAXPATH];
+ char *pszFormatResult = NULL;
+
+ proc = PR_NEW(PRProcess);
+ if (!proc) {
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
+ goto errorExit;
+ }
+
+ if (assembleCmdLine(argv, &cmdLine) == -1) {
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
+ goto errorExit;
+ }
+
+ if (envp == NULL) {
+ newEnvp = NULL;
+ } else {
+ int i;
+ int numEnv = 0;
+ while (envp[numEnv]) {
+ numEnv++;
}
- if (attr->stderrFd) {
- hStdErr = 2;
- DosDupHandle(hStdErr, &hStdErrSave);
- DosDupHandle((HFILE) attr->stderrFd->secret->md.osfd, &hStdErr);
+ newEnvp = (char **) PR_MALLOC((numEnv+1) * sizeof(char *));
+ for (i = 0; i <= numEnv; i++) {
+ newEnvp[i] = envp[i];
}
- }
-
- retVal = DosExecPgm(szFailed,
- CCHMAXPATH,
- EXEC_ASYNCRESULT,
- cmdLine,
- envBlock,
- &procInfo,
- argv[0]);
-
- /* Restore our old values. Hope this works */
- if(hStdInSave != -1){
- DosDupHandle(hStdInSave, &hStdIn);
- DosClose(hStdInSave);
- }
- if(hStdOutSave != -1){
- DosDupHandle(hStdOutSave, &hStdOut);
- DosClose(hStdOutSave);
- }
- if(hStdErrSave != -1){
- DosDupHandle(hStdErrSave, &hStdErr);
- DosClose(hStdErrSave);
- }
+ qsort((void *) newEnvp, (size_t) numEnv, sizeof(char *), compare);
+ }
+ if (assembleEnvBlock(newEnvp, &envBlock) == -1) {
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
+ goto errorExit;
+ }
+
+ if (attr) {
+ PR_ASSERT(!"Not implemented");
+ }
- if (retVal != NO_ERROR) {
- /* XXX what error code? */
- PR_SetError(PR_UNKNOWN_ERROR, retVal);
+ rc = DosQueryAppType(path, &ulAppType);
+ if (rc != NO_ERROR) {
+ char *pszDot = strrchr(path, '.');
+ if (pszDot) {
+ /* If it is a CMD file, launch the users command processor */
+ if (!stricmp(pszDot, ".cmd")) {
+ rc = DosScanEnv("COMSPEC", &pszComSpec);
+ if (!rc) {
+ strcpy(pszFormatString, "/C %s %s");
+ strcpy(pszEXEName, pszComSpec);
+ ulAppType = FAPPTYP_WINDOWCOMPAT;
+ }
+ }
+ }
+ }
+ if (ulAppType == 0) {
+ PR_SetError(PR_UNKNOWN_ERROR, 0);
goto errorExit;
- }
-
- proc->md.pid = procInfo.codeTerminate;
+ }
+
+ if ((ulAppType & FAPPTYP_WINDOWAPI) == FAPPTYP_WINDOWAPI) {
+ startData.SessionType = SSF_TYPE_PM;
+ }
+ else if (ulAppType & FAPPTYP_WINDOWCOMPAT) {
+ startData.SessionType = SSF_TYPE_WINDOWABLEVIO;
+ }
+ else {
+ startData.SessionType = SSF_TYPE_DEFAULT;
+ }
+
+ if (ulAppType & (FAPPTYP_WINDOWSPROT31 | FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSREAL))
+ {
+ strcpy(pszEXEName, "WINOS2.COM");
+ startData.SessionType = PROG_31_STDSEAMLESSVDM;
+ strcpy(pszFormatString, "/3 %s %s");
+ }
+
+ startData.InheritOpt = SSF_INHERTOPT_PARENT;
+
+ if (pszEXEName[0]) {
+ pszFormatResult = PR_MALLOC(strlen(pszFormatString)+strlen(path)+strlen(cmdLine));
+ sprintf(pszFormatResult, pszFormatString, path, cmdLine);
+ startData.PgmInputs = pszFormatResult;
+ } else {
+ strcpy(pszEXEName, path);
+ startData.PgmInputs = cmdLine;
+ }
+ startData.PgmName = pszEXEName;
+
+ startData.Length = sizeof(startData);
+ startData.Related = SSF_RELATED_INDEPENDENT;
+ startData.ObjectBuffer = pszObjectBuffer;
+ startData.ObjectBuffLen = CCHMAXPATH;
+ startData.Environment = envBlock;
+
+ rc = DosStartSession(&startData, &ulAppType, &pid);
+
+ if ((rc != NO_ERROR) && (rc != ERROR_SMG_START_IN_BACKGROUND)) {
+ PR_SetError(PR_UNKNOWN_ERROR, 0);
+ }
+
+ proc->md.pid = pid;
- PR_DELETE(cmdLine);
- if (envBlock) {
- PR_DELETE(envBlock);
- }
- return proc;
+ if (pszFormatResult) {
+ PR_DELETE(pszFormatResult);
+ }
+
+ PR_DELETE(cmdLine);
+ if (newEnvp) {
+ PR_DELETE(newEnvp);
+ }
+ if (envBlock) {
+ PR_DELETE(envBlock);
+ }
+ return proc;
errorExit:
- if (cmdLine) {
- PR_DELETE(cmdLine);
- }
- if (envBlock) {
- PR_DELETE(envBlock);
- }
- if (proc) {
- PR_DELETE(proc);
- }
- return NULL;
-
-} /* _PR_CreateWindowsProcess */
+ if (cmdLine) {
+ PR_DELETE(cmdLine);
+ }
+ if (newEnvp) {
+ PR_DELETE(newEnvp);
+ }
+ if (envBlock) {
+ PR_DELETE(envBlock);
+ }
+ if (proc) {
+ PR_DELETE(proc);
+ }
+ return NULL;
+} /* _PR_CreateOS2Process */
PRStatus _PR_DetachOS2Process(PRProcess *process)
{
@@ -506,14 +452,12 @@ _PR_MD_WAKEUP_CPUS( void )
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;
}
@@ -523,21 +467,18 @@ void * _MD_MemMap(
PROffset64 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;
}
diff --git a/pr/src/md/os2/os2poll.c b/pr/src/md/os2/os2poll.c
index 12f199f6..0b9c0de6 100644
--- a/pr/src/md/os2/os2poll.c
+++ b/pr/src/md/os2/os2poll.c
@@ -37,54 +37,64 @@
*/
#ifdef XP_OS2_EMX
- #include <sys/time.h> /* For timeval. */
+ #include <sys/time.h> /* For timeval. */
#endif
#include "primpl.h"
-PRInt32 _PR_MD_PR_POLL(
- PRPollDesc *pds, PRIntn npds, PRIntervalTime timeout)
+#ifndef BSD_SELECT
+/* Utility functions called when using OS/2 select */
+
+PRBool IsSocketSet( PRInt32 osfd, int* socks, int start, int count )
+{
+ int i;
+ PRBool isSet = PR_FALSE;
+
+ for( i = start; i < start+count; i++ )
+ {
+ if( socks[i] == osfd )
+ isSet = PR_TRUE;
+ }
+
+ return isSet;
+}
+#endif
+
+PRInt32 _PR_MD_PR_POLL(PRPollDesc *pds, PRIntn npds, PRIntervalTime timeout)
{
- PRInt32 osfd;
- int maxfd = -1;
+#ifdef BSD_SELECT
fd_set rd, wt, ex;
+#else
+ int rd, wt, ex;
+ int* socks;
+ unsigned long msecs;
+ int i, j;
+#endif
PRFileDesc *bottom;
PRPollDesc *pd, *epd;
- PRInt32 ready, err;
- PRThread *me = _PR_MD_CURRENT_THREAD();
- struct timeval tv, *tvp = NULL;
+ PRInt32 maxfd = -1, ready, err;
+ PRIntervalTime remaining, elapsed, start;
- /*
- * For restarting _MD_SELECT() if it is interrupted by a signal.
- * We use these variables to figure out how much time has elapsed
- * and how much of the timeout still remains.
- */
- PRIntervalTime start, elapsed, remaining;
+#ifdef BSD_SELECT
+ struct timeval tv, *tvp = NULL;
- if (_PR_PENDING_INTERRUPT(me))
+ FD_ZERO(&rd);
+ FD_ZERO(&wt);
+ FD_ZERO(&ex);
+#else
+ rd = 0;
+ wt = 0;
+ ex = 0;
+ socks = (int) PR_MALLOC( npds * 3 * sizeof(int) );
+
+ if (!socks)
{
- me->flags &= ~_PR_INTERRUPT;
- PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
return -1;
}
+#endif
- /*
- ** Is it an empty set? If so, just sleep for the timeout and return
- */
- if (0 == npds)
- {
- PR_Sleep(timeout);
- return 0;
- }
-
- remaining = timeout;
- start = PR_IntervalNow();
-
- FD_ZERO(&rd);
- FD_ZERO(&wt);
- FD_ZERO(&ex);
-
- ready = 0;
+ ready = 0;
for (pd = pds, epd = pd + npds; pd < epd; pd++)
{
PRInt16 in_flags_read = 0, in_flags_write = 0;
@@ -95,19 +105,17 @@ PRInt32 _PR_MD_PR_POLL(
if (pd->in_flags & PR_POLL_READ)
{
in_flags_read = (pd->fd->methods->poll)(
- pd->fd, (PRInt16)(pd->in_flags & ~PR_POLL_WRITE),
- &out_flags_read);
+ pd->fd, pd->in_flags & ~PR_POLL_WRITE, &out_flags_read);
}
if (pd->in_flags & PR_POLL_WRITE)
{
in_flags_write = (pd->fd->methods->poll)(
- pd->fd, (PRInt16)(pd->in_flags & ~PR_POLL_READ),
- &out_flags_write);
+ pd->fd, pd->in_flags & ~PR_POLL_READ, &out_flags_write);
}
- if ((0 != (in_flags_read & out_flags_read))
- || (0 != (in_flags_write & out_flags_write)))
+ if ((0 != (in_flags_read & out_flags_read)) ||
+ (0 != (in_flags_write & out_flags_write)))
{
- /* this one's ready right now (buffered input) */
+ /* this one's ready right now */
if (0 == ready)
{
/*
@@ -128,37 +136,67 @@ PRInt32 _PR_MD_PR_POLL(
else
{
pd->out_flags = 0; /* pre-condition */
+
/* make sure this is an NSPR supported stack */
bottom = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
PR_ASSERT(NULL != bottom); /* what to do about that? */
- if ((NULL != bottom)
- && (_PR_FILEDESC_OPEN == bottom->secret->state))
+ if ((NULL != bottom) &&
+ (_PR_FILEDESC_OPEN == bottom->secret->state))
{
if (0 == ready)
{
- osfd = bottom->secret->md.osfd;
- if (osfd > maxfd) maxfd = osfd;
+ PRInt32 osfd = bottom->secret->md.osfd;
+ if (osfd > maxfd)
+ maxfd = osfd;
if (in_flags_read & PR_POLL_READ)
{
pd->out_flags |= _PR_POLL_READ_SYS_READ;
+#ifdef BSD_SELECT
FD_SET(osfd, &rd);
+#else
+ socks[rd] = osfd;
+ rd++;
+#endif
}
if (in_flags_read & PR_POLL_WRITE)
{
pd->out_flags |= _PR_POLL_READ_SYS_WRITE;
+#ifdef BSD_SELECT
FD_SET(osfd, &wt);
+#else
+ socks[npds+wt] = osfd;
+ wt++;
+#endif
}
if (in_flags_write & PR_POLL_READ)
{
pd->out_flags |= _PR_POLL_WRITE_SYS_READ;
+#ifdef BSD_SELECT
FD_SET(osfd, &rd);
+#else
+ socks[rd] = osfd;
+ rd++;
+#endif
}
if (in_flags_write & PR_POLL_WRITE)
{
pd->out_flags |= _PR_POLL_WRITE_SYS_WRITE;
+#ifdef BSD_SELECT
FD_SET(osfd, &wt);
+#else
+ socks[npds+wt] = osfd;
+ wt++;
+#endif
+ }
+ if (pd->in_flags & PR_POLL_EXCEPT)
+ {
+#ifdef BSD_SELECT
+ FD_SET(osfd, &ex);
+#else
+ socks[npds*2+ex] = osfd;
+ ex++;
+#endif
}
- if (pd->in_flags & PR_POLL_EXCEPT) FD_SET(osfd, &ex);
}
}
else
@@ -176,11 +214,25 @@ PRInt32 _PR_MD_PR_POLL(
}
}
}
+ else
+ {
+ pd->out_flags = 0;
+ }
}
- if (0 != ready) return ready; /* no need to block */
+ if (0 != ready)
+ {
+#ifndef BSD_SELECT
+ free(socks);
+#endif
+ return ready; /* no need to block */
+ }
+
+ remaining = timeout;
+ start = PR_IntervalNow();
retry:
+#ifdef BSD_SELECT
if (timeout != PR_INTERVAL_NO_TIMEOUT)
{
PRInt32 ticksPerSecond = PR_TicksPerSecond();
@@ -191,21 +243,50 @@ retry:
}
ready = _MD_SELECT(maxfd + 1, &rd, &wt, &ex, tvp);
- if (ready == -1 && errno == EINTR)
+#else
+ switch (timeout)
+ {
+ case PR_INTERVAL_NO_WAIT:
+ msecs = 0;
+ break;
+ case PR_INTERVAL_NO_TIMEOUT:
+ msecs = -1;
+ break;
+ default:
+ msecs = PR_IntervalToMilliseconds(remaining);
+ }
+
+ /* compact array */
+ for( i = rd, j = npds; j < npds+wt; i++,j++ )
+ socks[i] = socks[j];
+ for( i = rd+wt, j = npds*2; j < npds*2+ex; i++,j++ )
+ socks[i] = socks[j];
+
+ ready = _MD_SELECT(socks, rd, wt, ex, msecs);
+#endif
+
+ if (ready == -1 && errno == SOCEINTR)
{
- if (timeout == PR_INTERVAL_NO_TIMEOUT) goto retry;
- else
+ if (timeout == PR_INTERVAL_NO_TIMEOUT)
+ goto retry;
+ else
{
- elapsed = (PRIntervalTime) (PR_IntervalNow() - start);
- if (elapsed > timeout) ready = 0; /* timed out */
- else
+ elapsed = (PRIntervalTime) (PR_IntervalNow() - start);
+ if (elapsed > timeout)
+ ready = 0; /* timed out */
+ else
{
- remaining = timeout - elapsed;
- goto retry;
+ remaining = timeout - elapsed;
+ goto retry;
}
- }
+ }
}
+ /*
+ ** Now to unravel the select sets back into the client's poll
+ ** descriptor list. Is this possibly an area for pissing away
+ ** a few cycles or what?
+ */
if (ready > 0)
{
ready = 0;
@@ -214,26 +295,44 @@ retry:
PRInt16 out_flags = 0;
if ((NULL != pd->fd) && (0 != pd->in_flags))
{
+ PRInt32 osfd;
bottom = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
PR_ASSERT(NULL != bottom);
osfd = bottom->secret->md.osfd;
+#ifdef BSD_SELECT
if (FD_ISSET(osfd, &rd))
+#else
+ if( IsSocketSet(osfd, socks, 0, rd) )
+#endif
{
if (pd->out_flags & _PR_POLL_READ_SYS_READ)
out_flags |= PR_POLL_READ;
if (pd->out_flags & _PR_POLL_WRITE_SYS_READ)
out_flags |= PR_POLL_WRITE;
- }
+ }
+
+#ifdef BSD_SELECT
if (FD_ISSET(osfd, &wt))
+#else
+ if( IsSocketSet(osfd, socks, rd, wt) )
+#endif
{
if (pd->out_flags & _PR_POLL_READ_SYS_WRITE)
out_flags |= PR_POLL_READ;
if (pd->out_flags & _PR_POLL_WRITE_SYS_WRITE)
out_flags |= PR_POLL_WRITE;
+ }
+
+#ifdef BSD_SELECT
+ if (FD_ISSET(osfd, &ex))
+#else
+ if( IsSocketSet(osfd, socks, rd+wt, ex) )
+#endif
+ {
+ out_flags |= PR_POLL_EXCEPT;
}
- if (FD_ISSET(osfd, &ex)) out_flags |= PR_POLL_EXCEPT;
}
pd->out_flags = out_flags;
if (out_flags) ready++;
@@ -242,39 +341,42 @@ retry:
}
else if (ready < 0)
{
- err = _MD_ERRNO();
- if (err == EBADF)
+ err = _MD_ERRNO();
+ if (err == EBADF)
{
- /* Find the bad fds */
- ready = 0;
- for (pd = pds, epd = pd + npds; pd < epd; pd++)
+ /* Find the bad fds */
+ int optval;
+ int optlen = sizeof(optval);
+ ready = 0;
+ for (pd = pds, epd = pd + npds; pd < epd; pd++)
{
- int optval;
- int optlen = sizeof(optval);
- pd->out_flags = 0;
- if ((NULL == pd->fd) || (pd->in_flags == 0)) continue;
- bottom = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
- if (getsockopt(bottom->secret->md.osfd, SOL_SOCKET,
- SO_TYPE, (char *) &optval, &optlen) == -1)
+ pd->out_flags = 0;
+ if ((NULL != pd->fd) && (0 != pd->in_flags))
{
- PR_ASSERT(_MD_ERRNO() == ENOTSOCK);
- if (_MD_ERRNO() == ENOTSOCK)
+ bottom = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
+ if (getsockopt(bottom->secret->md.osfd, SOL_SOCKET,
+ SO_TYPE, (char *) &optval, &optlen) == -1)
{
- pd->out_flags = PR_POLL_NVAL;
- ready++;
+ PR_ASSERT(sock_errno() == SOCENOTSOCK);
+ if (sock_errno() == SOCENOTSOCK)
+ {
+ pd->out_flags = PR_POLL_NVAL;
+ ready++;
+ }
}
}
- }
- PR_ASSERT(ready > 0);
- }
- else
- {
- PR_ASSERT(err != EINTR); /* should have been handled above */
- _PR_MD_MAP_SELECT_ERROR(err);
+ }
+ PR_ASSERT(ready > 0);
}
- }
- return ready;
- }
+ else
+ _PR_MD_MAP_SELECT_ERROR(err);
+ }
+
+#ifndef BSD_SELECT
+ free(socks);
+#endif
+ return ready;
+}
#ifdef XP_OS2_EMX
HMTX thread_select_mutex = 0; /* because EMX's select is not thread safe - duh! */
diff --git a/pr/src/md/os2/os2sock.c b/pr/src/md/os2/os2sock.c
index 529e0e5a..ecdb31ff 100644
--- a/pr/src/md/os2/os2sock.c
+++ b/pr/src/md/os2/os2sock.c
@@ -46,9 +46,13 @@
#include "primpl.h"
#ifdef XP_OS2_EMX
- #include <sys/time.h> /* For timeval. */
+ #include <sys/time.h> /* For timeval. */
#endif
+#define _PR_INTERRUPT_CHECK_INTERVAL_SECS 5
+#define READ_FD 1
+#define WRITE_FD 2
+
void
_PR_MD_INIT_IO()
{
@@ -59,34 +63,19 @@ _PR_MD_INIT_IO()
PRInt32
-_PR_MD_SOCKET(int af, int type, int flags)
+_PR_MD_SOCKET(int domain, int type, int flags)
{
- int sock;
- PRUint32 one = 1;
- PRInt32 rv;
- PRInt32 err;
+ PRInt32 osfd, err;
- sock = socket(af, type, flags);
-
- if (sock == -1 )
- {
- int rv = sock_errno();
- soclose(sock);
- _PR_MD_MAP_SOCKET_ERROR(rv);
- return (PRInt32) -1;
- }
+ osfd = socket(domain, type, flags);
- /*
- ** Make the socket Non-Blocking
- */
- rv = ioctl( sock, FIONBIO, (char *) &one, sizeof(one));
- if ( rv != 0 )
+ if (osfd == -1)
{
err = sock_errno();
- return -1;
+ _PR_MD_MAP_SOCKET_ERROR(err);
}
- return (PRInt32)sock;
+ return(osfd);
}
/*
@@ -96,12 +85,13 @@ _PR_MD_SOCKET(int af, int type, int flags)
PRInt32
_MD_CloseSocket(PRInt32 osfd)
{
- PRInt32 rv = -1;
-
- rv = soclose((int) osfd );
- if (rv < 0)
- _PR_MD_MAP_SOCKET_ERROR(sock_errno());
+ PRInt32 rv, err;
+ rv = soclose(osfd);
+ if (rv == -1) {
+ err = sock_errno();
+ _PR_MD_MAP_CLOSE_ERROR(err);
+ }
return rv;
}
@@ -117,256 +107,276 @@ _MD_SocketAvailable(PRFileDesc *fd)
return result;
}
-PRInt32
-_MD_Accept(PRFileDesc *fd, PRNetAddr *raddr, PRUint32 *rlen,
- PRIntervalTime timeout )
+static PRInt32
+socket_io_wait( PRInt32 osfd, PRInt32 fd_type, PRIntervalTime timeout )
{
- PRInt32 osfd = fd->secret->md.osfd;
- PRInt32 rv, err;
+ PRInt32 rv = -1;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
+ PRIntervalTime epoch, now, elapsed, remaining;
+ PRBool wait_for_remaining;
+ PRInt32 syserror;
#ifdef BSD_SELECT
- fd_set rd;
- struct timeval tv, *tvp;
-
- FD_ZERO(&rd);
- FD_SET(osfd, &rd);
+ struct timeval tv;
+ fd_set rd_wr;
#else
int socks[1];
- socks[0] = osfd;
+ long lTimeout;
#endif
- if (timeout == PR_INTERVAL_NO_TIMEOUT)
- {
- while ((rv = accept(osfd, (struct sockaddr *) raddr, (int *) rlen)) == -1)
- {
- if (((err = sock_errno()) == EWOULDBLOCK)
- && (!fd->secret->nonblocking))
- {
+
+ switch (timeout) {
+ case PR_INTERVAL_NO_WAIT:
+ PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
+ break;
+ case PR_INTERVAL_NO_TIMEOUT:
+ /*
+ * This is a special case of the 'default' case below.
+ * Please see the comments there.
+ */
#ifdef BSD_SELECT
- if ((rv = _MD_SELECT(osfd + 1, &rd, NULL, NULL,NULL)) == -1) {
+ tv.tv_sec = _PR_INTERRUPT_CHECK_INTERVAL_SECS;
+ tv.tv_usec = 0;
+ FD_ZERO(&rd_wr);
+ do {
+ FD_SET(osfd, &rd_wr);
+ if (fd_type == READ_FD)
+ rv = _MD_SELECT(osfd + 1, &rd_wr, NULL, NULL, &tv);
+ else
+ rv = _MD_SELECT(osfd + 1, NULL, &rd_wr, NULL, &tv);
#else
- if ((rv = _MD_SELECT(socks, 1, 0, 0, -1)) == -1) {
-#endif
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
+ lTimeout = _PR_INTERRUPT_CHECK_INTERVAL_SECS * 1000;
+ do {
+ socks[0] = osfd;
+ if (fd_type == READ_FD)
+ rv = _MD_SELECT(socks, 1, 0, 0, lTimeout);
+ else
+ rv = _MD_SELECT(socks, 0, 1, 0, lTimeout);
+#endif
+ if (rv == -1 && (syserror = sock_errno()) != SOCEINTR) {
+ _PR_MD_MAP_SELECT_ERROR(syserror);
break;
- }
- }
- else {
- _PR_MD_MAP_ACCEPT_ERROR(err);
- break;
- }
- }
- return(rv);
- }
- else if (timeout == PR_INTERVAL_NO_WAIT)
- {
- if ((rv = accept(osfd, (struct sockaddr *) raddr, (int *) rlen)) == -1)
- {
- if (((err = sock_errno()) == EWOULDBLOCK)
- && (!fd->secret->nonblocking))
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- }
- else
- {
- _PR_MD_MAP_ACCEPT_ERROR(err);
- }
- }
- return(rv);
- }
- else
- {
-retry:
- if ((rv = accept(osfd, (struct sockaddr *) raddr, (int *) rlen)) == -1)
- {
- if (((err = sock_errno()) == EWOULDBLOCK)
- && (!fd->secret->nonblocking))
- {
+ }
+ if (_PR_PENDING_INTERRUPT(me)) {
+ me->flags &= ~_PR_INTERRUPT;
+ PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
+ rv = -1;
+ break;
+ }
+ } while (rv == 0 || (rv == -1 && syserror == EINTR));
+ break;
+ default:
+ now = epoch = PR_IntervalNow();
+ remaining = timeout;
#ifdef BSD_SELECT
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(timeout - PR_SecondsToInterval(tv.tv_sec));
- tvp = &tv;
- rv = _MD_SELECT(osfd + 1, &rd, NULL, NULL, tvp);
+ FD_ZERO(&rd_wr);
+#endif
+ do {
+ /*
+ * We block in _MD_SELECT for at most
+ * _PR_INTERRUPT_CHECK_INTERVAL_SECS seconds,
+ * so that there is an upper limit on the delay
+ * before the interrupt bit is checked.
+ */
+#ifdef BSD_SELECT
+ wait_for_remaining = PR_TRUE;
+ tv.tv_sec = PR_IntervalToSeconds(remaining);
+ if (tv.tv_sec > _PR_INTERRUPT_CHECK_INTERVAL_SECS) {
+ wait_for_remaining = PR_FALSE;
+ tv.tv_sec = _PR_INTERRUPT_CHECK_INTERVAL_SECS;
+ tv.tv_usec = 0;
+ } else {
+ tv.tv_usec = PR_IntervalToMicroseconds(
+ remaining -
+ PR_SecondsToInterval(tv.tv_sec));
+ }
+ FD_SET(osfd, &rd_wr);
+ if (fd_type == READ_FD)
+ rv = _MD_SELECT(osfd + 1, &rd_wr, NULL, NULL, &tv);
+ else
+ rv = _MD_SELECT(osfd + 1, NULL, &rd_wr, NULL, &tv);
#else
- long lTimeout = PR_IntervalToMilliseconds(timeout);
- rv = _MD_SELECT(socks, 1, 0, 0, lTimeout);
+ wait_for_remaining = PR_TRUE;
+ lTimeout = PR_IntervalToMilliseconds(remaining);
+ if (lTimeout > _PR_INTERRUPT_CHECK_INTERVAL_SECS * 1000) {
+ wait_for_remaining = PR_FALSE;
+ lTimeout = _PR_INTERRUPT_CHECK_INTERVAL_SECS * 1000;
+ }
+ socks[0] = osfd;
+ if (fd_type == READ_FD)
+ rv = _MD_SELECT(socks, 1, 0, 0, lTimeout);
+ else
+ rv = _MD_SELECT(socks, 0, 1, 0, lTimeout);
#endif
- if (rv > 0) {
- goto retry;
- }
- else if (rv == 0)
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
+ /*
+ * we don't consider EINTR a real error
+ */
+ if (rv == -1 && (syserror = sock_errno()) != SOCEINTR) {
+ _PR_MD_MAP_SELECT_ERROR(syserror);
+ break;
+ }
+ if (_PR_PENDING_INTERRUPT(me)) {
+ me->flags &= ~_PR_INTERRUPT;
+ PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
rv = -1;
- } else {
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
+ break;
}
- } else {
- _PR_MD_MAP_ACCEPT_ERROR(err);
- }
+ /*
+ * We loop again if _MD_SELECT timed out or got interrupted
+ * by a signal, and the timeout deadline has not passed yet.
+ */
+ if (rv == 0 || (rv == -1 && syserror == SOCEINTR)) {
+ /*
+ * If _MD_SELECT timed out, we know how much time
+ * we spent in blocking, so we can avoid a
+ * PR_IntervalNow() call.
+ */
+ if (rv == 0) {
+ if (wait_for_remaining) {
+ now += remaining;
+ } else {
+#ifdef BSD_SELECT
+ now += PR_SecondsToInterval(tv.tv_sec)
+ + PR_MicrosecondsToInterval(tv.tv_usec);
+#else
+ now += PR_MillisecondsToInterval(lTimeout);
+#endif
+ }
+ } else {
+ now = PR_IntervalNow();
+ }
+ elapsed = (PRIntervalTime) (now - epoch);
+ if (elapsed >= timeout) {
+ PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
+ rv = -1;
+ break;
+ } else {
+ remaining = timeout - elapsed;
+ }
+ }
+ } while (rv == 0 || (rv == -1 && syserror == SOCEINTR));
+ break;
}
- }
return(rv);
-} /* end _MD_Accept() */
+}
+PRInt32
+_MD_Accept(PRFileDesc *fd, PRNetAddr *addr,
+ PRUint32 *addrlen, PRIntervalTime timeout)
+{
+ PRInt32 osfd = fd->secret->md.osfd;
+ PRInt32 rv, err;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
+ while ((rv = accept(osfd, (struct sockaddr*) addr, (int*)addrlen)) == -1)
+ {
+ err = sock_errno();
+ if ((err == SOCEWOULDBLOCK) || (err == SOCECONNABORTED))
+ {
+ if (fd->secret->nonblocking) {
+ break;
+ }
+ if ((rv = socket_io_wait(osfd, READ_FD, timeout)) < 0)
+ goto done;
+ } else if ((err == SOCEINTR) && (!_PR_PENDING_INTERRUPT(me))){
+ continue;
+ } else {
+ break;
+ }
+ }
+ if (rv < 0) {
+ _PR_MD_MAP_ACCEPT_ERROR(err);
+ }
+done:
+ return(rv);
+}
PRInt32
_PR_MD_CONNECT(PRFileDesc *fd, const PRNetAddr *addr, PRUint32 addrlen,
PRIntervalTime timeout)
{
+ PRInt32 rv, err;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
PRInt32 osfd = fd->secret->md.osfd;
- PRInt32 rv;
- int err, len;
-#ifdef BSD_SELECT
-#ifdef XP_OS2//_VACPP
- fd_set wd;
-#else
- fd_set wd, ex;
-#endif #vacpp
- struct timeval tv, *tvp;
-#else
- int socks[1];
- long lTimeout = -1;
-#endif
- if ((rv = connect(osfd, (struct sockaddr *) addr, addrlen)) == -1)
+ /*
+ * We initiate the connection setup by making a nonblocking connect()
+ * call. If the connect() call fails, there are two cases we handle
+ * specially:
+ * 1. The connect() call was interrupted by a signal. In this case
+ * we simply retry connect().
+ * 2. The NSPR socket is nonblocking and connect() fails with
+ * EINPROGRESS. We first wait until the socket becomes writable.
+ * Then we try to find out whether the connection setup succeeded
+ * or failed.
+ */
+
+retry:
+ if ((rv = connect(osfd, (struct sockaddr *)addr, addrlen)) == -1)
{
err = sock_errno();
- if ((!fd->secret->nonblocking) && ((err == EINPROGRESS) || (err == EWOULDBLOCK)))
- {
-#ifdef BSD_SELECT
- if (timeout == PR_INTERVAL_NO_TIMEOUT)
- tvp = NULL;
- else
- {
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(timeout - PR_SecondsToInterval(tv.tv_sec));
- tvp = &tv;
+
+ if (err == SOCEINTR) {
+ if (_PR_PENDING_INTERRUPT(me)) {
+ me->flags &= ~_PR_INTERRUPT;
+ PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
+ return -1;
}
+ goto retry;
+ }
- FD_ZERO(&wd);
- FD_SET(osfd, &wd);
-#ifdef XP_OS2//_VACPP
- rv = _MD_SELECT(osfd + 1, NULL, &wd, NULL, tvp);
-#else
- FD_ZERO(&ex);
- FD_SET(osfd, &ex);
- rv = _MD_SELECT(osfd + 1, NULL, &wd, &ex, tvp);
-#endif #vacpp
-#else #!bsd_select
- if (timeout == PR_INTERVAL_NO_TIMEOUT)
- lTimeout = -1;
- else
- {
- lTimeout = PR_IntervalToMilliseconds(timeout);
+ if (!fd->secret->nonblocking && (err == SOCEINPROGRESS))
+ {
+ /*
+ * socket_io_wait() may return -1 or 1.
+ */
+
+ rv = socket_io_wait(osfd, WRITE_FD, timeout);
+ if (rv == -1) {
+ return -1;
}
-
- socks[0] = osfd;
-#ifdef XP_OS2//_VACPP
- rv = _MD_SELECT(socks, 0, 1, 0, lTimeout);
-#else
- rv = _MD_SELECT(socks, 0, 1, 1, lTimeout);
-#endif #vacpp
-#endif
- if (rv > 0)
- {
-#ifdef BSD_SELECT
-#ifdef XP_OS2//_VACPP
- if (FD_ISSET(osfd, &wd))
- {
- //DosSleep(0);
- len = sizeof(err);
- if (getsockopt(osfd, SOL_SOCKET, SO_ERROR,
- (char *) &err, &len) < 0)
- {
- _PR_MD_MAP_GETSOCKOPT_ERROR(sock_errno());
- return -1;
- }
- if (err != 0)
- {
- _PR_MD_MAP_CONNECT_ERROR(err);
- return -1;
- }
- else
- return 0; /* it's connected */
- }
- else
- return -1;
-#else
- if (FD_ISSET(osfd, &ex))
- {
- DosSleep(0);
- len = sizeof(err);
- if (getsockopt(osfd, SOL_SOCKET, SO_ERROR,
- (char *) &err, &len) < 0)
- {
- _PR_MD_MAP_GETSOCKOPT_ERROR(sock_errno());
- return -1;
- }
- if (err != 0)
- _PR_MD_MAP_CONNECT_ERROR(err);
- else
- PR_SetError(PR_UNKNOWN_ERROR, 0);
- return -1;
- }
- if (FD_ISSET(osfd, &wd))
- {
- /* it's connected */
- return 0;
- }
-#endif #vacpp
-#else #!bsd_select
- if (socks[0] == osfd)
- {
- len = sizeof(err);
- if (getsockopt(osfd, SOL_SOCKET, SO_ERROR,
- (char *) &err, &len) < 0)
- {
- _PR_MD_MAP_GETSOCKOPT_ERROR(sock_errno());
- return -1;
- }
-
- if (err != 0)
- {
- _PR_MD_MAP_CONNECT_ERROR(err);
- return -1;
- }
- else
- return 0; /* it's connected */
- }
- else
- return -1;
-#endif
+ PR_ASSERT(rv == 1);
+ if (_PR_PENDING_INTERRUPT(me)) {
+ me->flags &= ~_PR_INTERRUPT;
+ PR_SetError( PR_PENDING_INTERRUPT_ERROR, 0);
+ return -1;
}
- else if (rv == 0)
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- return(-1);
- } else if (rv < 0)
- {
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
- return(-1);
+ err = _MD_os2_get_nonblocking_connect_error(osfd);
+ if (err != 0) {
+ _PR_MD_MAP_CONNECT_ERROR(err);
+ return -1;
}
- }
+ return 0;
+ }
+
_PR_MD_MAP_CONNECT_ERROR(err);
}
- return rv;
-}
+ return rv;
+} /* _MD_connect */
PRInt32
_PR_MD_BIND(PRFileDesc *fd, const PRNetAddr *addr, PRUint32 addrlen)
{
- PRInt32 rv;
-
- rv = bind(fd->secret->md.osfd, (struct sockaddr*) &(addr->inet), addrlen);
+ PRInt32 rv, err;
+ rv = bind(fd->secret->md.osfd, (struct sockaddr *) addr, (int )addrlen);
+ if (rv < 0) {
+ err = sock_errno();
+ _PR_MD_MAP_BIND_ERROR(err);
+ }
+ return(rv);
+}
- if (rv == -1) {
- _PR_MD_MAP_BIND_ERROR(sock_errno());
- return -1;
- }
- return 0;
+PRInt32
+_PR_MD_LISTEN(PRFileDesc *fd, PRIntn backlog)
+{
+ PRInt32 rv, err;
+ rv = listen(fd->secret->md.osfd, backlog);
+ if (rv < 0) {
+ err = sock_errno();
+ _PR_MD_MAP_DEFAULT_ERROR(err);
+ }
+ return(rv);
}
@@ -376,70 +386,27 @@ _PR_MD_RECV(PRFileDesc *fd, void *buf, PRInt32 amount, PRIntn flags,
{
PRInt32 osfd = fd->secret->md.osfd;
PRInt32 rv, err;
-#ifdef BSD_SELECT
- struct timeval tv, *tvp;
- fd_set rd;
-#else
- int socks[1];
- long lTimeout = -1;
-#endif
- int osflags;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
- if (0 == flags) {
- osflags = 0;
- } else {
- PR_ASSERT(PR_MSG_PEEK == flags);
- osflags = MSG_PEEK;
- }
- while ((rv = recv( osfd, buf, amount, osflags)) == -1)
+ while ((rv = recv(osfd,buf,amount,flags)) == -1)
{
- if (((err = sock_errno()) == EWOULDBLOCK)
- && (!fd->secret->nonblocking))
- {
-#ifdef BSD_SELECT
- FD_ZERO(&rd);
- FD_SET(osfd, &rd);
- if (timeout == PR_INTERVAL_NO_TIMEOUT)
- {
- tvp = NULL;
- }
- else
- {
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(
- timeout - PR_SecondsToInterval(tv.tv_sec));
- tvp = &tv;
- }
- if ((rv = _MD_SELECT(osfd + 1, &rd, NULL, NULL, tvp)) == -1)
-#else
- socks[0] = osfd;
- if (timeout == PR_INTERVAL_NO_TIMEOUT)
- {
- lTimeout = -1;
- }
- else
- {
- lTimeout = PR_IntervalToMilliseconds(timeout);
- }
- if ((rv = _MD_SELECT(socks, 1, 0, 0, lTimeout)) == -1)
-#endif
- {
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
- return -1;
- }
- else if (rv == 0)
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- rv = -1;
+ err = sock_errno();
+ if ((err == SOCEWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
break;
}
- }
- else
- {
- _PR_MD_MAP_RECV_ERROR(err);
+ if ((rv = socket_io_wait(osfd, READ_FD, timeout)) < 0)
+ goto done;
+ } else if ((err == SOCEINTR) && (!_PR_PENDING_INTERRUPT(me))){
+ continue;
+ } else {
break;
}
- } /* end while() */
+ }
+ if (rv < 0) {
+ _PR_MD_MAP_RECV_ERROR(err);
+ }
+done:
return(rv);
}
@@ -449,108 +416,42 @@ _PR_MD_SEND(PRFileDesc *fd, const void *buf, PRInt32 amount, PRIntn flags,
{
PRInt32 osfd = fd->secret->md.osfd;
PRInt32 rv, err;
-#ifdef BSD_SELECT
- struct timeval tv, *tvp;
- fd_set wd;
-#else
- int socks[1];
- long lTimeout = -1;
-#endif
- PRInt32 bytesSent = 0;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
- while(bytesSent < amount )
+ while ((rv = send(osfd,buf,amount,flags)) == -1)
{
- while ((rv = send( osfd, (char *) buf, amount, 0 )) == -1)
- {
- if (((err = sock_errno()) == EWOULDBLOCK)
- && (!fd->secret->nonblocking))
- {
-#ifdef BSD_SELECT
- if ( timeout == PR_INTERVAL_NO_TIMEOUT )
- {
- tvp = NULL;
- }
- else
- {
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(
- timeout - PR_SecondsToInterval(tv.tv_sec));
- tvp = &tv;
- }
- FD_ZERO(&wd);
- FD_SET(osfd, &wd);
- if ((rv = _MD_SELECT( osfd + 1, NULL, &wd, NULL,tvp)) == -1) {
-#else
- if ( timeout == PR_INTERVAL_NO_TIMEOUT )
- {
- lTimeout = -1;
- }
- else
- {
- lTimeout = PR_IntervalToMilliseconds(timeout);
- }
- socks[0] = osfd;
- if ((rv = _MD_SELECT( socks, 0, 1, 0, lTimeout)) == -1) {
-#endif
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
- break;
- }
- if (rv == 0)
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- return -1;
- }
- }
- else {
- _PR_MD_MAP_SEND_ERROR(err);
- return -1;
+ err = sock_errno();
+ if ((err == SOCEWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
+ break;
}
- }
- bytesSent += rv;
- if (fd->secret->nonblocking)
- {
+ if ((rv = socket_io_wait(osfd, WRITE_FD, timeout)) < 0)
+ goto done;
+ } else if ((err == SOCEINTR) && (!_PR_PENDING_INTERRUPT(me))){
+ continue;
+ } else {
break;
}
- if ((rv >= 0) && (bytesSent < amount ))
- {
-#ifdef BSD_SELECT
- if ( timeout == PR_INTERVAL_NO_TIMEOUT )
- {
- tvp = NULL;
- }
- else
- {
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(
- timeout - PR_SecondsToInterval(tv.tv_sec));
- tvp = &tv;
- }
- FD_ZERO(&wd);
- FD_SET(osfd, &wd);
- if ((rv = _MD_SELECT(osfd + 1, NULL, &wd, NULL,tvp)) == -1) {
-#else
- if ( timeout == PR_INTERVAL_NO_TIMEOUT )
- {
- lTimeout = -1;
- }
- else
- {
- lTimeout = PR_IntervalToMilliseconds(timeout);
- }
- socks[0] = osfd;
- if ((rv = _MD_SELECT(socks, 0, 1, 0,lTimeout)) == -1) {
-#endif
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
- break;
- }
- if (rv == 0)
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- return -1;
- }
+ }
+
+ /*
+ * optimization; if bytes sent is less than "amount" call
+ * select before returning. This is because it is likely that
+ * the next send() call will return EWOULDBLOCK.
+ */
+ if ((!fd->secret->nonblocking) && (rv > 0) && (rv < amount)
+ && (timeout != PR_INTERVAL_NO_WAIT))
+ {
+ if (socket_io_wait(osfd, WRITE_FD, timeout)< 0) {
+ rv = -1;
+ goto done;
}
}
- return bytesSent;
+ if (rv < 0) {
+ _PR_MD_MAP_SEND_ERROR(err);
+ }
+done:
+ return(rv);
}
PRInt32
@@ -559,109 +460,29 @@ _PR_MD_SENDTO(PRFileDesc *fd, const void *buf, PRInt32 amount, PRIntn flags,
{
PRInt32 osfd = fd->secret->md.osfd;
PRInt32 rv, err;
- PRInt32 bytesSent = 0;
-#ifdef BSD_SELECT
- struct timeval tv, *tvp;
- fd_set wd;
-#else
- int socks[1];
- long lTimeout = -1;
-#endif
-
- while(bytesSent < amount)
+ PRThread *me = _PR_MD_CURRENT_THREAD();
+ while ((rv = sendto(osfd, buf, amount, flags,
+ (struct sockaddr *) addr, addrlen)) == -1)
{
- while ((rv = sendto( osfd, (char *) buf, amount, 0, (struct sockaddr *) addr,
- addrlen)) == -1)
- {
- if (((err = sock_errno()) == EWOULDBLOCK)
- && (!fd->secret->nonblocking))
- {
-#ifdef BSD_SELECT
- if ( timeout == PR_INTERVAL_NO_TIMEOUT )
- {
- tvp = NULL;
- }
- else
- {
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(
- timeout - PR_SecondsToInterval(tv.tv_sec));
- tvp = &tv;
- }
- FD_ZERO(&wd);
- FD_SET(osfd, &wd);
- if ((rv = _MD_SELECT(osfd + 1, NULL, &wd, NULL, tvp)) == -1) {
-#else
- if ( timeout == PR_INTERVAL_NO_TIMEOUT )
- {
- lTimeout = -1;
- }
- else
- {
- lTimeout = PR_IntervalToMilliseconds(timeout);
- }
- socks[0] = osfd;
- if ((rv = _MD_SELECT(socks, 0, 1, 0, lTimeout)) == -1) {
-#endif
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
- break;
- }
- if (rv == 0)
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- return -1;
- }
- }
- else {
- _PR_MD_MAP_SENDTO_ERROR(err);
- return -1;
- }
- }
- bytesSent += rv;
- if (fd->secret->nonblocking)
- {
- break;
- }
- if ((rv >= 0) && (bytesSent < amount ))
+ err = sock_errno();
+ if ((err == SOCEWOULDBLOCK))
{
-#ifdef BSD_SELECT
- if ( timeout == PR_INTERVAL_NO_TIMEOUT )
- {
- tvp = NULL;
- }
- else
- {
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(
- timeout - PR_SecondsToInterval(tv.tv_sec));
- tvp = &tv;
- }
- FD_ZERO(&wd);
- FD_SET(osfd, &wd);
- if ((rv = _MD_SELECT( osfd + 1, NULL, &wd, NULL, tvp)) == -1) {
-#else
- if ( timeout == PR_INTERVAL_NO_TIMEOUT )
- {
- lTimeout = -1;
- }
- else
- {
- lTimeout = PR_IntervalToMilliseconds(timeout);
- }
- socks[0] = osfd;
- if ((rv = _MD_SELECT( socks, 0, 1, 0, lTimeout)) == -1) {
-#endif
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
+ if (fd->secret->nonblocking) {
break;
}
- if (rv == 0)
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- return -1;
- }
+ if ((rv = socket_io_wait(osfd, WRITE_FD, timeout)) < 0)
+ goto done;
+ } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))){
+ continue;
+ } else {
+ break;
}
}
- return bytesSent;
+ if (rv < 0) {
+ _PR_MD_MAP_SENDTO_ERROR(err);
+ }
+done:
+ return(rv);
}
PRInt32
@@ -670,103 +491,86 @@ _PR_MD_RECVFROM(PRFileDesc *fd, void *buf, PRInt32 amount, PRIntn flags,
{
PRInt32 osfd = fd->secret->md.osfd;
PRInt32 rv, err;
- PRUint32 addrlen_temp = *addrlen;
-#ifdef BSD_SELECT
- struct timeval tv, *tvp;
- fd_set rd;
-#else
- int socks[1];
- long lTimeout = -1;
-#endif
+ PRThread *me = _PR_MD_CURRENT_THREAD();
- while ((rv = recvfrom( osfd, (char *) buf, amount, 0, (struct sockaddr *) addr,
- (int *) addrlen)) == -1)
+ while( (*addrlen = PR_NETADDR_SIZE(addr)),
+ ((rv = recvfrom(osfd, buf, amount, flags,
+ (struct sockaddr *) addr, (int *)addrlen)) == -1))
{
- if (((err = sock_errno()) == EWOULDBLOCK)
- && (!fd->secret->nonblocking))
- {
-#ifdef BSD_SELECT
- if (timeout == PR_INTERVAL_NO_TIMEOUT)
- {
- tvp = NULL;
- }
- else
- {
- tv.tv_sec = PR_IntervalToSeconds(timeout);
- tv.tv_usec = PR_IntervalToMicroseconds(
- timeout - PR_SecondsToInterval(tv.tv_sec));
- tvp = &tv;
- }
- FD_ZERO(&rd);
- FD_SET(osfd, &rd);
- if ((rv = _MD_SELECT(osfd + 1, &rd, NULL, NULL, tvp)) == -1)
-#else
- if (timeout == PR_INTERVAL_NO_TIMEOUT)
- {
- lTimeout = -1;
- }
- else
- {
- lTimeout = PR_IntervalToMilliseconds(timeout);
- }
- socks[0] = osfd;
- if ((rv = _MD_SELECT(socks, 1, 0, 0, lTimeout)) == -1)
-#endif
- {
- _PR_MD_MAP_SELECT_ERROR(sock_errno());
- return -1;
- } else if (rv == 0)
- {
- PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
- rv = -1;
+ err = sock_errno();
+ if ((err == SOCEWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
break;
}
-
- /* recvfrom blows this value away if it fails first time */
- *addrlen = addrlen_temp;
- }
- else
- {
- _PR_MD_MAP_RECVFROM_ERROR(err);
+ if ((rv = socket_io_wait(osfd, READ_FD, timeout)) < 0)
+ goto done;
+ } else if ((err == SOCEINTR) && (!_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)
+_PR_MD_WRITEV(PRFileDesc *fd, const PRIOVec *iov, PRInt32 iov_size,
+ PRIntervalTime timeout)
{
- int index;
- int sent = 0;
- int rv;
+ PRInt32 rv, err;
+ PRThread *me = _PR_MD_CURRENT_THREAD();
+ PRInt32 index, amount = 0;
+ PRInt32 osfd = fd->secret->md.osfd;
- for (index=0; index < iov_size; index++)
- {
- 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 (rv < 0)
- {
- if (fd->secret->nonblocking
- && (PR_GetError() == PR_WOULD_BLOCK_ERROR)
- && (sent > 0))
- {
- return sent;
- }
- else
- {
- return -1;
- }
+ /*
+ * Calculate the total number of bytes to be sent; needed for
+ * optimization later.
+ * We could avoid this if this number was passed in; but it is
+ * probably not a big deal because iov_size is usually small (less than
+ * 3)
+ */
+ if (!fd->secret->nonblocking) {
+ for (index=0; index<iov_size; index++) {
+ amount += iov[index].iov_len;
+ }
+ }
+
+ while ((rv = writev(osfd, (const struct iovec*)iov, iov_size)) == -1) {
+ err = sock_errno();
+ if ((err == SOCEWOULDBLOCK)) {
+ if (fd->secret->nonblocking) {
+ break;
}
- /* Only a nonblocking socket can have partial sends */
- PR_ASSERT(fd->secret->nonblocking);
- return sent;
+ if ((rv = socket_io_wait(osfd, WRITE_FD, timeout))<0)
+ goto done;
+ } else if ((err == EINTR) && (!_PR_PENDING_INTERRUPT(me))){
+ continue;
+ } else {
+ break;
+ }
+ }
+
+ /*
+ * optimization; if bytes sent is less than "amount" call
+ * select before returning. This is because it is likely that
+ * the next writev() call will return EWOULDBLOCK.
+ */
+ if ((!fd->secret->nonblocking) && (rv > 0) && (rv < amount)
+ && (timeout != PR_INTERVAL_NO_WAIT)) {
+ if (socket_io_wait(osfd, WRITE_FD, timeout) < 0) {
+ rv = -1;
+ goto done;
}
}
- return sent;
+ if (rv < 0) {
+ _PR_MD_MAP_WRITEV_ERROR(err);
+ }
+done:
+ return(rv);
}
PRInt32
@@ -781,63 +585,77 @@ _PR_MD_SHUTDOWN(PRFileDesc *fd, PRIntn how)
}
PRStatus
-_PR_MD_GETSOCKNAME(PRFileDesc *fd, PRNetAddr *addr, PRUint32 *len)
+_PR_MD_GETSOCKNAME(PRFileDesc *fd, PRNetAddr *addr, PRUint32 *addrlen)
{
- PRInt32 rv;
+ PRInt32 rv, err;
- rv = getsockname((int)fd->secret->md.osfd, (struct sockaddr *)addr, (int *) len);
- if (rv==0)
- return PR_SUCCESS;
- else {
- _PR_MD_MAP_GETSOCKNAME_ERROR(sock_errno());
- return PR_FAILURE;
+ rv = getsockname(fd->secret->md.osfd,
+ (struct sockaddr *) addr, (int *)addrlen);
+ if (rv < 0) {
+ err = sock_errno();
+ _PR_MD_MAP_GETSOCKNAME_ERROR(err);
}
+ return rv==0?PR_SUCCESS:PR_FAILURE;
}
PRStatus
-_PR_MD_GETPEERNAME(PRFileDesc *fd, PRNetAddr *addr, PRUint32 *len)
+_PR_MD_GETPEERNAME(PRFileDesc *fd, PRNetAddr *addr, PRUint32 *addrlen)
{
- PRInt32 rv;
+ PRInt32 rv, err;
- rv = getpeername((int)fd->secret->md.osfd, (struct sockaddr *)addr, (int *) len);
- if (rv==0)
- return PR_SUCCESS;
- else {
- _PR_MD_MAP_GETPEERNAME_ERROR(sock_errno());
- return PR_FAILURE;
+ rv = getpeername(fd->secret->md.osfd,
+ (struct sockaddr *) addr, (int *)addrlen);
+ if (rv < 0) {
+ err = sock_errno();
+ _PR_MD_MAP_GETPEERNAME_ERROR(err);
}
+ return rv==0?PR_SUCCESS:PR_FAILURE;
}
PRStatus
-_PR_MD_GETSOCKOPT(PRFileDesc *fd, PRInt32 level, PRInt32 optname, char* optval, PRInt32* optlen)
+_PR_MD_GETSOCKOPT(PRFileDesc *fd, PRInt32 level, PRInt32 optname,
+ char* optval, PRInt32* optlen)
{
- PRInt32 rv;
+ PRInt32 rv, err;
- rv = getsockopt((int)fd->secret->md.osfd, level, optname, optval, optlen);
- if (rv==0)
- return PR_SUCCESS;
- else {
- _PR_MD_MAP_GETSOCKOPT_ERROR(sock_errno());
- return PR_FAILURE;
+ rv = getsockopt(fd->secret->md.osfd, level, optname, optval, (int *)optlen);
+ if (rv < 0) {
+ err = sock_errno();
+ _PR_MD_MAP_GETSOCKOPT_ERROR(err);
}
+ return rv==0?PR_SUCCESS:PR_FAILURE;
}
PRStatus
-_PR_MD_SETSOCKOPT(PRFileDesc *fd, PRInt32 level, PRInt32 optname, const char* optval, PRInt32 optlen)
+_PR_MD_SETSOCKOPT(PRFileDesc *fd, PRInt32 level, PRInt32 optname,
+ const char* optval, PRInt32 optlen)
{
- PRInt32 rv;
+ PRInt32 rv, err;
- rv = setsockopt((int)fd->secret->md.osfd, level, optname, (char *) optval, optlen);
- if (rv==0)
- return PR_SUCCESS;
- else {
- _PR_MD_MAP_SETSOCKOPT_ERROR(sock_errno());
- return PR_FAILURE;
+ rv = setsockopt(fd->secret->md.osfd, level, optname, optval, optlen);
+ if (rv < 0) {
+ err = sock_errno();
+ _PR_MD_MAP_SETSOCKOPT_ERROR(err);
}
+ return rv==0?PR_SUCCESS:PR_FAILURE;
}
void
-_MD_MakeNonblock(PRFileDesc *f)
+_MD_MakeNonblock(PRFileDesc *fd)
{
- return; /* do nothing! */
+ PRInt32 osfd = fd->secret->md.osfd;
+ PRInt32 err;
+ PRUint32 one = 1;
+
+ if (osfd <= 2) {
+ /* Don't mess around with stdin, stdout or stderr */
+ return;
+ }
+
+ err = ioctl( osfd, FIONBIO, (char *) &one, sizeof(one));
+ if ( err != 0 )
+ {
+ err = sock_errno();
+ _PR_MD_MAP_SOCKET_ERROR(err);
+ }
}
diff --git a/pr/src/md/os2/os2thred.c b/pr/src/md/os2/os2thred.c
index d64ae0b9..f05be463 100644
--- a/pr/src/md/os2/os2thred.c
+++ b/pr/src/md/os2/os2thred.c
@@ -127,7 +127,15 @@ _PR_MD_CREATE_THREAD(PRThread *thread,
if(thread->md.handle == -1) {
return PR_FAILURE;
}
- _PR_MD_SET_PRIORITY(&(thread->md), priority);
+
+ /*
+ * On OS/2, a thread is created with a thread priority of
+ * THREAD_PRIORITY_NORMAL
+ */
+
+ if (priority != PR_PRIORITY_NORMAL) {
+ _PR_MD_SET_PRIORITY(&(thread->md), priority);
+ }
return PR_SUCCESS;
}
diff --git a/pr/src/md/os2/os2vacpp.asm b/pr/src/md/os2/os2vacpp.asm
index 2581323b..6b49e407 100644
--- a/pr/src/md/os2/os2vacpp.asm
+++ b/pr/src/md/os2/os2vacpp.asm
@@ -30,59 +30,230 @@ COMMENT | -*- Mode: asm; tab-width: 8; c-basic-offset: 4 -*-
GPL.
Windows uses inline assembly for their atomic functions, so we have
- created an assembly file for VACPP on OS/2
+ created an assembly file for VACPP on OS/2.
+
+ This assembly file also contains an implementation of RAM semaphores.
+
+ Notes:
+ The ulTIDPID element of the RAMSEM structure is overloaded in the 386
+ implementation to hold the TID:PID in the lower 31 bits and the lock
+ bit in the high bit
|
+ page ,132
.486P
- .MODEL FLAT, OPTLINK
- .STACK
+ ASSUME CS:FLAT, DS:FLAT, SS:FLAT, ES:FLAT, FS:FLAT
+
+ EXTRN Dos32PostEventSem:PROC
+ EXTRN Dos32WaitEventSem:PROC
+ EXTRN Dos32ResetEventSem:PROC
+
+ramsem STRUC
+ ramsem_ulTIDPID DD ?
+ ramsem_hevSem DD ?
+ ramsem_cLocks DD ?
+ ramsem_cWaiting DW ?
+ ramsem_cPosts DW ?
+ramsem ENDS
+
+ERROR_SEM_TIMEOUT equ 121
+ERROR_NOT_OWNER equ 288
+SEM_RELEASE_UNOWNED equ 1
+SEM_RELEASE_ALL equ 2
+TS_LOCKBIT equ 31
+
+
+DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
+
+ EXTRN plisCurrent:DWORD
+
+DATA ENDS
+
+CODE32 SEGMENT USE32 PUBLIC 'CODE'
+
+ PUBLIC SemRequest486
+ PUBLIC SemReleasex86
+
+ PUBLIC _PR_MD_ATOMIC_SET
+ PUBLIC _PR_MD_ATOMIC_ADD
+ PUBLIC _PR_MD_ATOMIC_INCREMENT
+ PUBLIC _PR_MD_ATOMIC_DECREMENT
+
+;;;---------------------------------------------------------------------------
+;;; APIRET _Optlink SemRequest(PRAMSEM pramsem, ULONG ulTimeout);
+;;;
+;;; Registers:
+;;; EAX - packed TID:PID word
+;;; ECX - address of RAMSEM structure
+;;; EDX - length of timeout in milli-seconds
+;;;---------------------------------------------------------------------------
+
+ ALIGN 10H
+SemRequest486 PROC
+ push ebx ; Save ebx (volatile)
+ mov ecx, eax ; PRAMSEM must be in ecx,
+ ; not eax, for cmpxchg
+
+ mov ebx, dword ptr [plisCurrent]
+ mov eax, dword ptr [ebx+4] ; Place thread id in high
+ ; word, process id in low
+ mov ax, word ptr [ebx] ; word
+ mov ebx,eax
+
+req486_test:
+ xor eax,eax
+ cmp (ramsem PTR [ecx]).ramsem_ulTIDPID, ebx ; If we own the sem, just
+ jz short req486_inc_exit ; increment the use count
+
+ lock inc (ramsem PTR [ecx]).ramsem_cWaiting ; inc waiting flag
+
+; lock ; Uncomment for SMP
+ DB 0F0h
+; cmpxchg (ramsem PTR [ecx]).ramsem_ulTIDPID, ebx
+; (byte 3 is the offset of ulProcessThread into the RAMSEM structure)
+ DB 00Fh
+ DB 0B1h
+ DB 019h
+ jnz short req486_sleep
+
+req486_inc_exit:
+ lock inc (ramsem PTR [ecx]).ramsem_cLocks
+
+req486_exit:
+ pop ebx ; Restore ebx
+ ret
+
+req486_sleep:
+ push ecx ; Save ecx (volatile)
+ push edx ; Save edx (volatile)
+ push edx ; timeout
+ push (ramsem PTR [ecx]).ramsem_hevSem
+ call Dos32WaitEventSem
+ add esp, 8
+ pop edx ; restore edx
+ pop ecx ; restore ecx
+ or eax, eax
+ jne req486_exit ; Exit, if error
- .CODE
+ push ecx ; Save ecx (volatile)
+ push edx ; Save edx (volatile)
+ sub esp, 4 ; Use stack space for
+ push esp ; dummy pulPostCt
+ push (ramsem PTR [ecx]).ramsem_hevSem
+ call Dos32ResetEventSem
+ add esp, 12
+ pop edx ; restore edx
+ pop ecx ; restore ecx
+ jmp req486_test ; Retry the semaphore
+
+SemRequest486 ENDP
+
+;;;---------------------------------------------------------------------
+;;; APIRET _Optlink SemReleasex86(PRAMSEM pramsem, ULONG flFlags);
+;;;
+;;; Registers:
+;;; EAX - address of RAMSEM structure
+;;; ECX - temporary variable
+;;; EDX - flags
+;;;---------------------------------------------------------------------
+
+ ALIGN 10H
+SemReleasex86 PROC
+ test edx, SEM_RELEASE_UNOWNED ; If set, don't bother
+ jnz short rel_ownerok ; getting/checking PID/TID
+
+ push ebx ; Save ebx (volatile)
+ mov ebx, dword ptr [plisCurrent]
+ mov ecx, dword ptr [ebx+4] ; Place thread id in high
+ ; word, process id in low
+ mov cx, word ptr [ebx] ; word
+ pop ebx ; Restore ebx
+
+ sub ecx, (ramsem PTR [eax]).ramsem_ulTIDPID ; This thread the owner?
+ shl ecx,1 ; Don't compare top bit
+ jnz short rel_notowner
+
+rel_ownerok:
+ test edx, SEM_RELEASE_ALL
+ jnz short rel_clear
+
+ lock dec (ramsem PTR [eax]).ramsem_cLocks
+ jnz short rel_exit
+
+rel_disown:
+ mov (ramsem PTR [eax]).ramsem_ulTIDPID, 0
+
+ lock inc (ramsem PTR [eax]).ramsem_cPosts
+ mov cx, (ramsem PTR [eax]).ramsem_cWaiting
+ cmp (ramsem PTR [eax]).ramsem_cPosts, cx
+ jne short rel_post
+
+rel_exit:
+ xor eax, eax
+ ret
+
+rel_clear:
+ lock mov (ramsem PTR [eax]).ramsem_cLocks,0
+ jmp rel_disown
+
+rel_notowner:
+ mov eax, ERROR_NOT_OWNER
+ ret
+
+rel_post:
+ mov (ramsem PTR [eax]).ramsem_cPosts, cx
+ push (ramsem PTR [eax]).ramsem_hevSem
+ call Dos32PostEventSem
+ add esp,4
+ xor eax,eax
+ ret
+SemReleasex86 ENDP
;;;---------------------------------------------------------------------
;;; PRInt32 _Optlink _PR_MD_ATOMIC_SET(PRInt32* val, PRInt32 newval)
;;;---------------------------------------------------------------------
-_PR_MD_ATOMIC_SET PROC OPTLINK EXPORT
- lock xchg dword ptr [eax],edx
+ ALIGN 10H
+_PR_MD_ATOMIC_SET proc
+ lock xchg dword ptr [eax],edx
mov eax, edx;
-
ret
_PR_MD_ATOMIC_SET endp
;;;---------------------------------------------------------------------
;;; PRInt32 _Optlink _PR_MD_ATOMIC_ADD(PRInt32* ptr, PRInt32 val)
;;;---------------------------------------------------------------------
-_PR_MD_ATOMIC_ADD PROC OPTLINK EXPORT
+ ALIGN 10H
+_PR_MD_ATOMIC_ADD proc
mov ecx, edx
lock xadd dword ptr [eax], edx
mov eax, edx
add eax, ecx
-
ret
_PR_MD_ATOMIC_ADD endp
;;;---------------------------------------------------------------------
;;; PRInt32 _Optlink _PR_MD_ATOMIC_INCREMENT(PRInt32* val)
;;;---------------------------------------------------------------------
-_PR_MD_ATOMIC_INCREMENT PROC OPTLINK EXPORT
+ ALIGN 10H
+_PR_MD_ATOMIC_INCREMENT proc
mov edx, 1
lock xadd dword ptr [eax], edx
mov eax, edx
inc eax
-
ret
_PR_MD_ATOMIC_INCREMENT endp
;;;---------------------------------------------------------------------
;;; PRInt32 _Optlink _PR_MD_ATOMIC_DECREMENT(PRInt32* val)
;;;---------------------------------------------------------------------
-_PR_MD_ATOMIC_DECREMENT PROC OPTLINK EXPORT
+ ALIGN 10H
+_PR_MD_ATOMIC_DECREMENT proc
mov edx, 0ffffffffh
lock xadd dword ptr [eax], edx
mov eax, edx
dec eax
-
ret
_PR_MD_ATOMIC_DECREMENT endp
- END
+CODE32 ENDS
+END
diff --git a/pr/src/md/unix/Makefile.in b/pr/src/md/unix/Makefile.in
index aa78f21b..8c5dfe80 100644
--- a/pr/src/md/unix/Makefile.in
+++ b/pr/src/md/unix/Makefile.in
@@ -76,6 +76,8 @@ ifeq ($(OS_ARCH),SunOS)
ULTRASPARC_ASOBJS = $(addprefix $(OBJDIR)/,$(ULTRASPARC_ASFILES:.s=.$(OBJ_SUFFIX)))
TARGETS += $(ULTRASPARC_ASOBJS) $(SHARED_LIBRARY)
RELEASE_LIBS = $(SHARED_LIBRARY)
+ RELEASE_LIBS_DEST = $(RELEASE_LIB_DIR)/cpu/sparcv8plus
+ lib_subdir = cpu/sparcv8plus
endif
endif
endif
@@ -98,8 +100,24 @@ $(ULTRASPARC_ASOBJS): $(ULTRASPARC_ASFILES)
/usr/ccs/bin/as -o $@ -K PIC -P -D_ASM -D__STDC__=0 -xarch=v9 $<
else
$(SHARED_LIBRARY): $(ULTRASPARC_ASOBJS)
- $(LD) -G -z text -o $@ $(ULTRASPARC_ASOBJS)
- $(INSTALL) -m 444 $@ $(dist_libdir)
+ $(LD) -G -z text -z endfiltee -o $@ $(ULTRASPARC_ASOBJS)
+ $(INSTALL) -m 444 $@ $(dist_libdir)/cpu/sparcv8plus
+ $(INSTALL) -m 444 $@ $(dist_bindir)/cpu/sparcv8plus
+#
+# The -f $(ORIGIN)/... linker flag uses the real file, after symbolic links
+# are resolved, as the origin. If NSDISTMODE is not "copy", libnspr4.so
+# will be installed as a symbolic link in $(dist_libdir), pointing to the
+# real libnspr4.so file in pr/src. Therefore we need to install an
+# additional copy of libnspr_flt4.so in pr/src/cpu/sparcv8plus.
+#
+ifneq ($(NSDISTMODE),copy)
+ $(INSTALL) -m 444 $@ ../../cpu/sparcv8plus
+endif
+
+ifneq ($(NSDISTMODE),copy)
+clobber realclean clobber_all distclean::
+ rm -rf ../../cpu
+endif
$(ULTRASPARC_ASOBJS): $(ULTRASPARC_ASFILES)
/usr/ccs/bin/as -o $@ -K PIC -P -D_ASM -D__STDC__=0 -xarch=v8plus $<
diff --git a/pr/src/md/unix/darwin.c b/pr/src/md/unix/darwin.c
index 43988b8d..90179feb 100644
--- a/pr/src/md/unix/darwin.c
+++ b/pr/src/md/unix/darwin.c
@@ -103,32 +103,5 @@ _MD_CREATE_THREAD(
}
#endif /* ! _PR_PTHREADS */
-#if defined(_PR_PTHREADS)
-
-/*
-** Stubs for unimplemented functions
-*/
-
-int pthread_condattr_init(pthread_condattr_t *attr)
-{
- return 0;
-}
-
-int pthread_kill(pthread_t thread, int sig)
-{
- return ENOSYS;
-}
-
-typedef struct siginfo_t siginfo_t;
-
-int sigtimedwait(const sigset_t *set, siginfo_t *info,
- const struct timespec *timeout)
-{
- errno = ENOSYS;
- return -1;
-}
-
-#endif /* _PR_PTHREADS */
-
/* darwin.c */
diff --git a/pr/src/md/unix/irix.c b/pr/src/md/unix/irix.c
index 7ba079f8..f3d52f01 100644
--- a/pr/src/md/unix/irix.c
+++ b/pr/src/md/unix/irix.c
@@ -1451,7 +1451,7 @@ void _MD_EarlyInit(void)
_MD_IrixIntervalInit();
} /* _MD_EarlyInit */
-void _MD_IrixInit()
+void _MD_IrixInit(void)
{
#if !defined(_PR_PTHREADS)
struct sigaction sigact;
@@ -1567,7 +1567,7 @@ static PRUint32 pr_ticks_per_second = 0;
extern PRIntervalTime _PR_UNIX_GetInterval(void);
extern PRIntervalTime _PR_UNIX_TicksPerSecond(void);
-static void _MD_IrixIntervalInit()
+static void _MD_IrixIntervalInit(void)
{
/*
* As much as I would like, the service available through this
@@ -1634,12 +1634,12 @@ static void _MD_IrixIntervalInit()
}
} /* _MD_IrixIntervalInit */
-PRIntervalTime _MD_IrixIntervalPerSec()
+PRIntervalTime _MD_IrixIntervalPerSec(void)
{
return pr_ticks_per_second;
}
-PRIntervalTime _MD_IrixGetInterval()
+PRIntervalTime _MD_IrixGetInterval(void)
{
if (mmem_fd != -1)
{
diff --git a/pr/src/md/unix/openvms.c b/pr/src/md/unix/openvms.c
index 72c20432..1cd58278 100644
--- a/pr/src/md/unix/openvms.c
+++ b/pr/src/md/unix/openvms.c
@@ -204,4 +204,22 @@ int thread_resume(PRThread *thr_id) {
return 0;
}
+/*
+** Stubs for nspr_symvec.opt
+**
+** PR_ResumeSet, PR_ResumeTest, and PR_SuspendAllSuspended
+** (defined in ptthread.c) used to be exported by mistake
+** (because they look like public functions). They have been
+** converted into static functions.
+**
+** There is an existing third-party binary that uses NSPR: the
+** Java plugin for Mozilla. Because it is part of the Java
+** SDK, we have no control over its releases. So we need these
+** stub functions to occupy the slots that used to be occupied
+** by PR_ResumeSet, PR_ResumeTest, and PR_SuspendAllSuspended
+** in the symbol vector so that LIBNSPR4 is backward compatible.
+*/
+void PR_VMS_Stub1(void) { }
+void PR_VMS_Stub2(void) { }
+void PR_VMS_Stub3(void) { }
diff --git a/pr/src/md/unix/unix.c b/pr/src/md/unix/unix.c
index 69153f27..c69a233a 100644
--- a/pr/src/md/unix/unix.c
+++ b/pr/src/md/unix/unix.c
@@ -64,7 +64,8 @@
* Make sure _PRSockLen_t is 32-bit, because we will cast a PRUint32* or
* PRInt32* pointer to a _PRSockLen_t* pointer.
*/
-#if defined(HAVE_SOCKLEN_T)
+#if defined(HAVE_SOCKLEN_T) \
+ || (defined(LINUX) && defined(__GLIBC__) && __GLIBC__ >= 2)
#define _PRSockLen_t socklen_t
#elif defined(IRIX) || defined(HPUX) || defined(OSF1) || defined(SOLARIS) \
|| defined(AIX4_1) || defined(LINUX) || defined(SONY) \
@@ -514,6 +515,7 @@ static PRInt32 socket_io_wait(PRInt32 osfd, PRInt32 fd_type,
struct timeval tv;
PRThread *me = _PR_MD_CURRENT_THREAD();
PRIntervalTime epoch, now, elapsed, remaining;
+ PRBool wait_for_remaining;
PRInt32 syserror;
fd_set rd_wr;
@@ -558,8 +560,10 @@ static PRInt32 socket_io_wait(PRInt32 osfd, PRInt32 fd_type,
* so that there is an upper limit on the delay
* before the interrupt bit is checked.
*/
+ wait_for_remaining = PR_TRUE;
tv.tv_sec = PR_IntervalToSeconds(remaining);
if (tv.tv_sec > _PR_INTERRUPT_CHECK_INTERVAL_SECS) {
+ wait_for_remaining = PR_FALSE;
tv.tv_sec = _PR_INTERRUPT_CHECK_INTERVAL_SECS;
tv.tv_usec = 0;
} else {
@@ -596,8 +600,12 @@ static PRInt32 socket_io_wait(PRInt32 osfd, PRInt32 fd_type,
* PR_IntervalNow() call.
*/
if (rv == 0) {
- now += PR_SecondsToInterval(tv.tv_sec)
- + PR_MicrosecondsToInterval(tv.tv_usec);
+ if (wait_for_remaining) {
+ now += remaining;
+ } else {
+ now += PR_SecondsToInterval(tv.tv_sec)
+ + PR_MicrosecondsToInterval(tv.tv_usec);
+ }
} else {
now = PR_IntervalNow();
}
@@ -625,6 +633,7 @@ static PRInt32 socket_io_wait(PRInt32 osfd, PRInt32 fd_type,
int msecs;
PRThread *me = _PR_MD_CURRENT_THREAD();
PRIntervalTime epoch, now, elapsed, remaining;
+ PRBool wait_for_remaining;
PRInt32 syserror;
struct pollfd pfd;
@@ -682,8 +691,10 @@ static PRInt32 socket_io_wait(PRInt32 osfd, PRInt32 fd_type,
* so that there is an upper limit on the delay
* before the interrupt bit is checked.
*/
+ wait_for_remaining = PR_TRUE;
msecs = PR_IntervalToMilliseconds(remaining);
if (msecs > _PR_INTERRUPT_CHECK_INTERVAL_SECS * 1000) {
+ wait_for_remaining = PR_FALSE;
msecs = _PR_INTERRUPT_CHECK_INTERVAL_SECS * 1000;
}
rv = _MD_POLL(&pfd, 1, msecs);
@@ -719,7 +730,11 @@ static PRInt32 socket_io_wait(PRInt32 osfd, PRInt32 fd_type,
* PR_IntervalNow() call.
*/
if (rv == 0) {
- now += PR_MillisecondsToInterval(msecs);
+ if (wait_for_remaining) {
+ now += remaining;
+ } else {
+ now += PR_MillisecondsToInterval(msecs);
+ }
} else {
now = PR_IntervalNow();
}
@@ -2713,6 +2728,28 @@ static void* _MD_Unix_mmap64(
} /* _MD_Unix_mmap64 */
#endif /* defined(_PR_NO_LARGE_FILES) || defined(SOLARIS2_5) */
+#if defined(OSF1) && defined(__GNUC__)
+
+/*
+ * On OSF1 V5.0A, <sys/stat.h> defines stat and fstat as
+ * macros when compiled under gcc, so it is rather tricky to
+ * take the addresses of the real functions the macros expend
+ * to. A simple solution is to define forwarder functions
+ * and take the addresses of the forwarder functions instead.
+ */
+
+static int stat_forwarder(const char *path, struct stat *buffer)
+{
+ return stat(path, buffer);
+}
+
+static int fstat_forwarder(int filedes, struct stat *buffer)
+{
+ return fstat(filedes, buffer);
+}
+
+#endif
+
static void _PR_InitIOV(void)
{
#if defined(SOLARIS2_5)
@@ -2757,8 +2794,13 @@ static void _PR_InitIOV(void)
#elif defined(_PR_HAVE_LARGE_OFF_T)
_md_iovector._open64 = open;
_md_iovector._mmap64 = mmap;
+#if defined(OSF1) && defined(__GNUC__)
+ _md_iovector._fstat64 = fstat_forwarder;
+ _md_iovector._stat64 = stat_forwarder;
+#else
_md_iovector._fstat64 = fstat;
_md_iovector._stat64 = stat;
+#endif
_md_iovector._lseek64 = lseek;
#else
#error "I don't know yet"
@@ -3221,9 +3263,6 @@ int _MD_unix_get_nonblocking_connect_error(int osfd)
int err;
_PRSockLen_t optlen = sizeof(err);
- printf("_MD_unix_get_nonblocking_connect_error: "
- "Assuming Large TCP/IP Stack -REVISIT- Never Tested!\n");
-
if (getsockopt(osfd, SOL_SOCKET, SO_ERROR,
(char *) &err, &optlen) == -1) {
return errno;
diff --git a/pr/src/md/unix/unix_errors.c b/pr/src/md/unix/unix_errors.c
index 1ce52e68..15b423cb 100644
--- a/pr/src/md/unix/unix_errors.c
+++ b/pr/src/md/unix/unix_errors.c
@@ -847,3 +847,10 @@ void _MD_solaris_map_sendfile_error(int err)
_MD_unix_map_default_error(err) ;
}
#endif /* SOLARIS */
+
+#ifdef LINUX
+void _MD_linux_map_sendfile_error(int err)
+{
+ _MD_unix_map_default_error(err) ;
+}
+#endif /* LINUX */
diff --git a/pr/src/md/unix/uxpoll.c b/pr/src/md/unix/uxpoll.c
index 56a0d3dc..c504cd4d 100644
--- a/pr/src/md/unix/uxpoll.c
+++ b/pr/src/md/unix/uxpoll.c
@@ -173,6 +173,7 @@ static PRInt32 NativeThreadPoll(
{
/* make poll() ignore this entry */
syspoll[index].fd = -1;
+ pds[index].out_flags = 0;
}
}
@@ -384,6 +385,10 @@ static PRInt32 NativeThreadSelect(
}
}
}
+ else
+ {
+ pd->out_flags = 0;
+ }
}
if (0 != ready) return ready; /* no need to block */
diff --git a/pr/src/md/unix/uxproces.c b/pr/src/md/unix/uxproces.c
index 58b5ab8a..d469f1c4 100644
--- a/pr/src/md/unix/uxproces.c
+++ b/pr/src/md/unix/uxproces.c
@@ -802,7 +802,7 @@ static void pr_InstallSigchldHandler()
#endif /* !defined(_PR_NATIVE_THREADS) */
-static PRStatus _MD_InitProcesses()
+static PRStatus _MD_InitProcesses(void)
{
#if !defined(_PR_NATIVE_THREADS)
int rv;
diff --git a/pr/src/md/unix/uxrng.c b/pr/src/md/unix/uxrng.c
index 64358289..6add3bf1 100644
--- a/pr/src/md/unix/uxrng.c
+++ b/pr/src/md/unix/uxrng.c
@@ -64,6 +64,18 @@ GetHighResClock(void *buf, size_t maxbytes)
#elif defined(HPUX)
+#ifdef __ia64
+#include <ia64/sys/inline.h>
+
+static size_t
+GetHighResClock(void *buf, size_t maxbytes)
+{
+ PRUint64 t;
+
+ t = _Asm_mov_from_ar(_AREG44);
+ return _pr_CopyLowBits(buf, maxbytes, &t, sizeof(t));
+}
+#else
static size_t
GetHighResClock(void *buf, size_t maxbytes)
{
@@ -73,6 +85,7 @@ GetHighResClock(void *buf, size_t maxbytes)
cr16val = ret_cr16();
return(_pr_CopyLowBits(buf, maxbytes, &cr16val, sizeof(cr16val)));
}
+#endif
#elif defined(OSF1)
@@ -88,7 +101,11 @@ GetHighResClock(void *buf, size_t maxbytes)
{
unsigned long t;
+#ifdef __GNUC__
+ __asm__("rpcc %0" : "=r" (t));
+#else
t = asm("rpcc %v0");
+#endif
return _pr_CopyLowBits(buf, maxbytes, &t, sizeof(t));
}
@@ -210,7 +227,7 @@ static size_t GetHighResClock(void *buf, size_t maxbuf)
}
iotimer_addr = (unsigned *)
mmap(0, pgoffmask, PROT_READ, MAP_PRIVATE, mfd, (int)raddr);
- if (iotimer_addr == (void*)-1) {
+ if (iotimer_addr == (unsigned*)-1) {
close(mfd);
iotimer_addr = NULL;
return 0;
diff --git a/pr/src/md/unix/uxshm.c b/pr/src/md/unix/uxshm.c
index 888cbe04..1dc98386 100644
--- a/pr/src/md/unix/uxshm.c
+++ b/pr/src/md/unix/uxshm.c
@@ -94,7 +94,7 @@ extern PRSharedMemory * _MD_OpenSharedMemory(
return( NULL );
}
- shm->ipcname = PR_MALLOC( strlen( ipcname ) + 1 );
+ shm->ipcname = (char*)PR_MALLOC( strlen( ipcname ) + 1 );
if ( NULL == shm->ipcname )
{
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0 );
@@ -118,7 +118,7 @@ extern PRSharedMemory * _MD_OpenSharedMemory(
PR_DELETE( shm );
return( NULL );
}
- if ( close(osfd == -1 )) {
+ if ( close(osfd) == -1 ) {
_PR_MD_MAP_CLOSE_ERROR( errno );
PR_FREEIF( shm->ipcname );
PR_DELETE( shm );
@@ -243,7 +243,7 @@ extern PRStatus _MD_DeleteSharedMemory( const char *name )
_PR_MD_MAP_OPEN_ERROR( errno );
return( PR_FAILURE );
}
- if ( close(osfd == -1 )) {
+ if ( close(osfd) == -1 ) {
_PR_MD_MAP_CLOSE_ERROR( errno );
return( PR_FAILURE );
}
@@ -311,7 +311,6 @@ extern PRSharedMemory * _MD_OpenSharedMemory(
)
{
PRStatus rc = PR_SUCCESS;
- PRIntn id;
PRInt32 end;
PRSharedMemory *shm;
char ipcname[PR_IPC_NAME_SIZE];
diff --git a/pr/src/md/windows/Makefile.in b/pr/src/md/windows/Makefile.in
index 283fa4a4..dd5a613b 100644
--- a/pr/src/md/windows/Makefile.in
+++ b/pr/src/md/windows/Makefile.in
@@ -105,3 +105,13 @@ include $(topsrcdir)/config/rules.mk
export:: $(TARGETS)
+# Bug 122433 workaround: disable global optimization (-Og-) on ntio.c.
+ifdef BUILD_OPT
+ifeq ($(OS_TARGET), WINNT)
+ifndef NS_USE_GCC
+$(OBJDIR)/ntio.$(OBJ_SUFFIX): ntio.c
+ @$(MAKE_OBJDIR)
+ $(CC) -Fo$@ -c $(CFLAGS) -Og- $<
+endif
+endif
+endif
diff --git a/pr/src/md/windows/ntinrval.c b/pr/src/md/windows/ntinrval.c
index d6a3fe6f..857ada6a 100644
--- a/pr/src/md/windows/ntinrval.c
+++ b/pr/src/md/windows/ntinrval.c
@@ -45,9 +45,8 @@
#define QueryPerformanceCounter(x) FALSE
#endif
-PRIntn _nt_bitShift = 0;
-PRInt32 _nt_highMask = 0;
-PRInt32 _nt_ticksPerSec = -1;
+static PRIntn _nt_bitShift = 0;
+static PRInt32 _nt_ticksPerSec = -1;
void
_PR_MD_INTERVAL_INIT()
@@ -55,16 +54,33 @@ _PR_MD_INTERVAL_INIT()
LARGE_INTEGER count;
if (QueryPerformanceFrequency(&count)) {
+ /*
+ * HighPart is signed (LONG). Assert that its sign bit is 0
+ * because we will be right shifting it. LowPart is unsigned
+ * (DWORD).
+ */
+ PR_ASSERT(count.HighPart >= 0);
+ while(count.HighPart) {
+ count.LowPart = (count.HighPart << 31) + (count.LowPart >> 1);
+ count.HighPart >>= 1;
+ _nt_bitShift++;
+ }
while(count.LowPart > PR_INTERVAL_MAX) {
count.LowPart >>= 1;
_nt_bitShift++;
- _nt_highMask = (_nt_highMask << 1)+1;
}
- _nt_ticksPerSec = count.LowPart;
- PR_ASSERT(_nt_ticksPerSec > PR_INTERVAL_MIN);
- } else
- _nt_ticksPerSec = -1;
+ /*
+ * We can't use the performance counter if after
+ * normalization we are left with fewer than 32 bits.
+ */
+ if (_nt_bitShift <= 32) {
+ _nt_ticksPerSec = count.LowPart;
+ PR_ASSERT(_nt_ticksPerSec > PR_INTERVAL_MIN);
+ return;
+ }
+ }
+ _nt_ticksPerSec = -1;
}
PRIntervalTime
@@ -76,12 +92,15 @@ _PR_MD_GET_INTERVAL()
* to only 100000 ticks per second; QueryPerformanceCounter is too high
* resolution...
*/
- if (QueryPerformanceCounter(&count)) {
- PRInt32 top = count.HighPart & _nt_highMask;
- top = top << (32 - _nt_bitShift);
- count.LowPart = count.LowPart >> _nt_bitShift;
- count.LowPart = count.LowPart + top;
- return (PRUint32)count.LowPart;
+ if (_nt_ticksPerSec != -1) {
+ (void)QueryPerformanceCounter(&count);
+ PR_ASSERT(_nt_bitShift <= 32);
+ if (_nt_bitShift == 32) {
+ return (PRUint32)count.HighPart;
+ } else {
+ return (PRUint32)((count.HighPart << (32 - _nt_bitShift))
+ + (count.LowPart >> _nt_bitShift));
+ }
} else
#if defined(__MINGW32__)
return time();
diff --git a/pr/src/md/windows/ntio.c b/pr/src/md/windows/ntio.c
index 299033cc..e206f787 100644
--- a/pr/src/md/windows/ntio.c
+++ b/pr/src/md/windows/ntio.c
@@ -99,7 +99,11 @@ static DWORD dirAccessTable[] = {
* We store the value in a PRTime variable for convenience.
* This constant is used by _PR_FileTimeToPRTime().
*/
+#ifdef __GNUC__
+static const PRTime _pr_filetime_offset = 116444736000000000LL;
+#else
static const PRTime _pr_filetime_offset = 116444736000000000i64;
+#endif
#define _NEED_351_FILE_LOCKING_HACK
#ifdef _NEED_351_FILE_LOCKING_HACK
@@ -2322,7 +2326,7 @@ _PR_MD_READ(PRFileDesc *fd, void *buf, PRInt32 len)
}
PRInt32
-_PR_MD_WRITE(PRFileDesc *fd, void *buf, PRInt32 len)
+_PR_MD_WRITE(PRFileDesc *fd, const void *buf, PRInt32 len)
{
PRInt32 f = fd->secret->md.osfd;
PRInt32 bytes;
@@ -2488,7 +2492,7 @@ _PR_MD_PIPEAVAILABLE(PRFileDesc *fd)
}
PROffset32
-_PR_MD_LSEEK(PRFileDesc *fd, PROffset32 offset, int whence)
+_PR_MD_LSEEK(PRFileDesc *fd, PROffset32 offset, PRSeekWhence whence)
{
DWORD moveMethod;
PROffset32 rv;
@@ -2521,7 +2525,7 @@ _PR_MD_LSEEK(PRFileDesc *fd, PROffset32 offset, int whence)
}
PROffset64
-_PR_MD_LSEEK64(PRFileDesc *fd, PROffset64 offset, int whence)
+_PR_MD_LSEEK64(PRFileDesc *fd, PROffset64 offset, PRSeekWhence whence)
{
DWORD moveMethod;
LARGE_INTEGER li;
@@ -2815,12 +2819,16 @@ _PR_MD_DELETE(const char *name)
}
}
-static void
+void
_PR_FileTimeToPRTime(const FILETIME *filetime, PRTime *prtm)
{
PR_ASSERT(sizeof(FILETIME) == sizeof(PRTime));
CopyMemory(prtm, filetime, sizeof(PRTime));
+#ifdef __GNUC__
+ *prtm = (*prtm - _pr_filetime_offset) / 10LL;
+#else
*prtm = (*prtm - _pr_filetime_offset) / 10i64;
+#endif
#ifdef DEBUG
/* Doublecheck our calculation. */
@@ -3168,7 +3176,7 @@ _PR_MD_RENAME(const char *from, const char *to)
}
PRInt32
-_PR_MD_ACCESS(const char *name, PRIntn how)
+_PR_MD_ACCESS(const char *name, PRAccessHow how)
{
PRInt32 rv;
diff --git a/pr/src/md/windows/ntmisc.c b/pr/src/md/windows/ntmisc.c
index c4bb8511..32a199ce 100644
--- a/pr/src/md/windows/ntmisc.c
+++ b/pr/src/md/windows/ntmisc.c
@@ -84,18 +84,12 @@ PRIntn _PR_MD_PUT_ENV(const char *name)
PR_IMPLEMENT(PRTime)
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, b.millitm);
- LL_MUL(ms, ms, ms2us);
- LL_MUL(s, s, s2us);
- LL_ADD(s, s, ms);
- return s;
+ PRTime prt;
+ FILETIME ft;
+
+ GetSystemTimeAsFileTime(&ft);
+ _PR_FileTimeToPRTime(&ft, &prt);
+ return prt;
}
/*
@@ -792,7 +786,7 @@ PRInt32 _PR_MD_ATOMIC_DECREMENT(PRInt32 *val)
PRInt32 result;
asm volatile ("lock ; xadd %0, %1"
: "=r"(result), "=m"(*val)
- : "0"(1), "m"(*val));
+ : "0"(-1), "m"(*val));
//asm volatile("lock ; xadd %0, %1" : "=m" (val), "=a" (result) : "-1" (1));
return result - 1;
#else
@@ -814,8 +808,8 @@ PRInt32 _PR_MD_ATOMIC_ADD(PRInt32 *intp, PRInt32 val)
PRInt32 result;
//asm volatile("lock ; xadd %1, %0" : "=m" (intp), "=a" (result) : "1" (val));
asm volatile ("lock ; xadd %0, %1"
- : "=r"(result), "=m"(intp)
- : "0"(val), "m"(intp));
+ : "=r"(result), "=m"(*intp)
+ : "0"(val), "m"(*intp));
return result + val;
#else
__asm
diff --git a/pr/src/md/windows/ntthread.c b/pr/src/md/windows/ntthread.c
index 9c3e2baf..a414e5c7 100644
--- a/pr/src/md/windows/ntthread.c
+++ b/pr/src/md/windows/ntthread.c
@@ -238,6 +238,13 @@ _PR_MD_CREATE_THREAD(PRThread *thread,
}
thread->md.id = thread->id;
+ /*
+ * On windows, a thread is created with a thread priority of
+ * THREAD_PRIORITY_NORMAL.
+ */
+ if (priority != PR_PRIORITY_NORMAL) {
+ _PR_MD_SET_PRIORITY(&(thread->md), priority);
+ }
/* Activate the thread */
if ( ResumeThread( thread->md.handle ) != -1)
@@ -247,6 +254,21 @@ _PR_MD_CREATE_THREAD(PRThread *thread,
return PR_FAILURE;
}
+void
+_PR_MD_JOIN_THREAD(_MDThread *md)
+{
+ DWORD rv;
+
+ rv = WaitForSingleObject(md->handle, INFINITE);
+ PR_ASSERT(WAIT_OBJECT_0 == rv);
+}
+
+void
+_PR_MD_END_THREAD(void)
+{
+ _endthreadex(0);
+}
+
void
_PR_MD_YIELD(void)
{
diff --git a/pr/src/md/windows/w32poll.c b/pr/src/md/windows/w32poll.c
index 2747a040..9c4836f3 100644
--- a/pr/src/md/windows/w32poll.c
+++ b/pr/src/md/windows/w32poll.c
@@ -223,6 +223,10 @@ PRInt32 _PR_MD_PR_POLL(PRPollDesc *pds, PRIntn npds, PRIntervalTime timeout)
}
}
}
+ else
+ {
+ pd->out_flags = 0;
+ }
}
if (0 != ready) return ready; /* no need to block */
diff --git a/pr/src/md/windows/w95io.c b/pr/src/md/windows/w95io.c
index 89669e6e..6ccdf410 100644
--- a/pr/src/md/windows/w95io.c
+++ b/pr/src/md/windows/w95io.c
@@ -41,6 +41,9 @@
#include "primpl.h"
#include <direct.h>
#include <mbstring.h>
+#ifdef MOZ_UNICODE
+#include <wchar.h>
+#endif /* MOZ_UNICODE */
struct _MDLock _pr_ioq_lock;
@@ -74,6 +77,10 @@ static const PRTime _pr_filetime_offset = 116444736000000000LL;
static const PRTime _pr_filetime_offset = 116444736000000000i64;
#endif
+#ifdef MOZ_UNICODE
+static void InitUnicodeSupport(void);
+#endif
+
void
_PR_MD_INIT_IO()
{
@@ -110,6 +117,10 @@ _PR_MD_INIT_IO()
#endif /* DEBUG */
_PR_NT_InitSids();
+
+#ifdef MOZ_UNICODE
+ InitUnicodeSupport();
+#endif
}
PRStatus
@@ -568,7 +579,7 @@ _PR_MD_DELETE(const char *name)
}
}
-static void
+void
_PR_FileTimeToPRTime(const FILETIME *filetime, PRTime *prtm)
{
PR_ASSERT(sizeof(FILETIME) == sizeof(PRTime));
@@ -1088,3 +1099,410 @@ _PR_MD_PIPEAVAILABLE(PRFileDesc *fd)
PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
return -1;
}
+
+#ifdef MOZ_UNICODE
+
+typedef HANDLE (WINAPI *CreateFileWFn) (LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);
+static CreateFileWFn createFileW = NULL;
+typedef HANDLE (WINAPI *FindFirstFileWFn) (LPCWSTR, LPWIN32_FIND_DATAW);
+static FindFirstFileWFn findFirstFileW = NULL;
+typedef BOOL (WINAPI *FindNextFileWFn) (HANDLE, LPWIN32_FIND_DATAW);
+static FindNextFileWFn findNextFileW = NULL;
+typedef DWORD (WINAPI *GetFullPathNameWFn) (LPCWSTR, DWORD, LPWSTR, LPWSTR *);
+static GetFullPathNameWFn getFullPathNameW = NULL;
+typedef UINT (WINAPI *GetDriveTypeWFn) (LPCWSTR);
+static GetDriveTypeWFn getDriveTypeW = NULL;
+
+static void InitUnicodeSupport(void)
+{
+ HMODULE module;
+
+ /*
+ * The W functions do not exist on Win9x. NSPR won't run on Win9x
+ * if we call the W functions directly. Use GetProcAddress() to
+ * look up their addresses at run time.
+ */
+
+ module = GetModuleHandle("Kernel32.dll");
+ if (!module) {
+ return;
+ }
+
+ createFileW = (CreateFileWFn)GetProcAddress(module, "CreateFileW");
+ findFirstFileW = (FindFirstFileWFn)GetProcAddress(module, "FindFirstFileW");
+ findNextFileW = (FindNextFileWFn)GetProcAddress(module, "FindNextFileW");
+ getDriveTypeW = (GetDriveTypeWFn)GetProcAddress(module, "GetDriveTypeW");
+ getFullPathNameW = (GetFullPathNameWFn)GetProcAddress(module, "GetFullPathNameW");
+}
+
+/* ================ UTF16 Interfaces ================================ */
+void FlipSlashesW(PRUnichar *cp, int len)
+{
+ while (--len >= 0) {
+ if (cp[0] == L'/') {
+ cp[0] = L'\\';
+ }
+ cp++;
+ }
+} /* end FlipSlashesW() */
+
+PRInt32
+_PR_MD_OPEN_FILE_UTF16(const PRUnichar *name, PRIntn osflags, int mode)
+{
+ HANDLE file;
+ PRInt32 access = 0;
+ PRInt32 flags = 0;
+ PRInt32 flag6 = 0;
+ SECURITY_ATTRIBUTES sa;
+ LPSECURITY_ATTRIBUTES lpSA = NULL;
+ PSECURITY_DESCRIPTOR pSD = NULL;
+ PACL pACL = NULL;
+
+ if (!createFileW) {
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return -1;
+ }
+
+ if (osflags & PR_CREATE_FILE) {
+ if (_PR_NT_MakeSecurityDescriptorACL(mode, fileAccessTable,
+ &pSD, &pACL) == PR_SUCCESS) {
+ sa.nLength = sizeof(sa);
+ sa.lpSecurityDescriptor = pSD;
+ sa.bInheritHandle = FALSE;
+ lpSA = &sa;
+ }
+ }
+
+ if (osflags & PR_SYNC) flag6 = FILE_FLAG_WRITE_THROUGH;
+
+ if (osflags & PR_RDONLY || osflags & PR_RDWR)
+ access |= GENERIC_READ;
+ if (osflags & PR_WRONLY || osflags & PR_RDWR)
+ access |= GENERIC_WRITE;
+
+ if ( osflags & PR_CREATE_FILE && osflags & PR_EXCL )
+ flags = CREATE_NEW;
+ else if (osflags & PR_CREATE_FILE) {
+ if (osflags & PR_TRUNCATE)
+ flags = CREATE_ALWAYS;
+ else
+ flags = OPEN_ALWAYS;
+ } else {
+ if (osflags & PR_TRUNCATE)
+ flags = TRUNCATE_EXISTING;
+ else
+ flags = OPEN_EXISTING;
+ }
+
+ file = createFileW(name,
+ access,
+ FILE_SHARE_READ|FILE_SHARE_WRITE,
+ lpSA,
+ flags,
+ flag6,
+ NULL);
+ if (lpSA != NULL) {
+ _PR_NT_FreeSecurityDescriptorACL(pSD, pACL);
+ }
+ if (file == INVALID_HANDLE_VALUE) {
+ _PR_MD_MAP_OPEN_ERROR(GetLastError());
+ return -1;
+ }
+
+ return (PRInt32)file;
+}
+
+PRStatus
+_PR_MD_OPEN_DIR_UTF16(_MDDirUTF16 *d, const PRUnichar *name)
+{
+ PRUnichar filename[ MAX_PATH ];
+ int len;
+
+ if (!findFirstFileW) {
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return PR_FAILURE;
+ }
+
+ len = wcslen(name);
+ /* Need 5 bytes for \*.* and the trailing null byte. */
+ if (len + 5 > MAX_PATH) {
+ PR_SetError(PR_NAME_TOO_LONG_ERROR, 0);
+ return PR_FAILURE;
+ }
+ wcscpy(filename, name);
+
+ /*
+ * If 'name' ends in a slash or backslash, do not append
+ * another backslash.
+ */
+ if (filename[len - 1] == L'/' || filename[len - 1] == L'\\') {
+ len--;
+ }
+ wcscpy(&filename[len], L"\\*.*");
+ FlipSlashesW( filename, wcslen(filename) );
+
+ d->d_hdl = findFirstFileW( filename, &(d->d_entry) );
+ if ( d->d_hdl == INVALID_HANDLE_VALUE ) {
+ _PR_MD_MAP_OPENDIR_ERROR(GetLastError());
+ return PR_FAILURE;
+ }
+ d->firstEntry = PR_TRUE;
+ d->magic = _MD_MAGIC_DIR;
+ return PR_SUCCESS;
+}
+
+PRUnichar *
+_PR_MD_READ_DIR_UTF16(_MDDirUTF16 *d, PRIntn flags)
+{
+ PRInt32 err;
+ BOOL rv;
+ PRUnichar *fileName;
+
+ if (!findNextFileW) {
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return NULL;
+ }
+
+ if ( d ) {
+ while (1) {
+ if (d->firstEntry) {
+ d->firstEntry = PR_FALSE;
+ rv = 1;
+ } else {
+ rv = findNextFileW(d->d_hdl, &(d->d_entry));
+ }
+ if (rv == 0) {
+ break;
+ }
+ fileName = GetFileFromDIR(d);
+ if ( (flags & PR_SKIP_DOT) &&
+ (fileName[0] == L'.') && (fileName[1] == L'\0'))
+ continue;
+ if ( (flags & PR_SKIP_DOT_DOT) &&
+ (fileName[0] == L'.') && (fileName[1] == L'.') &&
+ (fileName[2] == L'\0'))
+ continue;
+ if ( (flags & PR_SKIP_HIDDEN) && FileIsHidden(d))
+ continue;
+ return fileName;
+ }
+ err = GetLastError();
+ PR_ASSERT(NO_ERROR != err);
+ _PR_MD_MAP_READDIR_ERROR(err);
+ return NULL;
+ }
+ PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
+ return NULL;
+}
+
+PRStatus
+_PR_MD_CLOSE_DIR_UTF16(_MDDirUTF16 *d)
+{
+ if ( d ) {
+ if (FindClose(d->d_hdl)) {
+ d->magic = (PRUint32)-1;
+ return PR_SUCCESS;
+ } else {
+ _PR_MD_MAP_CLOSEDIR_ERROR(GetLastError());
+ return PR_FAILURE;
+ }
+ }
+ PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
+ return PR_FAILURE;
+}
+
+#define _PR_IS_W_SLASH(ch) ((ch) == L'/' || (ch) == L'\\')
+
+/*
+ * IsRootDirectoryW --
+ *
+ * Return PR_TRUE if the pathname 'fn' is a valid root directory,
+ * else return PR_FALSE. The PRUnichar buffer pointed to by 'fn' must
+ * be writable. During the execution of this function, the contents
+ * of the buffer pointed to by 'fn' may be modified, but on return
+ * the original contents will be restored. 'buflen' is the size of
+ * the buffer pointed to by 'fn', in PRUnichars.
+ *
+ * Root directories come in three formats:
+ * 1. / or \, meaning the root directory of the current drive.
+ * 2. C:/ or C:\, where C is a drive letter.
+ * 3. \\<server name>\<share point name>\ or
+ * \\<server name>\<share point name>, meaning the root directory
+ * of a UNC (Universal Naming Convention) name.
+ */
+
+static PRBool
+IsRootDirectoryW(PRUnichar *fn, size_t buflen)
+{
+ PRUnichar *p;
+ PRBool slashAdded = PR_FALSE;
+ PRBool rv = PR_FALSE;
+
+ if (_PR_IS_W_SLASH(fn[0]) && fn[1] == L'\0') {
+ return PR_TRUE;
+ }
+
+ if (iswalpha(fn[0]) && fn[1] == L':' && _PR_IS_W_SLASH(fn[2])
+ && fn[3] == L'\0') {
+ rv = getDriveTypeW(fn) > 1 ? PR_TRUE : PR_FALSE;
+ return rv;
+ }
+
+ /* The UNC root directory */
+
+ if (_PR_IS_W_SLASH(fn[0]) && _PR_IS_W_SLASH(fn[1])) {
+ /* The 'server' part should have at least one character. */
+ p = &fn[2];
+ if (*p == L'\0' || _PR_IS_W_SLASH(*p)) {
+ return PR_FALSE;
+ }
+
+ /* look for the next slash */
+ do {
+ p++;
+ } while (*p != L'\0' && !_PR_IS_W_SLASH(*p));
+ if (*p == L'\0') {
+ return PR_FALSE;
+ }
+
+ /* The 'share' part should have at least one character. */
+ p++;
+ if (*p == L'\0' || _PR_IS_W_SLASH(*p)) {
+ return PR_FALSE;
+ }
+
+ /* look for the final slash */
+ do {
+ p++;
+ } while (*p != L'\0' && !_PR_IS_W_SLASH(*p));
+ if (_PR_IS_W_SLASH(*p) && p[1] != L'\0') {
+ return PR_FALSE;
+ }
+ if (*p == L'\0') {
+ /*
+ * GetDriveType() doesn't work correctly if the
+ * path is of the form \\server\share, so we add
+ * a final slash temporarily.
+ */
+ if ((p + 1) < (fn + buflen)) {
+ *p++ = L'\\';
+ *p = L'\0';
+ slashAdded = PR_TRUE;
+ } else {
+ return PR_FALSE; /* name too long */
+ }
+ }
+ rv = getDriveTypeW(fn) > 1 ? PR_TRUE : PR_FALSE;
+ /* restore the 'fn' buffer */
+ if (slashAdded) {
+ *--p = L'\0';
+ }
+ }
+ return rv;
+}
+
+PRInt32
+_PR_MD_GETFILEINFO64_UTF16(const PRUnichar *fn, PRFileInfo64 *info)
+{
+ HANDLE hFindFile;
+ WIN32_FIND_DATAW findFileData;
+ PRUnichar pathbuf[MAX_PATH + 1];
+
+ if (!findFirstFileW || !getFullPathNameW || !getDriveTypeW) {
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return -1;
+ }
+
+ if (NULL == fn || L'\0' == *fn) {
+ PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
+ return -1;
+ }
+
+ /*
+ * FindFirstFile() expands wildcard characters. So
+ * we make sure the pathname contains no wildcard.
+ */
+ if (NULL != wcspbrk(fn, L"?*")) {
+ PR_SetError(PR_FILE_NOT_FOUND_ERROR, 0);
+ return -1;
+ }
+
+ hFindFile = findFirstFileW(fn, &findFileData);
+ if (INVALID_HANDLE_VALUE == hFindFile) {
+ DWORD len;
+ PRUnichar *filePart;
+
+ /*
+ * FindFirstFile() does not work correctly on root directories.
+ * It also doesn't work correctly on a pathname that ends in a
+ * slash. So we first check to see if the pathname specifies a
+ * root directory. If not, and if the pathname ends in a slash,
+ * we remove the final slash and try again.
+ */
+
+ /*
+ * If the pathname does not contain ., \, and /, it cannot be
+ * a root directory or a pathname that ends in a slash.
+ */
+ if (NULL == wcspbrk(fn, L".\\/")) {
+ _PR_MD_MAP_OPENDIR_ERROR(GetLastError());
+ return -1;
+ }
+ len = getFullPathNameW(fn, sizeof(pathbuf)/sizeof(pathbuf[0]), pathbuf,
+ &filePart);
+ if (0 == len) {
+ _PR_MD_MAP_OPENDIR_ERROR(GetLastError());
+ return -1;
+ }
+ if (len > sizeof(pathbuf)/sizeof(pathbuf[0])) {
+ PR_SetError(PR_NAME_TOO_LONG_ERROR, 0);
+ return -1;
+ }
+ if (IsRootDirectoryW(pathbuf, sizeof(pathbuf)/sizeof(pathbuf[0]))) {
+ info->type = PR_FILE_DIRECTORY;
+ info->size = 0;
+ /*
+ * These timestamps don't make sense for root directories.
+ */
+ info->modifyTime = 0;
+ info->creationTime = 0;
+ return 0;
+ }
+ if (!_PR_IS_W_SLASH(pathbuf[len - 1])) {
+ _PR_MD_MAP_OPENDIR_ERROR(GetLastError());
+ return -1;
+ } else {
+ pathbuf[len - 1] = L'\0';
+ hFindFile = findFirstFileW(pathbuf, &findFileData);
+ if (INVALID_HANDLE_VALUE == hFindFile) {
+ _PR_MD_MAP_OPENDIR_ERROR(GetLastError());
+ return -1;
+ }
+ }
+ }
+
+ FindClose(hFindFile);
+
+ if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+ info->type = PR_FILE_DIRECTORY;
+ } else {
+ info->type = PR_FILE_FILE;
+ }
+
+ info->size = findFileData.nFileSizeHigh;
+ info->size = (info->size << 32) + findFileData.nFileSizeLow;
+
+ _PR_FileTimeToPRTime(&findFileData.ftLastWriteTime, &info->modifyTime);
+
+ if (0 == findFileData.ftCreationTime.dwLowDateTime &&
+ 0 == findFileData.ftCreationTime.dwHighDateTime) {
+ info->creationTime = info->modifyTime;
+ } else {
+ _PR_FileTimeToPRTime(&findFileData.ftCreationTime,
+ &info->creationTime);
+ }
+
+ return 0;
+}
+/* ================ end of UTF16 Interfaces ================================ */
+#endif /* MOZ_UNICODE */
diff --git a/pr/src/md/windows/w95sock.c b/pr/src/md/windows/w95sock.c
index d36ffdcd..58944703 100644
--- a/pr/src/md/windows/w95sock.c
+++ b/pr/src/md/windows/w95sock.c
@@ -168,7 +168,6 @@ 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);
@@ -180,6 +179,20 @@ _PR_MD_BIND(PRFileDesc *fd, const PRNetAddr *addr, PRUint32 addrlen)
return 0;
}
+PRInt32
+_PR_MD_LISTEN(PRFileDesc *fd, PRIntn backlog)
+{
+ PRInt32 rv;
+
+ rv = listen(fd->secret->md.osfd, backlog);
+
+ if (rv == SOCKET_ERROR) {
+ _PR_MD_MAP_DEFAULT_ERROR(WSAGetLastError());
+ return -1;
+ }
+
+ return 0;
+}
PRInt32
_PR_MD_RECV(PRFileDesc *fd, void *buf, PRInt32 amount, PRIntn flags,
@@ -461,6 +474,7 @@ static PRInt32 socket_io_wait(
struct timeval tv;
PRThread *me = _PR_MD_CURRENT_THREAD();
PRIntervalTime elapsed, remaining;
+ PRBool wait_for_remaining;
fd_set rd_wr, ex;
int err, len;
@@ -547,8 +561,10 @@ static PRInt32 socket_io_wait(
* so that there is an upper limit on the delay
* before the interrupt bit is checked.
*/
+ wait_for_remaining = PR_TRUE;
tv.tv_sec = PR_IntervalToSeconds(remaining);
if (tv.tv_sec > _PR_INTERRUPT_CHECK_INTERVAL_SECS) {
+ wait_for_remaining = PR_FALSE;
tv.tv_sec = _PR_INTERRUPT_CHECK_INTERVAL_SECS;
tv.tv_usec = 0;
} else {
@@ -618,8 +634,12 @@ static PRInt32 socket_io_wait(
*/
if (rv == 0 )
{
- elapsed = PR_SecondsToInterval(tv.tv_sec)
- + PR_MicrosecondsToInterval(tv.tv_usec);
+ if (wait_for_remaining) {
+ elapsed = remaining;
+ } else {
+ elapsed = PR_SecondsToInterval(tv.tv_sec)
+ + PR_MicrosecondsToInterval(tv.tv_usec);
+ }
if (elapsed >= remaining) {
PR_SetError(PR_IO_TIMEOUT_ERROR, 0);
rv = -1;
diff --git a/pr/src/md/windows/w95thred.c b/pr/src/md/windows/w95thred.c
index a70f1620..f8a70043 100644
--- a/pr/src/md/windows/w95thred.c
+++ b/pr/src/md/windows/w95thred.c
@@ -131,7 +131,13 @@ _PR_MD_CREATE_THREAD(PRThread *thread,
}
thread->md.id = thread->id;
- _PR_MD_SET_PRIORITY(&(thread->md), priority);
+ /*
+ * On windows, a thread is created with a thread priority of
+ * THREAD_PRIORITY_NORMAL.
+ */
+ if (priority != PR_PRIORITY_NORMAL) {
+ _PR_MD_SET_PRIORITY(&(thread->md), priority);
+ }
/* Activate the thread */
if ( ResumeThread( thread->md.handle ) != -1)
diff --git a/pr/src/misc/Makefile.in b/pr/src/misc/Makefile.in
index 114e110b..5949d507 100644
--- a/pr/src/misc/Makefile.in
+++ b/pr/src/misc/Makefile.in
@@ -82,14 +82,6 @@ RELEASE_BINS = $(srcdir)/compile-et.pl $(srcdir)/prerr.properties
include $(topsrcdir)/config/rules.mk
-# An AIX Optimization bug causes PR_dtoa() to produce wrong result.
-# This suppresses optimization for this single compilation unit.
-ifeq ($(OS_ARCH), AIX)
-$(OBJDIR)/prdtoa.o: prdtoa.c
- @$(MAKE_OBJDIR)
- $(CC) -o $@ -c $(filter-out -O, $(CFLAGS)) $<
-endif
-
#
# Generate prerr.h, prerr.c, and prerr.properties from prerr.et.
#
diff --git a/pr/src/misc/compile-et.pl b/pr/src/misc/compile-et.pl
index c1c55dd7..8fafcb7b 100644
--- a/pr/src/misc/compile-et.pl
+++ b/pr/src/misc/compile-et.pl
@@ -129,7 +129,7 @@ print C "};\n\n";
printf C "static const struct PRErrorTable et = { text, \"%s\", %dL, %d };\n",
$base, $table_base, $table_item_count;
print C "\n";
-print C "void ", $table_name, "_InitializePRErrorTable", "() {\n";
+print C "void ", $table_name, "_InitializePRErrorTable", "(void) {\n";
print C " PR_ErrorInstallTable(&et);\n";
print C "}\n";
diff --git a/pr/src/misc/pralarm.c b/pr/src/misc/pralarm.c
index 488ce5a4..81b251d9 100644
--- a/pr/src/misc/pralarm.c
+++ b/pr/src/misc/pralarm.c
@@ -116,7 +116,7 @@ static PRIntervalTime pr_PredictNextNotifyTime(PRAlarmID *id)
id->lastNotify = id->nextNotify; /* just keeping track of things */
id->nextNotify = (PRIntervalTime)(offsetFromEpoch + 0.5);
- delta = id->nextNotify - id->nextNotify;
+ delta = id->nextNotify - id->lastNotify;
return delta;
} /* pr_PredictNextNotifyTime */
@@ -180,7 +180,7 @@ static void PR_CALLBACK pr_alarmNotifier(void *arg)
} /* pr_alarm_notifier */
-PR_IMPLEMENT(PRAlarm*) PR_CreateAlarm()
+PR_IMPLEMENT(PRAlarm*) PR_CreateAlarm(void)
{
PRAlarm *alarm = PR_NEWZAP(PRAlarm);
if (alarm != NULL)
diff --git a/pr/src/misc/prcountr.c b/pr/src/misc/prcountr.c
index 850f7bcd..b5f6ae23 100644
--- a/pr/src/misc/prcountr.c
+++ b/pr/src/misc/prcountr.c
@@ -68,7 +68,6 @@
**
*/
-#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#include "prcountr.h"
#include "prclist.h"
#include "prlock.h"
@@ -502,14 +501,3 @@ PR_IMPLEMENT(PRCounterHandle)
return((PRCounterHandle)rnp);
} /* end PR_FindNextCounterRname() */
-
-
-#else /* !(defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)) */
-/*
-** NSPR Counters are not defined in this case
-**
-**
-*/
-/* Some compilers don't like an empty compilation unit. */
-static int dummy = 0;
-#endif /* defined(DEBUG) || defined(FORCE_NSPR_COUNTERS) */
diff --git a/pr/src/misc/prdtoa.c b/pr/src/misc/prdtoa.c
index e2e715fe..ee552229 100644
--- a/pr/src/misc/prdtoa.c
+++ b/pr/src/misc/prdtoa.c
@@ -123,6 +123,11 @@
* if memory is available and otherwise does something you deem
* appropriate. If MALLOC is undefined, malloc will be invoked
* directly -- and assumed always to succeed.
+ * #define YES_ALIAS to permit aliasing certain double values with
+ * arrays of unsigned Longs. 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).
*/
#if defined(IS_LITTLE_ENDIAN)
#define IEEE_8087
@@ -197,6 +202,16 @@ extern void *MALLOC(size_t);
#endif
#else
#include "float.h"
+/*
+ * MacOS 10.2 defines the macro FLT_ROUNDS to an internal function
+ * which does not exist on 10.1. We can safely #define it to 1 here
+ * to allow 10.2 builds to run on 10.1, since we can't use fesetround()
+ * (which does not exist on 10.1 either).
+ */
+#if defined(MACOS_DEPLOYMENT_TARGET) && (MACOS_DEPLOYMENT_TARGET < 100200)
+#undef FLT_ROUNDS
+#define FLT_ROUNDS 1
+#endif
#endif
#ifndef __MATH_H__
#include "math.h"
@@ -216,6 +231,10 @@ extern void *MALLOC(size_t);
Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
#endif
+typedef union { double d; unsigned Long L[2]; } U;
+
+#ifdef YES_ALIAS
+#define dval(x) x
#ifdef IEEE_8087
#define word0(x) ((unsigned Long *)&x)[1]
#define word1(x) ((unsigned Long *)&x)[0]
@@ -223,6 +242,16 @@ Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
#define word0(x) ((unsigned Long *)&x)[0]
#define word1(x) ((unsigned Long *)&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
+#endif
/* The following definition of Storeinc is appropriate for MIPS processors.
* An alternative that might be better on some machines is
@@ -904,7 +933,7 @@ static double ulp(double x)
}
}
#endif
- return a;
+ return dval(a);
}
static double
@@ -974,7 +1003,7 @@ ret_d:
#undef d0
#undef d1
#endif
- return d;
+ return dval(d);
}
static Bigint *
@@ -1117,8 +1146,8 @@ ratio
double da, db;
PRInt32 k, ka, kb;
- da = b2d(a, &ka);
- db = b2d(b, &kb);
+ dval(da) = b2d(a, &ka);
+ dval(db) = b2d(b, &kb);
#ifdef Pack_32
k = ka - kb + 32*(a->wds - b->wds);
#else
@@ -1128,13 +1157,13 @@ ratio
if (k > 0) {
word0(da) += (k >> 2)*Exp_msk1;
if (k &= 3)
- da *= 1 << k;
+ dval(da) *= 1 << k;
}
else {
k = -k;
word0(db) += (k >> 2)*Exp_msk1;
if (k &= 3)
- db *= 1 << k;
+ dval(db) *= 1 << k;
}
#else
if (k > 0)
@@ -1144,7 +1173,7 @@ ratio
word0(db) += k*Exp_msk1;
}
#endif
- return da / db;
+ return dval(da) / dval(db);
}
static CONST double
@@ -1180,6 +1209,16 @@ void _PR_InitDtoa(void)
p5s_lock = PR_NewLock();
}
+void _PR_CleanupDtoa(void)
+{
+ PR_DestroyLock(freelist_lock);
+ freelist_lock = NULL;
+ PR_DestroyLock(p5s_lock);
+ p5s_lock = NULL;
+
+ /* FIXME: deal with freelist and p5s. */
+}
+
#if defined(HAVE_WATCOM_BUG_1)
PRFloat64 __pascal __loadds __export
#else
@@ -1199,7 +1238,7 @@ PR_strtod(CONST char *s00, char **se)
if (!_pr_initialized) _PR_ImplicitInitialization();
sign = nz0 = nz = 0;
- rv = 0.;
+ dval(rv) = 0.;
for(s = s00;;s++) switch(*s) {
case '-':
sign = 1;
@@ -1321,9 +1360,9 @@ dig_done:
if (!nd0)
nd0 = nd;
k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
- rv = y;
+ dval(rv) = y;
if (k > 9)
- rv = tens[k - 9] * rv + z;
+ dval(rv) = tens[k - 9] * dval(rv) + z;
bd0 = 0;
if (nd <= DBL_DIG
#ifndef RND_PRODQUOT
@@ -1337,7 +1376,7 @@ dig_done:
#ifdef VAX
goto vax_ovfl_check;
#else
- /* rv = */ rounded_product(rv, tens[e]);
+ /* rv = */ rounded_product(dval(rv), tens[e]);
goto ret;
#endif
}
@@ -1347,27 +1386,27 @@ dig_done:
* this for larger i values.
*/
e -= i;
- rv *= tens[i];
+ dval(rv) *= tens[i];
#ifdef VAX
/* VAX exponent range is so narrow we must
* worry about overflow here...
*/
vax_ovfl_check:
word0(rv) -= P*Exp_msk1;
- /* rv = */ rounded_product(rv, tens[e]);
+ /* rv = */ rounded_product(dval(rv), tens[e]);
if ((word0(rv) & Exp_mask)
> Exp_msk1*(DBL_MAX_EXP+Bias-1-P))
goto ovfl;
word0(rv) += P*Exp_msk1;
#else
- /* rv = */ rounded_product(rv, tens[e]);
+ /* rv = */ rounded_product(dval(rv), tens[e]);
#endif
goto ret;
}
}
#ifndef Inaccurate_Divide
else if (e >= -Ten_pmax) {
- /* rv = */ rounded_quotient(rv, tens[-e]);
+ /* rv = */ rounded_quotient(dval(rv), tens[-e]);
goto ret;
}
#endif
@@ -1378,13 +1417,13 @@ dig_done:
if (e1 > 0) {
if ((i = e1 & 15) != 0)
- rv *= tens[i];
+ dval(rv) *= tens[i];
if (e1 &= ~15) {
if (e1 > DBL_MAX_10_EXP) {
ovfl:
PR_SetError(PR_RANGE_ERROR, 0);
#ifdef __STDC__
- rv = HUGE_VAL;
+ dval(rv) = HUGE_VAL;
#else
/* Can't trust HUGE_VAL */
#ifdef IEEE_Arith
@@ -1402,10 +1441,10 @@ dig_done:
if (e1 >>= 4) {
for(j = 0; e1 > 1; j++, e1 >>= 1)
if (e1 & 1)
- rv *= bigtens[j];
+ dval(rv) *= bigtens[j];
/* The last multiplication could overflow. */
word0(rv) -= P*Exp_msk1;
- rv *= bigtens[j];
+ dval(rv) *= bigtens[j];
if ((z = word0(rv) & Exp_mask)
> Exp_msk1*(DBL_MAX_EXP+Bias-P))
goto ovfl;
@@ -1424,23 +1463,23 @@ dig_done:
else if (e1 < 0) {
e1 = -e1;
if ((i = e1 & 15) != 0)
- rv /= tens[i];
+ dval(rv) /= tens[i];
if (e1 &= ~15) {
e1 >>= 4;
if (e1 >= 1 << n_bigtens)
goto undfl;
for(j = 0; e1 > 1; j++, e1 >>= 1)
if (e1 & 1)
- rv *= tinytens[j];
+ dval(rv) *= tinytens[j];
/* The last multiplication could underflow. */
- rv0 = rv;
- rv *= tinytens[j];
- if (!rv) {
- rv = 2.*rv0;
- rv *= tinytens[j];
- if (!rv) {
+ dval(rv0) = dval(rv);
+ dval(rv) *= tinytens[j];
+ if (!dval(rv)) {
+ dval(rv) = 2.*dval(rv0);
+ dval(rv) *= tinytens[j];
+ if (!dval(rv)) {
undfl:
- rv = 0.;
+ dval(rv) = 0.;
PR_SetError(PR_RANGE_ERROR, 0);
if (bd0)
goto retfree;
@@ -1464,7 +1503,7 @@ dig_done:
for(;;) {
bd = Balloc(bd0->k);
Bcopy(bd, bd0);
- bb = d2b(rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
+ bb = d2b(dval(rv), &bbe, &bbbits); /* rv = bb * 2^bbe */
bs = i2b(1);
if (e >= 0) {
@@ -1576,12 +1615,12 @@ dig_done:
break;
#endif
if (dsign)
- rv += ulp(rv);
+ dval(rv) += ulp(dval(rv));
#ifndef ROUND_BIASED
else {
- rv -= ulp(rv);
+ dval(rv) -= ulp(dval(rv));
#ifndef Sudden_Underflow
- if (!rv)
+ if (!dval(rv))
goto undfl;
#endif
}
@@ -1632,10 +1671,10 @@ dig_done:
/* Check for overflow */
if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
- rv0 = rv;
+ dval(rv0) = dval(rv);
word0(rv) -= P*Exp_msk1;
- adj = aadj1 * ulp(rv);
- rv += adj;
+ adj = aadj1 * ulp(dval(rv));
+ dval(rv) += adj;
if ((word0(rv) & Exp_mask) >=
Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
if (word0(rv0) == Big0 && word1(rv0) == Big1)
@@ -1650,10 +1689,10 @@ dig_done:
else {
#ifdef Sudden_Underflow
if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
- rv0 = rv;
+ dval(rv0) = dval(rv);
word0(rv) += P*Exp_msk1;
- adj = aadj1 * ulp(rv);
- rv += adj;
+ adj = aadj1 * ulp(dval(rv));
+ dval(rv) += adj;
#ifdef IBM
if ((word0(rv) & Exp_mask) < P*Exp_msk1)
#else
@@ -1671,8 +1710,8 @@ dig_done:
word0(rv) -= P*Exp_msk1;
}
else {
- adj = aadj1 * ulp(rv);
- rv += adj;
+ adj = aadj1 * ulp(dval(rv));
+ dval(rv) += adj;
}
#else
/* Compute adj so that the IEEE rounding rules will
@@ -1687,8 +1726,8 @@ dig_done:
if (!dsign)
aadj1 = -aadj1;
}
- adj = aadj1 * ulp(rv);
- rv += adj;
+ adj = aadj1 * ulp(dval(rv));
+ dval(rv) += adj;
#endif
}
z = word0(rv) & Exp_mask;
@@ -1719,7 +1758,7 @@ retfree:
ret:
if (se)
*se = (char *)s;
- return sign ? -rv : rv;
+ return sign ? -dval(rv) : dval(rv);
}
static PRInt32
@@ -1952,9 +1991,9 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
}
#endif
#ifdef IBM
- d += 0; /* normalize */
+ dval(d) += 0; /* normalize */
#endif
- if (!d) {
+ if (!dval(d)) {
*decpt = 1;
if (bufsize < 2) {
PR_SetError(PR_BUFFER_OVERFLOW_ERROR, 0);
@@ -1968,18 +2007,18 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
return PR_SUCCESS;
}
- b = d2b(d, &be, &bbits);
+ b = d2b(dval(d), &be, &bbits);
#ifdef Sudden_Underflow
i = (PRInt32)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
#else
if ((i = (PRInt32)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1))) != 0) {
#endif
- d2 = d;
+ dval(d2) = dval(d);
word0(d2) &= Frac_mask1;
word0(d2) |= Exp_11;
#ifdef IBM
if (j = 11 - hi0bits(word0(d2) & Frac_mask))
- d2 /= 1 << j;
+ dval(d2) /= 1 << j;
#endif
/* log(x) ~=~ log(1.5) + (x-1.5)/1.5
@@ -2018,19 +2057,19 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
i = bbits + be + (Bias + (P-1) - 1);
x = i > 32 ? word0(d) << (64 - i) | word1(d) >> (i - 32)
: word1(d) << (32 - i);
- d2 = x;
+ dval(d2) = x;
word0(d2) -= 31*Exp_msk1; /* adjust exponent */
i -= (Bias + (P-1) - 1) + 1;
denorm = 1;
}
#endif
- ds = (d2-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
+ ds = (dval(d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
k = (PRInt32)ds;
if (ds < 0. && ds != k)
k--; /* want k = floor(ds) */
k_check = 1;
if (k >= 0 && k <= Ten_pmax) {
- if (d < tens[k])
+ if (dval(d) < tens[k])
k--;
k_check = 0;
}
@@ -2097,7 +2136,7 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
/* Try to get by with floating-point arithmetic. */
i = 0;
- d2 = d;
+ dval(d2) = dval(d);
k0 = k;
ilim0 = ilim;
ieps = 2; /* conservative */
@@ -2107,7 +2146,7 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
if (j & Bletch) {
/* prevent overflows */
j &= Bletch - 1;
- d /= bigtens[n_bigtens-1];
+ dval(d) /= bigtens[n_bigtens-1];
ieps++;
}
for(; j; j >>= 1, i++)
@@ -2115,32 +2154,32 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
ieps++;
ds *= bigtens[i];
}
- d /= ds;
+ dval(d) /= ds;
}
else if ((j1 = -k) != 0) {
- d *= tens[j1 & 0xf];
+ dval(d) *= tens[j1 & 0xf];
for(j = j1 >> 4; j; j >>= 1, i++)
if (j & 1) {
ieps++;
- d *= bigtens[i];
+ dval(d) *= bigtens[i];
}
}
- if (k_check && d < 1. && ilim > 0) {
+ if (k_check && dval(d) < 1. && ilim > 0) {
if (ilim1 <= 0)
goto fast_failed;
ilim = ilim1;
k--;
- d *= 10.;
+ dval(d) *= 10.;
ieps++;
}
- eps = ieps*d + 7.;
+ dval(eps) = ieps*dval(d) + 7.;
word0(eps) -= (P-1)*Exp_msk1;
if (ilim == 0) {
S = mhi = 0;
- d -= 5.;
- if (d > eps)
+ dval(d) -= 5.;
+ if (dval(d) > dval(eps))
goto one_digit;
- if (d < -eps)
+ if (dval(d) < -dval(eps))
goto no_digits;
goto fast_failed;
}
@@ -2149,33 +2188,33 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
/* Use Steele & White method of only
* generating digits needed.
*/
- eps = 0.5/tens[ilim-1] - eps;
+ dval(eps) = 0.5/tens[ilim-1] - dval(eps);
for(i = 0;;) {
- L = (Long) d;
- d -= L;
+ L = (Long) (dval(d));
+ dval(d) -= L;
*s++ = '0' + (PRInt32)L;
- if (d < eps)
+ if (dval(d) < dval(eps))
goto ret1;
- if (1. - d < eps)
+ if (1. - dval(d) < dval(eps))
goto bump_up;
if (++i >= ilim)
break;
- eps *= 10.;
- d *= 10.;
+ dval(eps) *= 10.;
+ dval(d) *= 10.;
}
}
else {
#endif
/* Generate ilim digits, then fix them up. */
- eps *= tens[ilim-1];
- for(i = 1;; i++, d *= 10.) {
- L = (Long) d;
- d -= L;
+ dval(eps) *= tens[ilim-1];
+ for(i = 1;; i++, dval(d) *= 10.) {
+ L = (Long) (dval(d));
+ dval(d) -= L;
*s++ = '0' + (PRInt32)L;
if (i == ilim) {
- if (d > 0.5 + eps)
+ if (dval(d) > 0.5 + dval(eps))
goto bump_up;
- else if (d < 0.5 - eps) {
+ else if (dval(d) < 0.5 - dval(eps)) {
while(*--s == '0'){} /* just count -- nothing to execute */
s++;
goto ret1;
@@ -2188,7 +2227,7 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
#endif
fast_failed:
s = s0;
- d = d2;
+ dval(d) = dval(d2);
k = k0;
ilim = ilim0;
}
@@ -2200,24 +2239,24 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
ds = tens[k];
if (ndigits < 0 && ilim <= 0) {
S = mhi = 0;
- if (ilim < 0 || d <= 5*ds)
+ if (ilim < 0 || dval(d) <= 5*ds)
goto no_digits;
goto one_digit;
}
for(i = 1;; i++) {
- L = (Long) (d / ds);
- d -= L*ds;
+ L = (Long) (dval(d) / ds);
+ dval(d) -= L*ds;
#ifdef Check_FLT_ROUNDS
/* If FLT_ROUNDS == 2, L will usually be high by 1 */
- if (d < 0) {
+ if (dval(d) < 0) {
L--;
- d += ds;
+ dval(d) += ds;
}
#endif
*s++ = '0' + (PRInt32)L;
if (i == ilim) {
- d += d;
- if ((d > ds) || (d == ds && L & 1)) {
+ dval(d) += dval(d);
+ if ((dval(d) > ds) || (dval(d) == ds && L & 1)) {
bump_up:
while(*--s == '9')
if (s == s0) {
@@ -2229,7 +2268,7 @@ PR_dtoa(PRFloat64 d, int mode, int ndigits,
}
break;
}
- if (!(d *= 10.))
+ if (!(dval(d) *= 10.))
break;
}
goto ret1;
@@ -2514,7 +2553,7 @@ PR_cnvtf(char *buf,int bufsz, int prcsn,double fval)
return;
}
/* XXX Why use mode 1? */
- if (PR_dtoa(fval,1,prcsn,&decpt,&sign,&endnum,num,bufsz)
+ if (PR_dtoa(dval(fval),1,prcsn,&decpt,&sign,&endnum,num,bufsz)
== PR_FAILURE) {
buf[0] = '\0';
goto done;
diff --git a/pr/src/misc/prenv.c b/pr/src/misc/prenv.c
index 75af10fb..fdcfb017 100644
--- a/pr/src/misc/prenv.c
+++ b/pr/src/misc/prenv.c
@@ -59,7 +59,7 @@ static PRLock *_pr_envLock = NULL;
/************************************************************************/
-void _PR_InitEnv()
+void _PR_InitEnv(void)
{
_PR_NEW_LOCK_ENV();
}
diff --git a/pr/src/misc/prerr.c b/pr/src/misc/prerr.c
index 68bcc6ce..aaa1c38b 100644
--- a/pr/src/misc/prerr.c
+++ b/pr/src/misc/prerr.c
@@ -113,12 +113,13 @@ static const struct PRErrorMessage text[] = {
{"PR_SOCKET_SHUTDOWN_ERROR", "Socket shutdown"},
{"PR_CONNECT_ABORTED_ERROR", "Connection aborted"},
{"PR_HOST_UNREACHABLE_ERROR", "Host is unreachable"},
+ {"PR_LIBRARY_NOT_LOADED_ERROR", "The library is not loaded"},
{"PR_MAX_ERROR", "Placeholder for the end of the list"},
{0, 0}
};
-static const struct PRErrorTable et = { text, "prerr", -6000L, 75 };
+static const struct PRErrorTable et = { text, "prerr", -6000L, 76 };
-void nspr_InitializePRErrorTable() {
+void nspr_InitializePRErrorTable(void) {
PR_ErrorInstallTable(&et);
}
diff --git a/pr/src/misc/prerr.et b/pr/src/misc/prerr.et
index e7e21305..9281ee6e 100644
--- a/pr/src/misc/prerr.et
+++ b/pr/src/misc/prerr.et
@@ -128,6 +128,7 @@ ec PR_NETWORK_DOWN_ERROR, "Network is down"
ec PR_SOCKET_SHUTDOWN_ERROR, "Socket shutdown"
ec PR_CONNECT_ABORTED_ERROR, "Connection aborted"
ec PR_HOST_UNREACHABLE_ERROR, "Host is unreachable"
+ec PR_LIBRARY_NOT_LOADED_ERROR, "The library is not loaded"
ec PR_MAX_ERROR, "Placeholder for the end of the list"
diff --git a/pr/src/misc/prerr.properties b/pr/src/misc/prerr.properties
index 652545e0..f6f0db26 100644
--- a/pr/src/misc/prerr.properties
+++ b/pr/src/misc/prerr.properties
@@ -32,7 +32,6 @@
#
#
-#
# prerr.properties
# This file is automatically generated; please do not edit it.
PR_OUT_OF_MEMORY_ERROR=Memory allocation attempt failed
@@ -109,4 +108,5 @@ PR_NETWORK_DOWN_ERROR=Network is down
PR_SOCKET_SHUTDOWN_ERROR=Socket shutdown
PR_CONNECT_ABORTED_ERROR=Connection aborted
PR_HOST_UNREACHABLE_ERROR=Host is unreachable
+PR_LIBRARY_NOT_LOADED_ERROR=The library is not loaded
PR_MAX_ERROR=Placeholder for the end of the list
diff --git a/pr/src/misc/prerror.c b/pr/src/misc/prerror.c
index 8456d9d2..6e0d5f19 100644
--- a/pr/src/misc/prerror.c
+++ b/pr/src/misc/prerror.c
@@ -37,13 +37,13 @@
#include <string.h>
#include <stdlib.h>
-PR_IMPLEMENT(PRErrorCode) PR_GetError()
+PR_IMPLEMENT(PRErrorCode) PR_GetError(void)
{
PRThread *thread = PR_GetCurrentThread();
return thread->errorCode;
}
-PR_IMPLEMENT(PRInt32) PR_GetOSError()
+PR_IMPLEMENT(PRInt32) PR_GetOSError(void)
{
PRThread *thread = PR_GetCurrentThread();
return thread->osErrorCode;
diff --git a/pr/src/misc/prinit.c b/pr/src/misc/prinit.c
index 6da27fa0..04c92226 100644
--- a/pr/src/misc/prinit.c
+++ b/pr/src/misc/prinit.c
@@ -161,7 +161,7 @@ static void _pr_SetNativeThreadsOnlyMode(void)
#endif
#if !defined(_PR_INET6) || defined(_PR_INET6_PROBE)
-extern PRStatus _pr_init_ipv6();
+extern PRStatus _pr_init_ipv6(void);
#endif
static void _PR_InitStuff(void)
@@ -169,6 +169,9 @@ static void _PR_InitStuff(void)
if (_pr_initialized) return;
_pr_initialized = PR_TRUE;
+#ifdef _PR_ZONE_ALLOCATOR
+ _PR_InitZones();
+#endif
#ifdef WINNT
_pr_SetNativeThreadsOnlyMode();
#endif
@@ -220,10 +223,6 @@ static void _PR_InitStuff(void)
_PR_InitCPUs();
#endif
-#ifdef _PR_ZONE_ALLOCATOR
- _PR_InitZones();
-#endif
-
/*
* XXX: call _PR_InitMem only on those platforms for which nspr implements
* malloc, for now.
@@ -251,7 +250,7 @@ static void _PR_InitStuff(void)
_PR_MD_FINAL_INIT();
}
-void _PR_ImplicitInitialization()
+void _PR_ImplicitInitialization(void)
{
_PR_InitStuff();
@@ -417,9 +416,10 @@ PR_IMPLEMENT(PRStatus) PR_Cleanup()
PR_ASSERT((_PR_IS_NATIVE_THREAD(me)) || (me->cpu->id == 0));
#endif
-#if defined(WIN16)
+ _PR_CleanupMW();
+ _PR_CleanupDtoa();
+ _PR_CleanupCallOnce();
_PR_ShutdownLinker();
-#endif
/* Release the primordial thread's private data, etc. */
_PR_CleanupThread(me);
@@ -449,7 +449,11 @@ PR_IMPLEMENT(PRStatus) PR_Cleanup()
* Ideally, for each _PR_InitXXX(), there should be a corresponding
* _PR_XXXCleanup() that we can call here.
*/
+ _PR_CleanupNet();
_PR_CleanupIO();
+#ifdef WINNT
+ _PR_CleanupCPUs();
+#endif
_PR_CleanupThreads();
PR_DestroyLock(_pr_sleeplock);
_pr_sleeplock = NULL;
@@ -561,7 +565,7 @@ PR_ProcessAttrSetCurrentDirectory(
const char *dir)
{
PR_FREEIF(attr->currentDirectory);
- attr->currentDirectory = PR_MALLOC(strlen(dir) + 1);
+ attr->currentDirectory = (char *) PR_MALLOC(strlen(dir) + 1);
if (!attr->currentDirectory) {
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
return PR_FAILURE;
@@ -776,13 +780,20 @@ static struct {
PRCondVar *cv;
} mod_init;
-static void _PR_InitCallOnce() {
+static void _PR_InitCallOnce(void) {
mod_init.ml = PR_NewLock();
PR_ASSERT(NULL != mod_init.ml);
mod_init.cv = PR_NewCondVar(mod_init.ml);
PR_ASSERT(NULL != mod_init.cv);
}
+void _PR_CleanupCallOnce()
+{
+ PR_DestroyLock(mod_init.ml);
+ mod_init.ml = NULL;
+ PR_DestroyCondVar(mod_init.cv);
+ mod_init.cv = NULL;
+}
PR_IMPLEMENT(PRStatus) PR_CallOnce(
PRCallOnceType *once,
@@ -808,6 +819,31 @@ PR_IMPLEMENT(PRStatus) PR_CallOnce(
return once->status;
}
+PR_IMPLEMENT(PRStatus) PR_CallOnceWithArg(
+ PRCallOnceType *once,
+ PRCallOnceWithArgFN func,
+ void *arg)
+{
+ if (!_pr_initialized) _PR_ImplicitInitialization();
+
+ if (!once->initialized) {
+ if (PR_AtomicSet(&once->inProgress, 1) == 0) {
+ once->status = (*func)(arg);
+ PR_Lock(mod_init.ml);
+ once->initialized = 1;
+ PR_NotifyAllCondVar(mod_init.cv);
+ PR_Unlock(mod_init.ml);
+ } else {
+ PR_Lock(mod_init.ml);
+ while (!once->initialized) {
+ PR_WaitCondVar(mod_init.cv, PR_INTERVAL_NO_TIMEOUT);
+ }
+ PR_Unlock(mod_init.ml);
+ }
+ }
+ return once->status;
+}
+
PRBool _PR_Obsolete(const char *obsolete, const char *preferred)
{
#if defined(DEBUG)
diff --git a/pr/src/misc/prinrval.c b/pr/src/misc/prinrval.c
index d0af3977..a319e8cb 100644
--- a/pr/src/misc/prinrval.c
+++ b/pr/src/misc/prinrval.c
@@ -68,13 +68,13 @@ void _PR_InitClock(void)
* 2) The units here are milliseconds. That's not appropriate for our use.
*/
-PR_IMPLEMENT(PRIntervalTime) PR_IntervalNow()
+PR_IMPLEMENT(PRIntervalTime) PR_IntervalNow(void)
{
if (!_pr_initialized) _PR_ImplicitInitialization();
return _PR_MD_GET_INTERVAL();
} /* PR_IntervalNow */
-PR_EXTERN(PRUint32) PR_TicksPerSecond()
+PR_EXTERN(PRUint32) PR_TicksPerSecond(void)
{
if (!_pr_initialized) _PR_ImplicitInitialization();
return _PR_MD_INTERVAL_PER_SEC();
diff --git a/pr/src/misc/prnetdb.c b/pr/src/misc/prnetdb.c
index b40ca804..f6699422 100644
--- a/pr/src/misc/prnetdb.c
+++ b/pr/src/misc/prnetdb.c
@@ -83,6 +83,12 @@ PRLock *_pr_dnsLock = NULL;
* Some return a pointer to struct protoent, others return
* an int.
*/
+#if defined(XP_BEOS) && defined(BONE_VERSION)
+#include <arpa/inet.h> /* pick up define for inet_addr */
+#include <sys/socket.h>
+#define _PR_HAVE_GETPROTO_R
+#define _PR_HAVE_GETPROTO_R_POINTER
+#endif
#if defined(SOLARIS) || (defined(BSDI) && defined(_REENTRANT)) \
|| (defined(LINUX) && defined(_REENTRANT) \
@@ -92,7 +98,7 @@ PRLock *_pr_dnsLock = NULL;
#endif
#if defined(OSF1) \
- || defined(AIX4_3) || (defined(AIX) && defined(_THREAD_SAFE)) \
+ || defined(AIX4_3_PLUS) || (defined(AIX) && defined(_THREAD_SAFE)) \
|| (defined(HPUX10_10) && defined(_REENTRANT)) \
|| (defined(HPUX10_20) && defined(_REENTRANT))
#define _PR_HAVE_GETPROTO_R
@@ -157,6 +163,248 @@ const PRIPv6Addr _pr_in6addr_loopback = {{{ 0, 0, 0, 0,
#define _PR_IN6_V4MAPPED_TO_IPADDR(a) ((a)->pr_s6_addr32[3])
+#if defined(_PR_INET6) && defined(_PR_HAVE_GETHOSTBYNAME2)
+
+/*
+ * The _pr_QueryNetIfs() function finds out if the system has
+ * IPv4 or IPv6 source addresses configured and sets _pr_have_inet_if
+ * and _pr_have_inet6_if accordingly.
+ *
+ * We have an implementation using SIOCGIFCONF ioctl and a
+ * default implementation that simply sets _pr_have_inet_if
+ * and _pr_have_inet6_if to true. A better implementation
+ * would be to use the routing sockets (see Chapter 17 of
+ * W. Richard Stevens' Unix Network Programming, Vol. 1, 2nd. Ed.)
+ */
+
+static PRBool _pr_have_inet_if = PR_FALSE;
+static PRBool _pr_have_inet6_if = PR_FALSE;
+
+#undef DEBUG_QUERY_IFS
+
+#if defined(AIX) \
+ || (defined(DARWIN) && (!defined(HAVE_GETIFADDRS) \
+ || (defined(MACOS_DEPLOYMENT_TARGET) \
+ && MACOS_DEPLOYMENT_TARGET < 100200)))
+
+/*
+ * Use SIOCGIFCONF ioctl on platforms that don't have routing
+ * sockets. Warning: whether SIOCGIFCONF ioctl returns AF_INET6
+ * network interfaces is not portable.
+ *
+ * The _pr_QueryNetIfs() function is derived from the code in
+ * src/lib/libc/net/getifaddrs.c in BSD Unix and the code in
+ * Section 16.6 of W. Richard Stevens' Unix Network Programming,
+ * Vol. 1, 2nd. Ed.
+ */
+
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <net/if.h>
+
+#ifdef DEBUG_QUERY_IFS
+static void
+_pr_PrintIfreq(struct ifreq *ifr)
+{
+ PRNetAddr addr;
+ struct sockaddr *sa;
+ const char* family;
+ char addrstr[64];
+
+ sa = &ifr->ifr_addr;
+ if (sa->sa_family == AF_INET) {
+ struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+ family = "inet";
+ memcpy(&addr.inet.ip, &sin->sin_addr, sizeof(sin->sin_addr));
+ } else if (sa->sa_family == AF_INET6) {
+ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa;
+ family = "inet6";
+ memcpy(&addr.ipv6.ip, &sin6->sin6_addr, sizeof(sin6->sin6_addr));
+ } else {
+ return; /* skip if not AF_INET or AF_INET6 */
+ }
+ addr.raw.family = sa->sa_family;
+ PR_NetAddrToString(&addr, addrstr, sizeof(addrstr));
+ printf("%s: %s %s\n", ifr->ifr_name, family, addrstr);
+}
+#endif
+
+static void
+_pr_QueryNetIfs(void)
+{
+ int sock;
+ int rv;
+ struct ifconf ifc;
+ struct ifreq *ifr;
+ struct ifreq *lifr;
+ PRUint32 len, lastlen;
+ char *buf;
+
+ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
+ return;
+ }
+
+ /* Issue SIOCGIFCONF request in a loop. */
+ lastlen = 0;
+ len = 100 * sizeof(struct ifreq); /* initial buffer size guess */
+ for (;;) {
+ buf = (char *)PR_Malloc(len);
+ if (NULL == buf) {
+ close(sock);
+ return;
+ }
+ ifc.ifc_buf = buf;
+ ifc.ifc_len = len;
+ rv = ioctl(sock, SIOCGIFCONF, &ifc);
+ if (rv < 0) {
+ if (errno != EINVAL || lastlen != 0) {
+ close(sock);
+ PR_Free(buf);
+ return;
+ }
+ } else {
+ if (ifc.ifc_len == lastlen)
+ break; /* success, len has not changed */
+ lastlen = ifc.ifc_len;
+ }
+ len += 10 * sizeof(struct ifreq); /* increment */
+ PR_Free(buf);
+ }
+ close(sock);
+
+ ifr = ifc.ifc_req;
+ lifr = (struct ifreq *)&ifc.ifc_buf[ifc.ifc_len];
+
+ while (ifr < lifr) {
+ struct sockaddr *sa;
+ int sa_len;
+
+#ifdef DEBUG_QUERY_IFS
+ _pr_PrintIfreq(ifr);
+#endif
+ sa = &ifr->ifr_addr;
+ if (sa->sa_family == AF_INET) {
+ struct sockaddr_in *sin = (struct sockaddr_in *) sa;
+ if (sin->sin_addr.s_addr != htonl(INADDR_LOOPBACK)) {
+ _pr_have_inet_if = PR_TRUE;
+ }
+ } else if (sa->sa_family == AF_INET6) {
+ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
+ if (!IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr)
+ && !IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
+ _pr_have_inet6_if = PR_TRUE;
+ }
+ }
+
+#ifdef _PR_HAVE_SOCKADDR_LEN
+ sa_len = PR_MAX(sa->sa_len, sizeof(struct sockaddr));
+#else
+ switch (sa->sa_family) {
+#ifdef AF_LINK
+ case AF_LINK:
+ sa_len = sizeof(struct sockaddr_dl);
+ break;
+#endif
+ case AF_INET6:
+ sa_len = sizeof(struct sockaddr_in6);
+ break;
+ default:
+ sa_len = sizeof(struct sockaddr);
+ break;
+ }
+#endif
+ ifr = (struct ifreq *)(((char *)sa) + sa_len);
+ }
+ PR_Free(buf);
+}
+
+#elif (defined(DARWIN) && defined(HAVE_GETIFADDRS))
+
+/*
+ * Use the BSD getifaddrs function.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <ifaddrs.h>
+#include <netinet/in.h>
+
+#ifdef DEBUG_QUERY_IFS
+static void
+_pr_PrintIfaddrs(struct ifaddrs *ifa)
+{
+ struct sockaddr *sa;
+ const char* family;
+ void *addrp;
+ char addrstr[64];
+
+ sa = ifa->ifa_addr;
+ if (sa->sa_family == AF_INET) {
+ struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+ family = "inet";
+ addrp = &sin->sin_addr;
+ } else if (sa->sa_family == AF_INET6) {
+ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa;
+ family = "inet6";
+ addrp = &sin6->sin6_addr;
+ } else {
+ return; /* skip if not AF_INET or AF_INET6 */
+ }
+ inet_ntop(sa->sa_family, addrp, addrstr, sizeof(addrstr));
+ printf("%s: %s %s\n", ifa->ifa_name, family, addrstr);
+}
+#endif
+
+static void
+_pr_QueryNetIfs(void)
+{
+ struct ifaddrs *ifp;
+ struct ifaddrs *ifa;
+
+ if (getifaddrs(&ifp) == -1) {
+ return;
+ }
+ for (ifa = ifp; ifa; ifa = ifa->ifa_next) {
+ struct sockaddr *sa;
+
+#ifdef DEBUG_QUERY_IFS
+ _pr_PrintIfaddrs(ifa);
+#endif
+ sa = ifa->ifa_addr;
+ if (sa->sa_family == AF_INET) {
+ struct sockaddr_in *sin = (struct sockaddr_in *) sa;
+ if (sin->sin_addr.s_addr != htonl(INADDR_LOOPBACK)) {
+ _pr_have_inet_if = 1;
+ }
+ } else if (sa->sa_family == AF_INET6) {
+ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
+ if (!IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr)
+ && !IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
+ _pr_have_inet6_if = 1;
+ }
+ }
+ }
+ freeifaddrs(ifp);
+}
+
+#else /* default */
+
+/*
+ * Emulate the code in NSPR 4.2 or older. PR_GetIPNodeByName behaves
+ * as if the system had both IPv4 and IPv6 source addresses configured.
+ */
+static void
+_pr_QueryNetIfs(void)
+{
+ _pr_have_inet_if = PR_TRUE;
+ _pr_have_inet6_if = PR_TRUE;
+}
+
+#endif
+
+#endif /* _PR_INET6 && _PR_HAVE_GETHOSTBYNAME2 */
+
void _PR_InitNet(void)
{
#if defined(XP_UNIX)
@@ -174,6 +422,31 @@ void _PR_InitNet(void)
#if !defined(_PR_HAVE_GETPROTO_R)
_getproto_lock = PR_NewLock();
#endif
+#if defined(_PR_INET6) && defined(_PR_HAVE_GETHOSTBYNAME2)
+ _pr_QueryNetIfs();
+#ifdef DEBUG_QUERY_IFS
+ if (_pr_have_inet_if)
+ printf("Have IPv4 source address\n");
+ if (_pr_have_inet6_if)
+ printf("Have IPv6 source address\n");
+#endif
+#endif
+}
+
+void _PR_CleanupNet(void)
+{
+#if !defined(_PR_NO_DNS_LOCK)
+ if (_pr_dnsLock) {
+ PR_DestroyLock(_pr_dnsLock);
+ _pr_dnsLock = NULL;
+ }
+#endif
+#if !defined(_PR_HAVE_GETPROTO_R)
+ if (_getproto_lock) {
+ PR_DestroyLock(_getproto_lock);
+ _getproto_lock = NULL;
+ }
+#endif
}
/*
@@ -215,7 +488,6 @@ static void MakeIPv4MappedAddr(const char *v4, char *v6)
memset(v6, 0, 10);
memset(v6 + 10, 0xff, 2);
memcpy(v6 + 12, v4, 4);
- PR_ASSERT(_PR_IN6_IS_ADDR_V4MAPPED(((PRIPv6Addr *) v6)));
}
/*
@@ -225,7 +497,6 @@ static void MakeIPv4CompatAddr(const char *v4, char *v6)
{
memset(v6, 0, 12);
memcpy(v6 + 12, v4, 4);
- PR_ASSERT(_PR_IN6_IS_ADDR_V4COMPAT(((PRIPv6Addr *) v6)));
}
/*
@@ -406,7 +677,7 @@ PR_IMPLEMENT(PRStatus) PR_GetHostByName(
tmpbuf = localbuf;
if (bufsize > sizeof(localbuf))
{
- tmpbuf = PR_Malloc(bufsize);
+ tmpbuf = (char *)PR_Malloc(bufsize);
if (NULL == tmpbuf)
{
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
@@ -538,7 +809,7 @@ PR_IMPLEMENT(PRStatus) PR_GetIPNodeByName(
tmpbuf = localbuf;
if (bufsize > sizeof(localbuf))
{
- tmpbuf = PR_Malloc(bufsize);
+ tmpbuf = (char *)PR_Malloc(bufsize);
if (NULL == tmpbuf)
{
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
@@ -553,11 +824,15 @@ PR_IMPLEMENT(PRStatus) PR_GetIPNodeByName(
LOCK_DNS();
if (af == PR_AF_INET6)
{
+ if ((flags & PR_AI_ADDRCONFIG) == 0 || _pr_have_inet6_if)
+ {
#ifdef _PR_INET6_PROBE
- if (_pr_ipv6_is_present == PR_TRUE)
+ if (_pr_ipv6_is_present == PR_TRUE)
#endif
- h = GETHOSTBYNAME2(name, AF_INET6);
- if ((NULL == h) && (flags & PR_AI_V4MAPPED))
+ h = GETHOSTBYNAME2(name, AF_INET6);
+ }
+ if ((NULL == h) && (flags & PR_AI_V4MAPPED)
+ && ((flags & PR_AI_ADDRCONFIG) == 0 || _pr_have_inet_if))
{
did_af_inet = PR_TRUE;
h = GETHOSTBYNAME2(name, AF_INET);
@@ -565,8 +840,11 @@ PR_IMPLEMENT(PRStatus) PR_GetIPNodeByName(
}
else
{
- did_af_inet = PR_TRUE;
- h = GETHOSTBYNAME2(name, af);
+ if ((flags & PR_AI_ADDRCONFIG) == 0 || _pr_have_inet_if)
+ {
+ did_af_inet = PR_TRUE;
+ h = GETHOSTBYNAME2(name, af);
+ }
}
#elif defined(_PR_HAVE_GETIPNODEBYNAME)
h = getipnodebyname(name, md_af, tmp_flags, &error_num);
@@ -619,7 +897,8 @@ PR_IMPLEMENT(PRStatus) PR_GetIPNodeByName(
#endif
#if defined(_PR_INET6) && defined(_PR_HAVE_GETHOSTBYNAME2)
if ((PR_SUCCESS == rv) && (flags & PR_AI_V4MAPPED)
- && (flags & (PR_AI_ALL|PR_AI_ADDRCONFIG))
+ && ((flags & PR_AI_ALL)
+ || ((flags & PR_AI_ADDRCONFIG) && _pr_have_inet_if))
&& !did_af_inet && (h = GETHOSTBYNAME2(name, AF_INET)) != 0) {
rv = AppendV4AddrsToHostent(h, &buf, &bufsize, hp);
if (PR_SUCCESS != rv)
@@ -681,6 +960,10 @@ PR_IMPLEMENT(PRStatus) PR_GetHostByAddr(
#else
af = AF_INET;
#endif
+#if defined(_PR_GHBA_DISALLOW_V4MAPPED)
+ if (_PR_IN6_IS_ADDR_V4MAPPED(&hostaddr->ipv6.ip))
+ af = AF_INET;
+#endif
}
else
{
@@ -717,7 +1000,7 @@ PR_IMPLEMENT(PRStatus) PR_GetHostByAddr(
tmpbuf = localbuf;
if (bufsize > sizeof(localbuf))
{
- tmpbuf = PR_Malloc(bufsize);
+ tmpbuf = (char *)PR_Malloc(bufsize);
if (NULL == tmpbuf)
{
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
@@ -1164,7 +1447,7 @@ PR_IsNetAddrType(const PRNetAddr *addr, PRNetAddrValue val)
return PR_FALSE;
}
-#ifndef _PR_INET6
+#ifndef _PR_HAVE_INET_NTOP
#define XX 127
static const unsigned char index_hex[256] = {
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
@@ -1404,14 +1687,14 @@ static const char *V6AddrToString(
#undef STUFF
}
-#endif /* !_PR_INET6 */
+#endif /* !_PR_HAVE_INET_NTOP */
PR_IMPLEMENT(PRStatus) PR_StringToNetAddr(const char *string, PRNetAddr *addr)
{
PRStatus status = PR_SUCCESS;
PRIntn rv;
-#if defined(_PR_INET6)
+#if defined(_PR_HAVE_INET_NTOP)
rv = inet_pton(AF_INET6, string, &addr->ipv6.ip);
if (1 == rv)
{
@@ -1434,7 +1717,7 @@ PR_IMPLEMENT(PRStatus) PR_StringToNetAddr(const char *string, PRNetAddr *addr)
status = PR_FAILURE;
}
}
-#else /* _PR_INET6 */
+#else /* _PR_HAVE_INET_NTOP */
rv = StringToV6Addr(string, &addr->ipv6.ip);
if (1 == rv) {
addr->raw.family = PR_AF_INET6;
@@ -1458,7 +1741,7 @@ PR_IMPLEMENT(PRStatus) PR_StringToNetAddr(const char *string, PRNetAddr *addr)
PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
status = PR_FAILURE;
}
-#endif /* _PR_INET6 */
+#endif /* _PR_HAVE_INET_NTOP */
return status;
}
@@ -1468,7 +1751,7 @@ PR_IMPLEMENT(PRStatus) PR_NetAddrToString(
{
if (PR_AF_INET6 == addr->raw.family)
{
-#if defined(_PR_INET6)
+#if defined(_PR_HAVE_INET_NTOP)
if (NULL == inet_ntop(AF_INET6, &addr->ipv6.ip, string, size))
#else
if (NULL == V6AddrToString(&addr->ipv6.ip, string, size))
diff --git a/pr/src/misc/prolock.c b/pr/src/misc/prolock.c
index a2a50ced..e8384879 100644
--- a/pr/src/misc/prolock.c
+++ b/pr/src/misc/prolock.c
@@ -38,7 +38,6 @@
** Implement the API defined in prolock.h
**
*/
-#if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
#include "prolock.h"
#include "prlog.h"
#include "prerror.h"
@@ -96,13 +95,3 @@ PR_IMPLEMENT(PRStatus)
PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
return PR_FAILURE;
} /* end PR_UnlockOrderedLock() */
-
-#else /* ! defined(FORCE_NSPR_ORDERED_LOCK) */
-/*
-** NSPR Ordered Lock is not defined when !DEBUG and !FORCE_NSPR_ORDERED_LOCK
-**
-*/
-
-/* Some compilers don't like an empty compilation unit. */
-static int dummy = 0;
-#endif /* defined(FORCE_NSPR_ORDERED_LOCK */
diff --git a/pr/src/misc/prsystem.c b/pr/src/misc/prsystem.c
index bb786766..5c84e5e7 100644
--- a/pr/src/misc/prsystem.c
+++ b/pr/src/misc/prsystem.c
@@ -58,7 +58,7 @@
#endif
#if defined(HPUX)
-#include <sys/mp.h>
+#include <sys/mpctl.h>
#endif
#if defined(XP_UNIX)
@@ -66,7 +66,7 @@
#include <sys/utsname.h>
#endif
-PR_IMPLEMENT(char) PR_GetDirectorySeparator()
+PR_IMPLEMENT(char) PR_GetDirectorySeparator(void)
{
return PR_DIRECTORY_SEPARATOR;
} /* PR_GetDirectorySeparator */
@@ -74,7 +74,7 @@ PR_IMPLEMENT(char) PR_GetDirectorySeparator()
/*
** OBSOLETE -- the function name is misspelled.
*/
-PR_IMPLEMENT(char) PR_GetDirectorySepartor()
+PR_IMPLEMENT(char) PR_GetDirectorySepartor(void)
{
#if defined(DEBUG)
static PRBool warn = PR_TRUE;
@@ -97,6 +97,12 @@ PR_IMPLEMENT(PRStatus) PR_GetSystemInfo(PRSysInfo cmd, char *buf, PRUint32 bufle
case PR_SI_HOSTNAME:
if (PR_FAILURE == _PR_MD_GETHOSTNAME(buf, (PRUintn)buflen))
return PR_FAILURE;
+ /*
+ * On some platforms a system does not have a hostname and
+ * its IP address is returned instead. The following code
+ * should be skipped on those platforms.
+ */
+#ifndef _PR_GET_HOST_ADDR_AS_NAME
/* Return the unqualified hostname */
while (buf[len] && (len < buflen)) {
if (buf[len] == '.') {
@@ -105,6 +111,7 @@ PR_IMPLEMENT(PRStatus) PR_GetSystemInfo(PRSysInfo cmd, char *buf, PRUint32 bufle
}
len += 1;
}
+#endif
break;
case PR_SI_SYSNAME:
@@ -150,7 +157,6 @@ PR_IMPLEMENT(PRStatus) PR_GetSystemInfo(PRSysInfo cmd, char *buf, PRUint32 bufle
default:
PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
return PR_FAILURE;
- break;
}
return PR_SUCCESS;
}
diff --git a/pr/src/misc/prtime.c b/pr/src/misc/prtime.c
index 0aa6e46c..a107d1d4 100644
--- a/pr/src/misc/prtime.c
+++ b/pr/src/misc/prtime.c
@@ -774,7 +774,7 @@ PR_IMPLEMENT(PRTimeParameters)
PR_USPacificTimeParameters(const PRExplodedTime *gmt)
{
PRTimeParameters retVal;
- PRExplodedTime std;
+ PRExplodedTime st;
/*
* Based on geographic location and GMT, figure out offset of
@@ -789,32 +789,32 @@ PR_USPacificTimeParameters(const PRExplodedTime *gmt)
* is ignored.
*/
- std.tm_usec = gmt->tm_usec;
- std.tm_sec = gmt->tm_sec;
- std.tm_min = gmt->tm_min;
- std.tm_hour = gmt->tm_hour;
- std.tm_mday = gmt->tm_mday;
- std.tm_month = gmt->tm_month;
- std.tm_year = gmt->tm_year;
- std.tm_wday = gmt->tm_wday;
- std.tm_yday = gmt->tm_yday;
+ st.tm_usec = gmt->tm_usec;
+ st.tm_sec = gmt->tm_sec;
+ st.tm_min = gmt->tm_min;
+ st.tm_hour = gmt->tm_hour;
+ st.tm_mday = gmt->tm_mday;
+ st.tm_month = gmt->tm_month;
+ st.tm_year = gmt->tm_year;
+ st.tm_wday = gmt->tm_wday;
+ st.tm_yday = gmt->tm_yday;
/* Apply the offset to GMT to obtain the local standard time */
- ApplySecOffset(&std, retVal.tp_gmt_offset);
+ ApplySecOffset(&st, retVal.tp_gmt_offset);
/*
* Apply the rules on standard time or GMT to obtain daylight saving
* time offset. In this implementation, we use the US DST rule.
*/
- if (std.tm_month < 3) {
+ if (st.tm_month < 3) {
retVal.tp_dst_offset = 0L;
- } else if (std.tm_month == 3) {
- if (std.tm_wday == 0) {
+ } else if (st.tm_month == 3) {
+ if (st.tm_wday == 0) {
/* A Sunday */
- if (std.tm_mday <= 7) {
+ if (st.tm_mday <= 7) {
/* First Sunday */
/* 01:59:59 PST -> 03:00:00 PDT */
- if (std.tm_hour < 2) {
+ if (st.tm_hour < 2) {
retVal.tp_dst_offset = 0L;
} else {
retVal.tp_dst_offset = 3600L;
@@ -825,7 +825,7 @@ PR_USPacificTimeParameters(const PRExplodedTime *gmt)
}
} else {
/* Not a Sunday. See if before first Sunday or after */
- if (std.tm_wday + 1 <= std.tm_mday) {
+ if (st.tm_wday + 1 <= st.tm_mday) {
/* After first Sunday */
retVal.tp_dst_offset = 3600L;
} else {
@@ -833,14 +833,14 @@ PR_USPacificTimeParameters(const PRExplodedTime *gmt)
retVal.tp_dst_offset = 0L;
}
}
- } else if (std.tm_month < 9) {
+ } else if (st.tm_month < 9) {
retVal.tp_dst_offset = 3600L;
- } else if (std.tm_month == 9) {
- if (std.tm_wday == 0) {
- if (31 - std.tm_mday < 7) {
+ } else if (st.tm_month == 9) {
+ if (st.tm_wday == 0) {
+ if (31 - st.tm_mday < 7) {
/* Last Sunday */
/* 01:59:59 PDT -> 01:00:00 PST */
- if (std.tm_hour < 1) {
+ if (st.tm_hour < 1) {
retVal.tp_dst_offset = 3600L;
} else {
retVal.tp_dst_offset = 0L;
@@ -851,7 +851,7 @@ PR_USPacificTimeParameters(const PRExplodedTime *gmt)
}
} else {
/* See if before or after last Sunday */
- if (7 - std.tm_wday <= 31 - std.tm_mday) {
+ if (7 - st.tm_wday <= 31 - st.tm_mday) {
/* before last Sunday */
retVal.tp_dst_offset = 3600L;
} else {
diff --git a/pr/src/misc/prtpool.c b/pr/src/misc/prtpool.c
index 2f43c676..d0816b30 100644
--- a/pr/src/misc/prtpool.c
+++ b/pr/src/misc/prtpool.c
@@ -166,7 +166,7 @@ struct PRJob {
PR_END_MACRO
static void delete_job(PRJob *jobp);
-static PRThreadPool * alloc_threadpool();
+static PRThreadPool * alloc_threadpool(void);
static PRJob * alloc_job(PRBool joinable, PRThreadPool *tp);
static void notify_ioq(PRThreadPool *tp);
static void notify_timerq(PRThreadPool *tp);
@@ -599,11 +599,11 @@ delete_threadpool(PRThreadPool *tp)
}
static PRThreadPool *
-alloc_threadpool()
+alloc_threadpool(void)
{
PRThreadPool *tp;
- tp = PR_CALLOC(sizeof(*tp));
+ tp = (PRThreadPool *) PR_CALLOC(sizeof(*tp));
if (NULL == tp)
goto failed;
tp->jobq.lock = PR_NewLock();
diff --git a/pr/src/misc/prtrace.c b/pr/src/misc/prtrace.c
index 72b9c52d..f861557c 100644
--- a/pr/src/misc/prtrace.c
+++ b/pr/src/misc/prtrace.c
@@ -41,7 +41,6 @@
**
*/
-#if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
#include <string.h>
#include "prtrace.h"
#include "prclist.h"
@@ -917,14 +916,4 @@ PR_IMPLEMENT(PRIntn)
return rc;
} /* end PR_GetTraceEntries() */
-#else /* !defined(FORCE_NSPR_TRACE) */
-/*
-** The trace facility is not defined when !DEBUG and !FORCE_NSPR_TRACE
-**
-*/
-
-/* Some compilers don't like an empty compilation unit. */
-static int dummy = 0;
-#endif /* defined(FORCE_NSPR_TRACE) */
-
/* end prtrace.c */
diff --git a/pr/src/nspr.def b/pr/src/nspr.def
new file mode 100644
index 00000000..aa1d8417
--- /dev/null
+++ b/pr/src/nspr.def
@@ -0,0 +1,397 @@
+# nm -n -C -p libnspr4.so | awk '/[^ ]* T PR_/ {print $3}'
+NSPR_4.0 {
+ global:
+ LL_MaxInt;
+ LL_MinInt;
+ LL_Zero;
+ PR_Abort;
+ PR_AddToCounter;
+ PR_Accept;
+ PR_AcceptRead;
+ PR_Access;
+ PR_AddWaitFileDesc;
+ PR_AllocFileDesc;
+ PR_Assert;
+ PR_AtomicAdd;
+ PR_AtomicDecrement;
+ PR_AtomicIncrement;
+ PR_AtomicSet;
+ PR_AttachSharedMemory;
+ PR_AttachThread;
+ PR_Available;
+ PR_Available64;
+ PR_Bind;
+ PR_BlockClockInterrupts;
+ PR_BlockInterrupt;
+ PR_CEnterMonitor;
+ PR_CExitMonitor;
+ PR_CNotify;
+ PR_CNotifyAll;
+ PR_CSetOnMonitorRecycle;
+ PR_CWait;
+ PR_CallOnce;
+ PR_Calloc;
+ PR_CancelJob;
+ PR_CancelWaitFileDesc;
+ PR_CancelWaitGroup;
+ PR_CeilingLog2;
+ PR_ChangeFileDescNativeHandle;
+ PR_Cleanup;
+ PR_ClearInterrupt;
+ PR_ClearThreadGCAble;
+ PR_Close;
+ PR_CloseDir;
+ PR_CloseFileMap;
+ PR_CloseSemaphore;
+ PR_CloseSharedMemory;
+ PR_Connect;
+ PR_CreateCounter;
+ PR_ConvertIPv4AddrToIPv6;
+ PR_CreateAlarm;
+ PR_CreateFileMap;
+ PR_CreateIOLayerStub;
+ PR_CreateOrderedLock;
+ PR_CreateMWaitEnumerator;
+ PR_CreatePipe;
+ PR_CreateProcess;
+ PR_CreateProcessDetached;
+ PR_CreateSocketPollFd;
+ PR_CreateStack;
+ PR_CreateThread;
+ PR_CreateThreadGCAble;
+ PR_CreateTrace;
+ PR_CreateThreadPool;
+ PR_DecrementCounter;
+ PR_CreateWaitGroup;
+ PR_Delete;
+ PR_DeleteSemaphore;
+ PR_DeleteSharedMemory;
+ PR_DestroyAlarm;
+ PR_DestroyCounter;
+ PR_DestroyCondVar;
+ PR_DestroyLock;
+ PR_DestroyMWaitEnumerator;
+ PR_DestroyOrderedLock;
+ PR_DestroyMonitor;
+ PR_DestroyPollableEvent;
+ PR_DestroyProcessAttr;
+ PR_DestroyRWLock;
+ PR_DestroySem;
+ PR_DestroySocketPollFd;
+ PR_DestroyTrace;
+ PR_DestroyStack;
+ PR_DestroyWaitGroup;
+ PR_DetachProcess;
+ PR_DetachSharedMemory;
+ PR_DetachThread;
+ PR_DisableClockInterrupts;
+ PR_EnableClockInterrupts;
+ PR_EnterMonitor;
+ PR_EnumerateHostEnt;
+ PR_EnumerateThreads;
+ PR_EnumerateWaitGroup;
+ PR_ErrorInstallCallback;
+ PR_ErrorInstallTable;
+ PR_ErrorLanguages;
+ PR_ErrorToName;
+ PR_ErrorToString;
+ PR_ExitMonitor;
+ PR_ExplodeTime;
+ PR_ExportFileMapAsString;
+ PR_FD_CLR;
+ PR_FD_ISSET;
+ PR_FD_NCLR;
+ PR_FD_NISSET;
+ PR_FD_NSET;
+ PR_FD_SET;
+ PR_FD_ZERO;
+ PR_FileDesc2NativeHandle;
+ PR_FindSymbol;
+ PR_FindSymbolAndLibrary;
+ PR_FloorLog2;
+ PR_FormatTime;
+ PR_FindNextCounterQname;
+ PR_FindNextCounterRname;
+ PR_FindNextTraceQname;
+ PR_FindNextTraceRname;
+ PR_FormatTimeUSEnglish;
+ PR_Free;
+ PR_FreeLibraryName;
+ PR_GMTParameters;
+ PR_GetConnectStatus;
+ PR_GetCurrentThread;
+ PR_GetDefaultIOMethods;
+ PR_GetDescType;
+ PR_GetDirectorySeparator;
+ PR_GetCounter;
+ PR_GetCounterHandleFromName;
+ PR_GetCounterNameFromHandle;
+ PR_GetDirectorySepartor;
+ PR_GetEnv;
+ PR_GetError;
+ PR_GetErrorText;
+ PR_GetErrorTextLength;
+ PR_GetFileInfo;
+ PR_GetFileInfo64;
+ PR_GetFileMethods;
+ PR_GetGCRegisters;
+ PR_GetHostByAddr;
+ PR_GetHostByName;
+ PR_GetIPNodeByName;
+ PR_GetIdentitiesLayer;
+ PR_GetInheritedFD;
+ PR_GetInheritedFileMap;
+ PR_GetLayersIdentity;
+ PR_GetLibraryName;
+ PR_GetLibraryPath;
+ PR_GetMonitorEntryCount;
+ PR_GetNameForIdentity;
+ PR_GetOSError;
+ PR_GetOpenFileInfo;
+ PR_GetOpenFileInfo64;
+ PR_GetPageShift;
+ PR_GetPageSize;
+ PR_GetPeerName;
+ PR_GetPipeMethods;
+ PR_GetProtoByName;
+ PR_GetProtoByNumber;
+ PR_GetRandomNoise;
+ PR_GetSP;
+ PR_GetSockName;
+ PR_GetSocketOption;
+ PR_GetSpecialFD;
+ PR_GetStackSpaceLeft;
+ PR_GetSysfdTableMax;
+ PR_GetSystemInfo;
+ PR_GetTCPMethods;
+ PR_GetThreadAffinityMask;
+ PR_GetThreadID;
+ PR_GetThreadPriority;
+ PR_GetThreadPrivate;
+ PR_GetThreadScope;
+ PR_GetThreadState;
+ PR_GetThreadType;
+ PR_GetUDPMethods;
+ PR_GetUniqueIdentity;
+ PR_ImplodeTime;
+ PR_ImportFile;
+ PR_ImportFileMapFromString;
+ PR_ImportTCPSocket;
+ PR_ImportUDPSocket;
+ PR_GetTraceEntries;
+ PR_GetTraceHandleFromName;
+ PR_GetTraceNameFromHandle;
+ PR_GetTraceOption;
+ PR_Init;
+ PR_Initialize;
+ PR_InitializeNetAddr;
+ PR_Initialized;
+ PR_Interrupt;
+ PR_IntervalNow;
+ PR_IntervalToMicroseconds;
+ PR_IntervalToMilliseconds;
+ PR_IncrementCounter;
+ PR_IntervalToSeconds;
+ PR_IsNetAddrType;
+ PR_JoinJob;
+ PR_JoinThread;
+ PR_JoinThreadPool;
+ PR_KillProcess;
+ PR_Listen;
+ PR_LoadLibrary;
+ PR_LoadLibraryWithFlags;
+ PR_LoadStaticLibrary;
+ PR_LocalTimeParameters;
+ PR_Lock;
+ PR_LockFile;
+ PR_LogFlush;
+ PR_LogPrint;
+ PR_MakeDir;
+ PR_Malloc;
+ PR_MemMap;
+ PR_MemUnmap;
+ PR_MicrosecondsToInterval;
+ PR_MillisecondsToInterval;
+ PR_LockOrderedLock;
+ PR_MkDir;
+ PR_NetAddrToString;
+ PR_NewCondVar;
+ PR_NewLock;
+ PR_NewLogModule;
+ PR_NewMonitor;
+ PR_NewNamedMonitor;
+ PR_NewPollableEvent;
+ PR_NewProcessAttr;
+ PR_NewRWLock;
+ PR_NewSem;
+ PR_NewTCPSocket;
+ PR_NewTCPSocketPair;
+ PR_NewThreadPrivateIndex;
+ PR_NewUDPSocket;
+ PR_NormalizeTime;
+ PR_Notify;
+ PR_NotifyAll;
+ PR_NotifyAllCondVar;
+ PR_NotifyCondVar;
+ PR_Now;
+ PR_Open;
+ PR_OpenAnonFileMap;
+ PR_OpenDir;
+ PR_OpenFile;
+ PR_OpenSemaphore;
+ PR_OpenSharedMemory;
+ PR_OpenTCPSocket;
+ PR_OpenUDPSocket;
+ PR_ParseTimeString;
+ PR_Poll;
+ PR_PopIOLayer;
+ PR_PostSem;
+ PR_PostSemaphore;
+ PR_ProcessAttrSetCurrentDirectory;
+ PR_ProcessAttrSetInheritableFD;
+ PR_ProcessAttrSetInheritableFileMap;
+ PR_ProcessAttrSetStdioRedirect;
+ PR_ProcessExit;
+ PR_PushIOLayer;
+ PR_QueueJob;
+ PR_QueueJob_Accept;
+ PR_QueueJob_Connect;
+ PR_QueueJob_Read;
+ PR_QueueJob_Timer;
+ PR_QueueJob_Write;
+ PR_RWLock_Rlock;
+ PR_RWLock_Unlock;
+ PR_RWLock_Wlock;
+ PR_Read;
+ PR_ReadDir;
+ PR_Realloc;
+ PR_Recv;
+ PR_RecvFrom;
+ PR_Rename;
+ PR_ResetAlarm;
+ PR_ResetProcessAttr;
+ PR_ResumeAll;
+ PR_RmDir;
+ PR_ScanStackPointers;
+ PR_RecordTraceEntries;
+ PR_SecondsToInterval;
+ PR_Seek;
+ PR_Seek64;
+ PR_Select;
+ PR_Send;
+ PR_SendFile;
+ PR_SendTo;
+ PR_SetAlarm;
+ PR_SetConcurrency;
+ PR_SetError;
+ PR_SetErrorText;
+ PR_SetFDCacheSize;
+ PR_SetFDInheritable;
+ PR_SetLibraryPath;
+ PR_SetLogBuffering;
+ PR_SetLogFile;
+ PR_SetNetAddr;
+ PR_SetPollableEvent;
+ PR_SetSocketOption;
+ PR_SetCounter;
+ PR_SetStdioRedirect;
+ PR_SetSysfdTableSize;
+ PR_SetThreadAffinityMask;
+ PR_SetThreadDumpProc;
+ PR_SetThreadGCAble;
+ PR_SetThreadPriority;
+ PR_SetThreadPrivate;
+ PR_SetThreadRecycleMode;
+ PR_Shutdown;
+ PR_ShutdownThreadPool;
+ PR_Sleep;
+ PR_Socket;
+ PR_StackPop;
+ PR_StackPush;
+ PR_Stat;
+ PR_StringToNetAddr;
+ PR_SuspendAll;
+ PR_Sync;
+ PR_TLockFile;
+ PR_ThreadScanStackPointers;
+ PR_SetTraceOption;
+ PR_TicksPerSecond;
+ PR_TransmitFile;
+ PR_USPacificTimeParameters;
+ PR_UnblockClockInterrupts;
+ PR_UnblockInterrupt;
+ PR_UnloadLibrary;
+ PR_SubtractFromCounter;
+ PR_Unlock;
+ PR_UnlockFile;
+ PR_VersionCheck;
+ PR_Wait;
+ PR_WaitCondVar;
+ PR_WaitForPollableEvent;
+ PR_Trace;
+ PR_WaitProcess;
+ PR_WaitRecvReady;
+ PR_WaitSem;
+ PR_WaitSemaphore;
+ PR_Write;
+ PR_Writev;
+ PR_Yield;
+ PR_UnlockOrderedLock;
+ PR_cnvtf;
+ PR_dtoa;
+ PR_fprintf;
+ PR_htonl;
+ PR_htonll;
+ PR_htons;
+ PR_ntohl;
+ PR_ntohll;
+ PR_ntohs;
+ PR_smprintf;
+ PR_smprintf_free;
+ PR_snprintf;
+ PR_sprintf_append;
+ PR_sscanf;
+ PR_strtod;
+ PR_sxprintf;
+ PR_vfprintf;
+ PR_vsmprintf;
+ PR_vsnprintf;
+ PR_vsprintf_append;
+ PR_vsxprintf;
+ PRP_DestroyNakedCondVar;
+ PRP_NakedBroadcast;
+ PRP_NakedNotify;
+ PRP_NakedWait;
+ PRP_NewNakedCondVar;
+ PRP_TryLock;
+ libVersionPoint;
+ local: *;
+};
+
+NSPRprivate {
+ global:
+ GetExecutionEnvironment;
+ PT_FPrintStats;
+ SetExecutionEnvironment;
+ local: *;
+};
+
+NSPR_4.1 {
+ global:
+ PR_ConnectContinue;
+ PR_CreateIOLayer;
+ PR_EmulateAcceptRead;
+ PR_EmulateSendFile;
+ PR_FindFunctionSymbol;
+ PR_FindFunctionSymbolAndLibrary;
+ PR_GetMemMapAlignment;
+ PR_GetNumberOfProcessors;
+ PR_ImportPipe;
+ PR_SetEnv;
+} NSPR_4.0;
+
+NSPR_4.3 {
+ global:
+ PR_CallOnceWithArg;
+ PR_GetLibraryFilePathname;
+} NSPR_4.1;
diff --git a/pr/src/nspr_symvec.opt b/pr/src/nspr_symvec.opt
new file mode 100644
index 00000000..809d284f
--- /dev/null
+++ b/pr/src/nspr_symvec.opt
@@ -0,0 +1,421 @@
+! Fixed section of symbol vector for LIBNSPR4 (non-debug)
+!
+GSMATCH=LEQUAL,2,3
+case_sensitive=YES
+!
+! --------------------------------------------------------------------------
+! Ident 2,1 introduced for Mozilla 0.9.4
+! Based on NSPR 4.1.2
+! --------------------------------------------------------------------------
+! Ident 2,2 introduced for Mozilla 1.2
+! Based on NSPR 4.2.2?
+! PR_ResumeSet, PR_ResumeTest, and PR_SuspendAllSuspended has been "removed".
+! Only we can't remove the entry points because OJI is linked against NSPR so
+! we have to make an upwardly compatible change:
+! PR_ResumeSet is now PR_VMS_Stub1
+! PR_ResumeTest is now PR_VMS_Stub2
+! PR_SuspendAllSuspended is PR_VMS_Stub3
+! These are stub functions (defined in openvms.c) solely for the purpose of
+! occupying the slots in our fixed section of the symbol table.
+! --------------------------------------------------------------------------
+! Ident 2,3 introduced for Mozilla 1.3
+! Previously we were missing some symbols from NSPR 4.0 and 4.1, so now we
+! include everything that's specified in nspr.def.
+! --------------------------------------------------------------------------
+!
+SYMBOL_VECTOR=(PR_Accept=PROCEDURE)
+SYMBOL_VECTOR=(PR_AcceptRead=PROCEDURE)
+SYMBOL_VECTOR=(PR_Access=PROCEDURE)
+SYMBOL_VECTOR=(PR_AllocFileDesc=PROCEDURE)
+SYMBOL_VECTOR=(PR_Assert=PROCEDURE)
+SYMBOL_VECTOR=(PR_AtomicAdd=PROCEDURE)
+SYMBOL_VECTOR=(PR_AtomicDecrement=PROCEDURE)
+SYMBOL_VECTOR=(PR_AtomicSet=PROCEDURE)
+SYMBOL_VECTOR=(PR_AttachSharedMemory=PROCEDURE)
+SYMBOL_VECTOR=(PR_AttachThread=PROCEDURE)
+SYMBOL_VECTOR=(PR_Available64=PROCEDURE)
+SYMBOL_VECTOR=(PR_Available=PROCEDURE)
+SYMBOL_VECTOR=(PR_Bind=PROCEDURE)
+SYMBOL_VECTOR=(PR_BlockClockInterrupts=PROCEDURE)
+SYMBOL_VECTOR=(PR_BlockInterrupt=PROCEDURE)
+SYMBOL_VECTOR=(PR_CExitMonitor=PROCEDURE)
+SYMBOL_VECTOR=(PR_CNotify=PROCEDURE)
+SYMBOL_VECTOR=(PR_CNotifyAll=PROCEDURE)
+SYMBOL_VECTOR=(PR_CSetOnMonitorRecycle=PROCEDURE)
+SYMBOL_VECTOR=(PR_CWait=PROCEDURE)
+SYMBOL_VECTOR=(PR_CallOnce=PROCEDURE)
+SYMBOL_VECTOR=(PR_Calloc=PROCEDURE)
+SYMBOL_VECTOR=(PR_CancelJob=PROCEDURE)
+SYMBOL_VECTOR=(PR_CancelWaitFileDesc=PROCEDURE)
+SYMBOL_VECTOR=(PR_CancelWaitGroup=PROCEDURE)
+SYMBOL_VECTOR=(PR_ChangeFileDescNativeHandle=PROCEDURE)
+SYMBOL_VECTOR=(PR_Cleanup=PROCEDURE)
+SYMBOL_VECTOR=(PR_ClearInterrupt=PROCEDURE)
+SYMBOL_VECTOR=(PR_ClearThreadGCAble=PROCEDURE)
+SYMBOL_VECTOR=(PR_Close=PROCEDURE)
+SYMBOL_VECTOR=(PR_CloseDir=PROCEDURE)
+SYMBOL_VECTOR=(PR_CloseFileMap=PROCEDURE)
+SYMBOL_VECTOR=(PR_CloseSemaphore=PROCEDURE)
+SYMBOL_VECTOR=(PR_CloseSharedMemory=PROCEDURE)
+SYMBOL_VECTOR=(PR_Connect=PROCEDURE)
+SYMBOL_VECTOR=(PR_ConnectContinue=PROCEDURE)
+SYMBOL_VECTOR=(PR_ConvertIPv4AddrToIPv6=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateIOLayer=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateIOLayerStub=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateMWaitEnumerator=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreatePipe=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateProcess=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateProcessDetached=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateSocketPollFd=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateStack=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateThreadGCAble=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateWaitGroup=PROCEDURE)
+SYMBOL_VECTOR=(PR_Delete=PROCEDURE)
+SYMBOL_VECTOR=(PR_DeleteSemaphore=PROCEDURE)
+SYMBOL_VECTOR=(PR_DeleteSharedMemory=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyAlarm=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyCondVar=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyMWaitEnumerator=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyMonitor=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyPollableEvent=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyProcessAttr=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyRWLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroySem=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroySocketPollFd=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyStack=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyWaitGroup=PROCEDURE)
+SYMBOL_VECTOR=(PR_DetachProcess=PROCEDURE)
+SYMBOL_VECTOR=(PR_DetachSharedMemory=PROCEDURE)
+SYMBOL_VECTOR=(PR_DetachThread=PROCEDURE)
+SYMBOL_VECTOR=(PR_DisableClockInterrupts=PROCEDURE)
+SYMBOL_VECTOR=(PR_EmulateAcceptRead=PROCEDURE)
+SYMBOL_VECTOR=(PR_EmulateSendFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_EnableClockInterrupts=PROCEDURE)
+SYMBOL_VECTOR=(PR_EnterMonitor=PROCEDURE)
+SYMBOL_VECTOR=(PR_EnumerateHostEnt=PROCEDURE)
+SYMBOL_VECTOR=(PR_EnumerateThreads=PROCEDURE)
+SYMBOL_VECTOR=(PR_EnumerateWaitGroup=PROCEDURE)
+SYMBOL_VECTOR=(PR_ErrorInstallCallback=PROCEDURE)
+SYMBOL_VECTOR=(PR_ErrorInstallTable=PROCEDURE)
+SYMBOL_VECTOR=(PR_ErrorLanguages=PROCEDURE)
+SYMBOL_VECTOR=(PR_ErrorToName=PROCEDURE)
+SYMBOL_VECTOR=(PR_ExitMonitor=PROCEDURE)
+SYMBOL_VECTOR=(PR_ExportFileMapAsString=PROCEDURE)
+SYMBOL_VECTOR=(PR_FD_CLR=PROCEDURE)
+SYMBOL_VECTOR=(PR_FD_ISSET=PROCEDURE)
+SYMBOL_VECTOR=(PR_FD_NCLR=PROCEDURE)
+SYMBOL_VECTOR=(PR_FD_NISSET=PROCEDURE)
+SYMBOL_VECTOR=(PR_FD_NSET=PROCEDURE)
+SYMBOL_VECTOR=(PR_FD_SET=PROCEDURE)
+SYMBOL_VECTOR=(PR_FD_ZERO=PROCEDURE)
+SYMBOL_VECTOR=(PR_FileDesc2NativeHandle=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindFunctionSymbol=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindFunctionSymbolAndLibrary=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindLibrary=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindSymbol=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindSymbolAndLibrary=PROCEDURE)
+SYMBOL_VECTOR=(PR_FloorLog2=PROCEDURE)
+SYMBOL_VECTOR=(PR_FormatTime=PROCEDURE)
+SYMBOL_VECTOR=(PR_FormatTimeUSEnglish=PROCEDURE)
+SYMBOL_VECTOR=(PR_Free=PROCEDURE)
+SYMBOL_VECTOR=(PR_FreeLibraryName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GMTParameters=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetConnectStatus=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetCurrentThread=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetDefaultIOMethods=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetDirectorySepartor=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetError=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetErrorText=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetErrorTextLength=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetFileInfo64=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetFileInfo=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetFileMethods=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetHostByAddr=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetHostByName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetIPNodeByName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetIdentitiesLayer=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetInheritedFD=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetInheritedFileMap=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetLayersIdentity=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetLibraryName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetLibraryPath=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetMemMapAlignment=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetMonitorEntryCount=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetNameForIdentity=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetNumberOfProcessors=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetOSError=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetOpenFileInfo64=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetOpenFileInfo=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetPageShift=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetPeerName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetPipeMethods=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetProtoByName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetProtoByNumber=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetSP=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetSockName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetSocketOption=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetStackSpaceLeft=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetSysfdTableMax=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetSystemInfo=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetTCPMethods=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetThreadAffinityMask=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetThreadID=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetThreadPriority=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetThreadPrivate=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetThreadScope=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetThreadState=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetThreadType=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetUDPMethods=PROCEDURE)
+SYMBOL_VECTOR=(PR_ImplodeTime=PROCEDURE)
+SYMBOL_VECTOR=(PR_ImportFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_ImportFileMapFromString=PROCEDURE)
+SYMBOL_VECTOR=(PR_ImportPipe=PROCEDURE)
+SYMBOL_VECTOR=(PR_ImportTCPSocket=PROCEDURE)
+SYMBOL_VECTOR=(PR_ImportUDPSocket=PROCEDURE)
+SYMBOL_VECTOR=(PR_Init=PROCEDURE)
+SYMBOL_VECTOR=(PR_Initialize=PROCEDURE)
+SYMBOL_VECTOR=(PR_InitializeNetAddr=PROCEDURE)
+SYMBOL_VECTOR=(PR_Initialized=PROCEDURE)
+SYMBOL_VECTOR=(PR_Interrupt=PROCEDURE)
+SYMBOL_VECTOR=(PR_IntervalToMicroseconds=PROCEDURE)
+SYMBOL_VECTOR=(PR_IntervalToMilliseconds=PROCEDURE)
+SYMBOL_VECTOR=(PR_IntervalToSeconds=PROCEDURE)
+SYMBOL_VECTOR=(PR_IsNetAddrType=PROCEDURE)
+SYMBOL_VECTOR=(PR_JoinJob=PROCEDURE)
+SYMBOL_VECTOR=(PR_JoinThread=PROCEDURE)
+SYMBOL_VECTOR=(PR_JoinThreadPool=PROCEDURE)
+SYMBOL_VECTOR=(PR_KillProcess=PROCEDURE)
+SYMBOL_VECTOR=(PR_Listen=PROCEDURE)
+SYMBOL_VECTOR=(PR_LoadLibrary=PROCEDURE)
+SYMBOL_VECTOR=(PR_LoadLibraryWithFlags=PROCEDURE)
+SYMBOL_VECTOR=(PR_LoadStaticLibrary=PROCEDURE)
+SYMBOL_VECTOR=(PR_LocalTimeParameters=PROCEDURE)
+SYMBOL_VECTOR=(PR_Lock=PROCEDURE)
+SYMBOL_VECTOR=(PR_LockFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_LogFlush=PROCEDURE)
+SYMBOL_VECTOR=(PR_LogPrint=PROCEDURE)
+SYMBOL_VECTOR=(PR_MakeDir=PROCEDURE)
+SYMBOL_VECTOR=(PR_MemMap=PROCEDURE)
+SYMBOL_VECTOR=(PR_MemUnmap=PROCEDURE)
+SYMBOL_VECTOR=(PR_MicrosecondsToInterval=PROCEDURE)
+SYMBOL_VECTOR=(PR_MillisecondsToInterval=PROCEDURE)
+SYMBOL_VECTOR=(PR_MkDir=PROCEDURE)
+SYMBOL_VECTOR=(PR_NetAddrToString=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewCondVar=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewLogModule=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewMonitor=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewNamedMonitor=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewProcessAttr=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewSem=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewTCPSocket=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewTCPSocketPair=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewUDPSocket=PROCEDURE)
+SYMBOL_VECTOR=(PR_NormalizeTime=PROCEDURE)
+SYMBOL_VECTOR=(PR_Notify=PROCEDURE)
+SYMBOL_VECTOR=(PR_NotifyAll=PROCEDURE)
+SYMBOL_VECTOR=(PR_NotifyAllCondVar=PROCEDURE)
+SYMBOL_VECTOR=(PR_NotifyCondVar=PROCEDURE)
+SYMBOL_VECTOR=(PR_Open=PROCEDURE)
+SYMBOL_VECTOR=(PR_OpenDir=PROCEDURE)
+SYMBOL_VECTOR=(PR_OpenFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_OpenSemaphore=PROCEDURE)
+SYMBOL_VECTOR=(PR_OpenTCPSocket=PROCEDURE)
+SYMBOL_VECTOR=(PR_OpenUDPSocket=PROCEDURE)
+SYMBOL_VECTOR=(PR_ParseTimeString=PROCEDURE)
+SYMBOL_VECTOR=(PR_Poll=PROCEDURE)
+SYMBOL_VECTOR=(PR_PopIOLayer=PROCEDURE)
+SYMBOL_VECTOR=(PR_PostSem=PROCEDURE)
+SYMBOL_VECTOR=(PR_PostSemaphore=PROCEDURE)
+SYMBOL_VECTOR=(PR_ProcessAttrSetCurren1sb1r7b$=PROCEDURE) ! PR_ProcessAttrSetCurrentDirectory
+SYMBOL_VECTOR=(PR_ProcessAttrSetInheri3dpg1d0$=PROCEDURE) ! PR_ProcessAttrSetInheritableFileMap
+SYMBOL_VECTOR=(PR_ProcessAttrSetInheritableFD=PROCEDURE)
+SYMBOL_VECTOR=(PR_ProcessAttrSetStdioRedirect=PROCEDURE)
+SYMBOL_VECTOR=(PR_ProcessExit=PROCEDURE)
+SYMBOL_VECTOR=(PR_PushIOLayer=PROCEDURE)
+SYMBOL_VECTOR=(PR_QueueJob=PROCEDURE)
+SYMBOL_VECTOR=(PR_QueueJob_Accept=PROCEDURE)
+SYMBOL_VECTOR=(PR_QueueJob_Connect=PROCEDURE)
+SYMBOL_VECTOR=(PR_QueueJob_Read=PROCEDURE)
+SYMBOL_VECTOR=(PR_QueueJob_Timer=PROCEDURE)
+SYMBOL_VECTOR=(PR_QueueJob_Write=PROCEDURE)
+SYMBOL_VECTOR=(PR_RWLock_Rlock=PROCEDURE)
+SYMBOL_VECTOR=(PR_RWLock_Unlock=PROCEDURE)
+SYMBOL_VECTOR=(PR_RWLock_Wlock=PROCEDURE)
+SYMBOL_VECTOR=(PR_Read=PROCEDURE)
+SYMBOL_VECTOR=(PR_ReadDir=PROCEDURE)
+SYMBOL_VECTOR=(PR_Realloc=PROCEDURE)
+SYMBOL_VECTOR=(PR_Recv=PROCEDURE)
+SYMBOL_VECTOR=(PR_RecvFrom=PROCEDURE)
+SYMBOL_VECTOR=(PR_Rename=PROCEDURE)
+SYMBOL_VECTOR=(PR_ResetAlarm=PROCEDURE)
+SYMBOL_VECTOR=(PR_ResetProcessAttr=PROCEDURE)
+SYMBOL_VECTOR=(PR_ResumeAll=PROCEDURE)
+SYMBOL_VECTOR=(PR_VMS_Stub1=PROCEDURE)
+SYMBOL_VECTOR=(PR_VMS_Stub2=PROCEDURE)
+SYMBOL_VECTOR=(PR_RmDir=PROCEDURE)
+SYMBOL_VECTOR=(PR_ScanStackPointers=PROCEDURE)
+SYMBOL_VECTOR=(PR_SecondsToInterval=PROCEDURE)
+SYMBOL_VECTOR=(PR_Seek64=PROCEDURE)
+SYMBOL_VECTOR=(PR_Seek=PROCEDURE)
+SYMBOL_VECTOR=(PR_Select=PROCEDURE)
+SYMBOL_VECTOR=(PR_Send=PROCEDURE)
+SYMBOL_VECTOR=(PR_SendFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_SendTo=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetAlarm=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetEnv=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetErrorText=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetFDInheritable=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetLogBuffering=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetLogFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetNetAddr=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetPollableEvent=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetSocketOption=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetStdioRedirect=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetSysfdTableSize=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetThreadAffinityMask=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetThreadDumpProc=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetThreadGCAble=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetThreadPriority=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetThreadPrivate=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetThreadRecycleMode=PROCEDURE)
+SYMBOL_VECTOR=(PR_Shutdown=PROCEDURE)
+SYMBOL_VECTOR=(PR_ShutdownThreadPool=PROCEDURE)
+SYMBOL_VECTOR=(PR_Sleep=PROCEDURE)
+SYMBOL_VECTOR=(PR_Socket=PROCEDURE)
+SYMBOL_VECTOR=(PR_StackPop=PROCEDURE)
+SYMBOL_VECTOR=(PR_StackPush=PROCEDURE)
+SYMBOL_VECTOR=(PR_Stat=PROCEDURE)
+SYMBOL_VECTOR=(PR_SuspendAll=PROCEDURE)
+SYMBOL_VECTOR=(PR_VMS_Stub3=PROCEDURE)
+SYMBOL_VECTOR=(PR_Sync=PROCEDURE)
+SYMBOL_VECTOR=(PR_TLockFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_ThreadScanStackPointers=PROCEDURE)
+SYMBOL_VECTOR=(PR_TicksPerSecond=PROCEDURE)
+SYMBOL_VECTOR=(PR_TransmitFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_USPacificTimeParameters=PROCEDURE)
+SYMBOL_VECTOR=(PR_UnblockClockInterrupts=PROCEDURE)
+SYMBOL_VECTOR=(PR_UnblockInterrupt=PROCEDURE)
+SYMBOL_VECTOR=(PR_UnloadLibrary=PROCEDURE)
+SYMBOL_VECTOR=(PR_Unlock=PROCEDURE)
+SYMBOL_VECTOR=(PR_UnlockFile=PROCEDURE)
+SYMBOL_VECTOR=(PR_Wait=PROCEDURE)
+SYMBOL_VECTOR=(PR_WaitCondVar=PROCEDURE)
+SYMBOL_VECTOR=(PR_WaitForPollableEvent=PROCEDURE)
+SYMBOL_VECTOR=(PR_WaitProcess=PROCEDURE)
+SYMBOL_VECTOR=(PR_WaitRecvReady=PROCEDURE)
+SYMBOL_VECTOR=(PR_WaitSem=PROCEDURE)
+SYMBOL_VECTOR=(PR_WaitSemaphore=PROCEDURE)
+SYMBOL_VECTOR=(PR_Write=PROCEDURE)
+SYMBOL_VECTOR=(PR_Writev=PROCEDURE)
+SYMBOL_VECTOR=(PR_XIsLocked=PROCEDURE)
+SYMBOL_VECTOR=(PR_XLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_XNotify=PROCEDURE)
+SYMBOL_VECTOR=(PR_XNotifyAll=PROCEDURE)
+SYMBOL_VECTOR=(PR_XUnlock=PROCEDURE)
+SYMBOL_VECTOR=(PR_XWait=PROCEDURE)
+SYMBOL_VECTOR=(PR_Yield=PROCEDURE)
+SYMBOL_VECTOR=(PR_cnvtf=PROCEDURE)
+SYMBOL_VECTOR=(PR_dtoa=PROCEDURE)
+SYMBOL_VECTOR=(PR_htonl=PROCEDURE)
+SYMBOL_VECTOR=(PR_htonll=PROCEDURE)
+SYMBOL_VECTOR=(PR_htons=PROCEDURE)
+SYMBOL_VECTOR=(PR_ntohl=PROCEDURE)
+SYMBOL_VECTOR=(PR_ntohll=PROCEDURE)
+SYMBOL_VECTOR=(PR_ntohs=PROCEDURE)
+SYMBOL_VECTOR=(PR_smprintf=PROCEDURE)
+SYMBOL_VECTOR=(PR_smprintf_free=PROCEDURE)
+SYMBOL_VECTOR=(PR_sprintf_append=PROCEDURE)
+SYMBOL_VECTOR=(PR_sxprintf=PROCEDURE)
+SYMBOL_VECTOR=(PR_vfprintf=PROCEDURE)
+SYMBOL_VECTOR=(PR_vsmprintf=PROCEDURE)
+SYMBOL_VECTOR=(PR_vsnprintf=PROCEDURE)
+SYMBOL_VECTOR=(PR_vsprintf_append=PROCEDURE)
+SYMBOL_VECTOR=(PR_vsxprintf=PROCEDURE)
+!
+! Start of 2,3 additions
+!
+SYMBOL_VECTOR=(LL_MaxInt=PROCEDURE)
+SYMBOL_VECTOR=(LL_MinInt=PROCEDURE)
+SYMBOL_VECTOR=(LL_Zero=PROCEDURE)
+SYMBOL_VECTOR=(PR_Abort=PROCEDURE)
+SYMBOL_VECTOR=(PR_AddToCounter=PROCEDURE)
+SYMBOL_VECTOR=(PR_AddWaitFileDesc=PROCEDURE)
+SYMBOL_VECTOR=(PR_AtomicIncrement=PROCEDURE)
+SYMBOL_VECTOR=(PR_CEnterMonitor=PROCEDURE)
+SYMBOL_VECTOR=(PR_CeilingLog2=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateCounter=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateAlarm=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateFileMap=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateOrderedLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateTrace=PROCEDURE)
+SYMBOL_VECTOR=(PR_CreateThreadPool=PROCEDURE)
+SYMBOL_VECTOR=(PR_DecrementCounter=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyCounter=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyOrderedLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_DestroyTrace=PROCEDURE)
+SYMBOL_VECTOR=(PR_ErrorToString=PROCEDURE)
+SYMBOL_VECTOR=(PR_ExplodeTime=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindNextCounterQname=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindNextCounterRname=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindNextTraceQname=PROCEDURE)
+SYMBOL_VECTOR=(PR_FindNextTraceRname=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetDescType=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetDirectorySeparator=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetCounter=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetCounterHandleFromName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetCounterNameFromHandle=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetEnv=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetGCRegisters=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetPageSize=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetRandomNoise=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetSpecialFD=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetUniqueIdentity=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetTraceEntries=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetTraceHandleFromName=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetTraceNameFromHandle=PROCEDURE)
+SYMBOL_VECTOR=(PR_GetTraceOption=PROCEDURE)
+SYMBOL_VECTOR=(PR_IntervalNow=PROCEDURE)
+SYMBOL_VECTOR=(PR_IncrementCounter=PROCEDURE)
+SYMBOL_VECTOR=(PR_Malloc=PROCEDURE)
+SYMBOL_VECTOR=(PR_LockOrderedLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewPollableEvent=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewRWLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_NewThreadPrivateIndex=PROCEDURE)
+SYMBOL_VECTOR=(PR_Now=PROCEDURE)
+SYMBOL_VECTOR=(PR_OpenAnonFileMap=PROCEDURE)
+SYMBOL_VECTOR=(PR_OpenSharedMemory=PROCEDURE)
+SYMBOL_VECTOR=(PR_RecordTraceEntries=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetConcurrency=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetFDCacheSize=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetLibraryPath=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetCounter=PROCEDURE)
+SYMBOL_VECTOR=(PR_StringToNetAddr=PROCEDURE)
+SYMBOL_VECTOR=(PR_SetTraceOption=PROCEDURE)
+SYMBOL_VECTOR=(PR_SubtractFromCounter=PROCEDURE)
+SYMBOL_VECTOR=(PR_VersionCheck=PROCEDURE)
+SYMBOL_VECTOR=(PR_Trace=PROCEDURE)
+SYMBOL_VECTOR=(PR_UnlockOrderedLock=PROCEDURE)
+SYMBOL_VECTOR=(PR_fprintf=PROCEDURE)
+SYMBOL_VECTOR=(PR_snprintf=PROCEDURE)
+SYMBOL_VECTOR=(PR_sscanf=PROCEDURE)
+SYMBOL_VECTOR=(PR_strtod=PROCEDURE)
+SYMBOL_VECTOR=(PRP_DestroyNakedCondVar=PROCEDURE)
+SYMBOL_VECTOR=(PRP_NakedBroadcast=PROCEDURE)
+SYMBOL_VECTOR=(PRP_NakedNotify=PROCEDURE)
+SYMBOL_VECTOR=(PRP_NakedWait=PROCEDURE)
+SYMBOL_VECTOR=(PRP_NewNakedCondVar=PROCEDURE)
+SYMBOL_VECTOR=(PRP_TryLock=PROCEDURE)
+SYMBOL_VECTOR=(libVersionPoint=PROCEDURE)
+!
+! NSPR private
+!
+SYMBOL_VECTOR=(GetExecutionEnvironment=PROCEDURE)
+SYMBOL_VECTOR=(PT_FPrintStats=PROCEDURE)
+SYMBOL_VECTOR=(SetExecutionEnvironment=PROCEDURE)
+!
+! --------------------------------------------------------------------------
+! End of fixed section
+! --------------------------------------------------------------------------
+!
diff --git a/pr/src/pthreads/Makefile.in b/pr/src/pthreads/Makefile.in
index a43fd6ac..8eb237d4 100644
--- a/pr/src/pthreads/Makefile.in
+++ b/pr/src/pthreads/Makefile.in
@@ -63,6 +63,11 @@ INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/incl
DEFINES += -D_NSPR_BUILD_
+ifeq ($(OS_ARCH),Linux)
+# for pthread_mutexattr_settype
+DEFINES += -D_XOPEN_SOURCE=500
+endif
+
include $(topsrcdir)/config/rules.mk
export:: $(TARGETS)
diff --git a/pr/src/pthreads/ptio.c b/pr/src/pthreads/ptio.c
index ce263217..deef0973 100644
--- a/pr/src/pthreads/ptio.c
+++ b/pr/src/pthreads/ptio.c
@@ -40,9 +40,11 @@
#if defined(_PR_PTHREADS)
#if defined(_PR_POLL_WITH_SELECT)
+#if !(defined(HPUX) && defined(_USE_BIG_FDS))
/* set fd limit for select(), before including system header files */
#define FD_SETSIZE (16 * 1024)
#endif
+#endif
#include <pthread.h>
#include <string.h> /* for memset() */
@@ -173,11 +175,18 @@ static ssize_t (*pt_aix_sendfile_fptr)() = NULL;
#endif /* HAVE_SEND_FILE */
#endif /* AIX */
+#ifdef LINUX
+#include <sys/sendfile.h>
+#endif
+
#include "primpl.h"
-/* On Alpha Linux, these are already defined in sys/socket.h */
-#if !(defined(LINUX) && defined(__alpha))
#include <netinet/tcp.h> /* TCP_NODELAY, TCP_MAXSEG */
+#ifdef LINUX
+/* TCP_CORK is not defined in <netinet/tcp.h> on Red Hat Linux 6.0 */
+#ifndef TCP_CORK
+#define TCP_CORK 3
+#endif
#endif
#if defined(SOLARIS)
@@ -281,11 +290,9 @@ static PRBool IsValidNetAddrLen(const PRNetAddr *addr, PRInt32 addr_len)
* most current systems.
*/
#if defined(HAVE_SOCKLEN_T) \
- || (defined(LINUX) && defined(__GLIBC__) && __GLIBC__ >= 2 \
- && !defined(__alpha))
+ || (defined(LINUX) && defined(__GLIBC__) && __GLIBC__ >= 2)
typedef socklen_t pt_SockLen;
#elif (defined(AIX) && !defined(AIX4_1)) \
- || (defined(LINUX) && defined(__alpha)) \
|| defined(VMS)
typedef PRSize pt_SockLen;
#else
@@ -338,6 +345,15 @@ struct pt_Continuation
*/
int nbytes_to_send; /* size of header and file */
#endif /* SOLARIS */
+
+#ifdef LINUX
+ /*
+ * For sendfile()
+ */
+ int in_fd; /* descriptor of file to send */
+ off_t offset;
+ size_t count;
+#endif /* LINUX */
PRIntervalTime timeout; /* client (relative) timeout */
@@ -358,15 +374,13 @@ struct pt_Continuation
PTDebug pt_debug; /* this is shared between several modules */
-PR_IMPLEMENT(void) PT_GetStats(PTDebug* here) { *here = pt_debug; }
-
PR_IMPLEMENT(void) PT_FPrintStats(PRFileDesc *debug_out, const char *msg)
{
PTDebug stats;
char buffer[100];
PRExplodedTime tod;
PRInt64 elapsed, aMil;
- PT_GetStats(&stats); /* a copy */
+ stats = pt_debug; /* a copy */
PR_ExplodeTime(stats.timeStarted, PR_LocalTimeParameters, &tod);
(void)PR_FormatTime(buffer, sizeof(buffer), "%T", &tod);
@@ -391,6 +405,13 @@ PR_IMPLEMENT(void) PT_FPrintStats(PRFileDesc *debug_out, const char *msg)
stats.cvars_notified, stats.delayed_cv_deletes);
} /* PT_FPrintStats */
+#else
+
+PR_IMPLEMENT(void) PT_FPrintStats(PRFileDesc *debug_out, const char *msg)
+{
+ /* do nothing */
+} /* PT_FPrintStats */
+
#endif /* DEBUG */
#if defined(_PR_POLL_WITH_SELECT)
@@ -406,6 +427,7 @@ static void pt_poll_now_with_select(pt_Continuation *op)
fd_set rd, wr, *rdp, *wrp;
struct timeval tv;
PRIntervalTime epoch, now, elapsed, remaining;
+ PRBool wait_for_remaining;
PRThread *self = PR_GetCurrentThread();
PR_ASSERT(PR_INTERVAL_NO_WAIT != op->timeout);
@@ -485,9 +507,12 @@ static void pt_poll_now_with_select(pt_Continuation *op)
} else
wrp = NULL;
+ wait_for_remaining = PR_TRUE;
msecs = (PRInt32)PR_IntervalToMilliseconds(remaining);
- if (msecs > PT_DEFAULT_POLL_MSEC)
+ if (msecs > PT_DEFAULT_POLL_MSEC) {
+ wait_for_remaining = PR_FALSE;
msecs = PT_DEFAULT_POLL_MSEC;
+ }
tv.tv_sec = msecs/PR_MSEC_PER_SEC;
tv.tv_usec = (msecs % PR_MSEC_PER_SEC) * PR_USEC_PER_MSEC;
rv = select(op->arg1.osfd + 1, rdp, wrp, NULL, &tv);
@@ -514,9 +539,12 @@ static void pt_poll_now_with_select(pt_Continuation *op)
} else if ((rv == 0) ||
((errno == EINTR) || (errno == EAGAIN))) {
- if (rv == 0) /* select timed out */
- now += PR_MillisecondsToInterval(msecs);
- else
+ if (rv == 0) { /* select timed out */
+ if (wait_for_remaining)
+ now += remaining;
+ else
+ now += PR_MillisecondsToInterval(msecs);
+ } else
now = PR_IntervalNow();
elapsed = (PRIntervalTime) (now - epoch);
if (elapsed >= op->timeout) {
@@ -542,6 +570,7 @@ static void pt_poll_now(pt_Continuation *op)
{
PRInt32 msecs;
PRIntervalTime epoch, now, elapsed, remaining;
+ PRBool wait_for_remaining;
PRThread *self = PR_GetCurrentThread();
PR_ASSERT(PR_INTERVAL_NO_WAIT != op->timeout);
@@ -618,9 +647,13 @@ static void pt_poll_now(pt_Continuation *op)
tmp_pfd.fd = op->arg1.osfd;
tmp_pfd.events = op->event;
+ wait_for_remaining = PR_TRUE;
msecs = (PRInt32)PR_IntervalToMilliseconds(remaining);
if (msecs > PT_DEFAULT_POLL_MSEC)
+ {
+ wait_for_remaining = PR_FALSE;
msecs = PT_DEFAULT_POLL_MSEC;
+ }
rv = poll(&tmp_pfd, 1, msecs);
if (self->state & PT_THREAD_ABORTED)
@@ -654,7 +687,12 @@ static void pt_poll_now(pt_Continuation *op)
} else if ((rv == 0) ||
((errno == EINTR) || (errno == EAGAIN))) {
if (rv == 0) /* poll timed out */
- now += PR_MillisecondsToInterval(msecs);
+ {
+ if (wait_for_remaining)
+ now += remaining;
+ else
+ now += PR_MillisecondsToInterval(msecs);
+ }
else
now = PR_IntervalNow();
elapsed = (PRIntervalTime) (now - epoch);
@@ -1024,17 +1062,18 @@ static PRBool pt_solaris_sendfile_cont(pt_Continuation *op, PRInt16 revents)
ssize_t count;
count = SOLARIS_SENDFILEV(op->arg1.osfd, vec, op->arg3.amount, &xferred);
- PR_ASSERT((count == -1) || (count == xferred));
- PR_ASSERT(xferred <= op->nbytes_to_send);
op->syserrno = errno;
+ PR_ASSERT((count == -1) || (count == xferred));
if (count == -1) {
- if (op->syserrno != EWOULDBLOCK && op->syserrno != EAGAIN) {
+ if (op->syserrno != EWOULDBLOCK && op->syserrno != EAGAIN
+ && op->syserrno != EINTR) {
op->result.code = -1;
return PR_TRUE;
}
count = xferred;
}
+ PR_ASSERT(count <= op->nbytes_to_send);
op->result.code += count;
if (count < op->nbytes_to_send) {
@@ -1059,7 +1098,34 @@ static PRBool pt_solaris_sendfile_cont(pt_Continuation *op, PRInt16 revents)
}
#endif /* SOLARIS */
-void _PR_InitIO()
+#ifdef LINUX
+static PRBool pt_linux_sendfile_cont(pt_Continuation *op, PRInt16 revents)
+{
+ ssize_t rv;
+ off_t oldoffset;
+
+ oldoffset = op->offset;
+ rv = sendfile(op->arg1.osfd, op->in_fd, &op->offset, op->count);
+ op->syserrno = errno;
+
+ if (rv == -1) {
+ if (op->syserrno != EWOULDBLOCK && op->syserrno != EAGAIN) {
+ op->result.code = -1;
+ return PR_TRUE;
+ }
+ rv = 0;
+ }
+ PR_ASSERT(rv == op->offset - oldoffset);
+ op->result.code += rv;
+ if (rv < op->count) {
+ op->count -= rv;
+ return PR_FALSE;
+ }
+ return PR_TRUE;
+}
+#endif /* LINUX */
+
+void _PR_InitIO(void)
{
#if defined(DEBUG)
memset(&pt_debug, 0, sizeof(PTDebug));
@@ -1569,6 +1635,18 @@ static PRFileDesc* pt_Accept(
if (pt_TestAbort()) return newfd;
+#ifdef _PR_STRICT_ADDR_LEN
+ if (addr)
+ {
+ /*
+ * Set addr->raw.family just so that we can use the
+ * PR_NETADDR_SIZE macro.
+ */
+ addr->raw.family = fd->secret->af;
+ addr_len = PR_NETADDR_SIZE(addr);
+ }
+#endif
+
osfd = accept(fd->secret->md.osfd, (struct sockaddr*)addr, &addr_len);
syserrno = errno;
@@ -1614,6 +1692,14 @@ static PRFileDesc* pt_Accept(
{
PR_ASSERT(IsValidNetAddr(addr) == PR_TRUE);
PR_ASSERT(IsValidNetAddrLen(addr, addr_len) == PR_TRUE);
+#ifdef LINUX
+ /*
+ * On Linux, experiments showed that the accepted sockets
+ * inherit the TCP_NODELAY socket option of the listening
+ * socket.
+ */
+ newfd->secret->md.tcp_nodelay = fd->secret->md.tcp_nodelay;
+#endif
}
return newfd;
@@ -2107,7 +2193,7 @@ static PRInt32 pt_AIXSendFile(PRFileDesc *sd, PRSendFileData *sfd,
}
if (count == -1) {
- _MD_aix_map_sendfile_error(syserrno);
+ pt_MapError(_MD_aix_map_sendfile_error, syserrno);
return -1;
}
if (flags & PR_TRANSMITFILE_CLOSE_SOCKET) {
@@ -2146,14 +2232,16 @@ static PRInt32 pt_HPUXSendFile(PRFileDesc *sd, PRSendFileData *sfd,
PRInt32 count;
int syserrno;
- /* Get file size */
- if (fstat(sfd->fd->secret->md.osfd, &statbuf) == -1) {
- _PR_MD_MAP_FSTAT_ERROR(errno);
- return -1;
+ if (sfd->file_nbytes == 0) {
+ /* Get file size */
+ if (fstat(sfd->fd->secret->md.osfd, &statbuf) == -1) {
+ _PR_MD_MAP_FSTAT_ERROR(errno);
+ return -1;
+ }
+ file_nbytes_to_send = statbuf.st_size - sfd->file_offset;
+ } else {
+ file_nbytes_to_send = sfd->file_nbytes;
}
- file_nbytes_to_send = (sfd->file_nbytes == 0) ?
- statbuf.st_size - sfd->file_offset :
- sfd->file_nbytes;
nbytes_to_send = sfd->hlen + sfd->tlen + file_nbytes_to_send;
hdtrl[0].iov_base = (void *) sfd->header; /* cast away the 'const' */
@@ -2228,7 +2316,7 @@ static PRInt32 pt_HPUXSendFile(PRFileDesc *sd, PRSendFileData *sfd,
}
if (count == -1) {
- _MD_hpux_map_sendfile_error(syserrno);
+ pt_MapError(_MD_hpux_map_sendfile_error, syserrno);
return -1;
}
if (flags & PR_TRANSMITFILE_CLOSE_SOCKET) {
@@ -2358,7 +2446,7 @@ static PRInt32 pt_SolarisSendFile(PRFileDesc *sd, PRSendFileData *sfd,
done:
if (count == -1) {
- _MD_solaris_map_sendfile_error(syserrno);
+ pt_MapError(_MD_solaris_map_sendfile_error, syserrno);
return -1;
}
if (flags & PR_TRANSMITFILE_CLOSE_SOCKET) {
@@ -2425,6 +2513,140 @@ static PRInt32 pt_SolarisDispatchSendFile(PRFileDesc *sd, PRSendFileData *sfd,
#endif /* SOLARIS */
+#ifdef LINUX
+/*
+ * pt_LinuxSendFile
+ *
+ * Send file sfd->fd across socket sd. If specified, header and trailer
+ * buffers are sent before and after the file, respectively.
+ *
+ * PR_TRANSMITFILE_CLOSE_SOCKET flag - close socket after sending file
+ *
+ * return number of bytes sent or -1 on error
+ *
+ * This implementation takes advantage of the sendfile() system
+ * call available in Linux kernel 2.2 or higher.
+ */
+
+static PRInt32 pt_LinuxSendFile(PRFileDesc *sd, PRSendFileData *sfd,
+ PRTransmitFileFlags flags, PRIntervalTime timeout)
+{
+ struct stat statbuf;
+ size_t file_nbytes_to_send;
+ PRInt32 count = 0;
+ ssize_t rv;
+ int syserrno;
+ off_t offset;
+ PRBool tcp_cork_enabled = PR_FALSE;
+ int tcp_cork;
+
+ if (sfd->file_nbytes == 0) {
+ /* Get file size */
+ if (fstat(sfd->fd->secret->md.osfd, &statbuf) == -1) {
+ _PR_MD_MAP_FSTAT_ERROR(errno);
+ return -1;
+ }
+ file_nbytes_to_send = statbuf.st_size - sfd->file_offset;
+ } else {
+ file_nbytes_to_send = sfd->file_nbytes;
+ }
+
+ if ((sfd->hlen != 0 || sfd->tlen != 0)
+ && sd->secret->md.tcp_nodelay == 0) {
+ tcp_cork = 1;
+ if (setsockopt(sd->secret->md.osfd, SOL_TCP, TCP_CORK,
+ &tcp_cork, sizeof tcp_cork) == 0) {
+ tcp_cork_enabled = PR_TRUE;
+ } else {
+ syserrno = errno;
+ if (syserrno != EINVAL) {
+ _PR_MD_MAP_SETSOCKOPT_ERROR(syserrno);
+ return -1;
+ }
+ /*
+ * The most likely reason for the EINVAL error is that
+ * TCP_NODELAY is set (with a function other than
+ * PR_SetSocketOption). This is not fatal, so we keep
+ * on going.
+ */
+ PR_LOG(_pr_io_lm, PR_LOG_WARNING,
+ ("pt_LinuxSendFile: "
+ "setsockopt(TCP_CORK) failed with EINVAL\n"));
+ }
+ }
+
+ if (sfd->hlen != 0) {
+ count = PR_Send(sd, sfd->header, sfd->hlen, 0, timeout);
+ if (count == -1) {
+ goto failed;
+ }
+ }
+
+ if (file_nbytes_to_send != 0) {
+ offset = sfd->file_offset;
+ do {
+ rv = sendfile(sd->secret->md.osfd, sfd->fd->secret->md.osfd,
+ &offset, file_nbytes_to_send);
+ } while (rv == -1 && (syserrno = errno) == EINTR);
+ if (rv == -1) {
+ if (syserrno != EAGAIN && syserrno != EWOULDBLOCK) {
+ _MD_linux_map_sendfile_error(syserrno);
+ count = -1;
+ goto failed;
+ }
+ rv = 0;
+ }
+ PR_ASSERT(rv == offset - sfd->file_offset);
+ count += rv;
+
+ if (rv < file_nbytes_to_send) {
+ pt_Continuation op;
+
+ op.arg1.osfd = sd->secret->md.osfd;
+ op.in_fd = sfd->fd->secret->md.osfd;
+ op.offset = offset;
+ op.count = file_nbytes_to_send - rv;
+ op.result.code = count;
+ op.timeout = timeout;
+ op.function = pt_linux_sendfile_cont;
+ op.event = POLLOUT | POLLPRI;
+ count = pt_Continue(&op);
+ syserrno = op.syserrno;
+ if (count == -1) {
+ pt_MapError(_MD_linux_map_sendfile_error, syserrno);
+ goto failed;
+ }
+ }
+ }
+
+ if (sfd->tlen != 0) {
+ rv = PR_Send(sd, sfd->trailer, sfd->tlen, 0, timeout);
+ if (rv == -1) {
+ count = -1;
+ goto failed;
+ }
+ count += rv;
+ }
+
+failed:
+ if (tcp_cork_enabled) {
+ tcp_cork = 0;
+ if (setsockopt(sd->secret->md.osfd, SOL_TCP, TCP_CORK,
+ &tcp_cork, sizeof tcp_cork) == -1 && count != -1) {
+ _PR_MD_MAP_SETSOCKOPT_ERROR(errno);
+ count = -1;
+ }
+ }
+ if (count != -1) {
+ if (flags & PR_TRANSMITFILE_CLOSE_SOCKET) {
+ PR_Close(sd);
+ }
+ PR_ASSERT(count == sfd->hlen + sfd->tlen + file_nbytes_to_send);
+ }
+ return count;
+}
+#endif /* LINUX */
+
#ifdef AIX
extern int _pr_aix_send_file_use_disabled;
#endif
@@ -2465,6 +2687,8 @@ static PRInt32 pt_SendFile(
#else
return(pt_SolarisDispatchSendFile(sd, sfd, flags, timeout));
#endif /* HAVE_SENDFILEV */
+#elif defined(LINUX)
+ return(pt_LinuxSendFile(sd, sfd, flags, timeout));
#else
return(PR_EmulateSendFile(sd, sfd, flags, timeout));
#endif
@@ -2728,6 +2952,12 @@ static PRStatus pt_SetSocketOption(PRFileDesc *fd, const PRSocketOptionData *dat
rv = setsockopt(
fd->secret->md.osfd, level, name,
(char*)&value, sizeof(PRIntn));
+#ifdef LINUX
+ /* for pt_LinuxSendFile */
+ if (name == TCP_NODELAY && rv == 0) {
+ fd->secret->md.tcp_nodelay = value;
+ }
+#endif
break;
}
case PR_SockOpt_McastLoopback:
@@ -3086,27 +3316,27 @@ static PRFileDesc *pt_SetMethods(
return fd;
} /* pt_SetMethods */
-PR_IMPLEMENT(const PRIOMethods*) PR_GetFileMethods()
+PR_IMPLEMENT(const PRIOMethods*) PR_GetFileMethods(void)
{
return &_pr_file_methods;
} /* PR_GetFileMethods */
-PR_IMPLEMENT(const PRIOMethods*) PR_GetPipeMethods()
+PR_IMPLEMENT(const PRIOMethods*) PR_GetPipeMethods(void)
{
return &_pr_pipe_methods;
} /* PR_GetPipeMethods */
-PR_IMPLEMENT(const PRIOMethods*) PR_GetTCPMethods()
+PR_IMPLEMENT(const PRIOMethods*) PR_GetTCPMethods(void)
{
return &_pr_tcp_methods;
} /* PR_GetTCPMethods */
-PR_IMPLEMENT(const PRIOMethods*) PR_GetUDPMethods()
+PR_IMPLEMENT(const PRIOMethods*) PR_GetUDPMethods(void)
{
return &_pr_udp_methods;
} /* PR_GetUDPMethods */
-static const PRIOMethods* PR_GetSocketPollFdMethods()
+static const PRIOMethods* PR_GetSocketPollFdMethods(void)
{
return &_pr_socketpollfd_methods;
} /* PR_GetSocketPollFdMethods */
@@ -3116,11 +3346,6 @@ PR_IMPLEMENT(PRFileDesc*) PR_AllocFileDesc(
{
PRFileDesc *fd = _PR_Getfd();
- /*
- * Assert that the file descriptor is small enough to fit in the
- * fd_set passed to select
- */
- PR_ASSERT(osfd < FD_SETSIZE);
if (NULL == fd) goto failed;
fd->methods = methods;
@@ -3206,6 +3431,9 @@ PR_IMPLEMENT(PRFileDesc*) PR_Socket(PRInt32 domain, PRInt32 type, PRInt32 proto)
fd = pt_SetMethods(osfd, ftype, PR_FALSE, PR_FALSE);
if (fd == NULL) close(osfd);
}
+#ifdef _PR_STRICT_ADDR_LEN
+ if (fd != NULL) fd->secret->af = domain;
+#endif
#if defined(_PR_INET6_PROBE) || !defined(_PR_INET6)
if (fd != NULL) {
/*
@@ -3598,6 +3826,7 @@ static PRInt32 _pr_poll_with_poll(
{
/* make poll() ignore this entry */
syspoll[index].fd = -1;
+ pds[index].out_flags = 0;
}
}
if (0 == ready)
@@ -3805,43 +4034,65 @@ static PRInt32 _pr_poll_with_select(
{
if (0 == ready)
{
+ PRBool add_to_rd = PR_FALSE;
+ PRBool add_to_wr = PR_FALSE;
+ PRBool add_to_ex = PR_FALSE;
+
selectfd[index] = bottom->secret->md.osfd;
if (in_flags_read & PR_POLL_READ)
{
pds[index].out_flags |=
_PR_POLL_READ_SYS_READ;
- FD_SET(bottom->secret->md.osfd, &rd);
- rdp = &rd;
+ add_to_rd = PR_TRUE;
}
if (in_flags_read & PR_POLL_WRITE)
{
pds[index].out_flags |=
_PR_POLL_READ_SYS_WRITE;
- FD_SET(bottom->secret->md.osfd, &wr);
- wrp = &wr;
+ add_to_wr = PR_TRUE;
}
if (in_flags_write & PR_POLL_READ)
{
pds[index].out_flags |=
_PR_POLL_WRITE_SYS_READ;
- FD_SET(bottom->secret->md.osfd, &rd);
- rdp = &rd;
+ add_to_rd = PR_TRUE;
}
if (in_flags_write & PR_POLL_WRITE)
{
pds[index].out_flags |=
_PR_POLL_WRITE_SYS_WRITE;
- FD_SET(bottom->secret->md.osfd, &wr);
- wrp = &wr;
+ add_to_wr = PR_TRUE;
+ }
+ if (pds[index].in_flags & PR_POLL_EXCEPT)
+ {
+ add_to_ex = PR_TRUE;
+ }
+ if ((selectfd[index] > maxfd) &&
+ (add_to_rd || add_to_wr || add_to_ex))
+ {
+ maxfd = selectfd[index];
+ /*
+ * If maxfd is too large to be used with
+ * select, fall back to calling poll.
+ */
+ if (maxfd >= FD_SETSIZE)
+ break;
+ }
+ if (add_to_rd)
+ {
+ FD_SET(bottom->secret->md.osfd, &rd);
+ rdp = &rd;
+ }
+ if (add_to_wr)
+ {
+ FD_SET(bottom->secret->md.osfd, &wr);
+ wrp = &wr;
+ }
+ if (add_to_ex)
+ {
+ FD_SET(bottom->secret->md.osfd, &ex);
+ exp = &ex;
}
- if (pds[index].in_flags & PR_POLL_EXCEPT) {
- FD_SET(bottom->secret->md.osfd, &ex);
- exp = &ex;
- }
- if ((selectfd[index] > maxfd) &&
- (pds[index].out_flags ||
- (pds[index].in_flags & PR_POLL_EXCEPT)))
- maxfd = selectfd[index];
}
}
else
@@ -3859,10 +4110,14 @@ static PRInt32 _pr_poll_with_select(
}
}
}
+ else
+ {
+ pds[index].out_flags = 0;
+ }
}
if (0 == ready)
{
- if ((maxfd + 1) > FD_SETSIZE)
+ if (maxfd >= FD_SETSIZE)
{
/*
* maxfd too large to be used with select, fall back to
@@ -4017,14 +4272,14 @@ PR_IMPLEMENT(PRDirEntry*) PR_ReadDir(PRDir *dir, PRDirFlags flags)
return &dir->d;
} /* PR_ReadDir */
-PR_IMPLEMENT(PRFileDesc*) PR_NewUDPSocket()
+PR_IMPLEMENT(PRFileDesc*) PR_NewUDPSocket(void)
{
PRIntn domain = PF_INET;
return PR_Socket(domain, SOCK_DGRAM, 0);
} /* PR_NewUDPSocket */
-PR_IMPLEMENT(PRFileDesc*) PR_NewTCPSocket()
+PR_IMPLEMENT(PRFileDesc*) PR_NewTCPSocket(void)
{
PRIntn domain = PF_INET;
@@ -4122,7 +4377,7 @@ PR_IMPLEMENT(PRStatus) PR_SetFDInheritable(
{
return PR_FAILURE;
}
- fd->secret->inheritable = inheritable;
+ fd->secret->inheritable = (_PRTriStateBool) inheritable;
}
return PR_SUCCESS;
}
@@ -4158,6 +4413,9 @@ PR_IMPLEMENT(PRFileDesc*) PR_ImportTCPSocket(PRInt32 osfd)
if (!_pr_initialized) _PR_ImplicitInitialization();
fd = pt_SetMethods(osfd, PR_DESC_SOCKET_TCP, PR_FALSE, PR_TRUE);
if (NULL == fd) close(osfd);
+#ifdef _PR_STRICT_ADDR_LEN
+ if (NULL != fd) fd->secret->af = PF_INET;
+#endif
return fd;
} /* PR_ImportTCPSocket */
@@ -4552,4 +4810,39 @@ retry:
}
#endif /* defined(_PR_PTHREADS) */
+#ifdef MOZ_UNICODE
+/* ================ UTF16 Interfaces ================================ */
+PR_IMPLEMENT(PRFileDesc*) PR_OpenFileUTF16(
+ const PRUnichar *name, PRIntn flags, PRIntn mode)
+{
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return NULL;
+}
+
+PR_IMPLEMENT(PRStatus) PR_CloseDirUTF16(PRDir *dir)
+{
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return PR_FAILURE;
+}
+
+PR_IMPLEMENT(PRDirUTF16*) PR_OpenDirUTF16(const PRUnichar *name)
+{
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return NULL;
+}
+
+PR_IMPLEMENT(PRDirEntryUTF16*) PR_ReadDirUTF16(PRDirUTF16 *dir, PRDirFlags flags)
+{
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return NULL;
+}
+
+PR_IMPLEMENT(PRStatus) PR_GetFileInfo64UTF16(const PRUnichar *fn, PRFileInfo64 *info)
+{
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
+ return PR_FAILURE;
+}
+/* ================ UTF16 Interfaces ================================ */
+#endif /* MOZ_UNICODE */
+
/* ptio.c */
diff --git a/pr/src/pthreads/ptsynch.c b/pr/src/pthreads/ptsynch.c
index 4400e8df..17334af3 100644
--- a/pr/src/pthreads/ptsynch.c
+++ b/pr/src/pthreads/ptsynch.c
@@ -71,6 +71,13 @@ void _PR_InitLocks(void)
rv = _PT_PTHREAD_MUTEXATTR_INIT(&_pt_mattr);
PR_ASSERT(0 == rv);
+#ifdef LINUX
+#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+ rv = pthread_mutexattr_settype(&_pt_mattr, PTHREAD_MUTEX_ADAPTIVE_NP);
+ PR_ASSERT(0 == rv);
+#endif
+#endif
+
rv = _PT_PTHREAD_CONDATTR_INIT(&_pt_cvar_attr);
PR_ASSERT(0 == rv);
}
@@ -1041,7 +1048,7 @@ PR_IMPLEMENT(PRStatus) PRP_TryLock(PRLock *lock)
return (PT_TRYLOCK_SUCCESS == rv) ? PR_SUCCESS : PR_FAILURE;
} /* PRP_TryLock */
-PR_IMPLEMENT(PRCondVar*) PRP_NewNakedCondVar()
+PR_IMPLEMENT(PRCondVar*) PRP_NewNakedCondVar(void)
{
PRCondVar *cv;
diff --git a/pr/src/pthreads/ptthread.c b/pr/src/pthreads/ptthread.c
index dc8cc127..7fc2ad4d 100644
--- a/pr/src/pthreads/ptthread.c
+++ b/pr/src/pthreads/ptthread.c
@@ -607,9 +607,9 @@ PR_IMPLEMENT(PRStatus) PR_JoinThread(PRThread *thred)
return (0 == rv) ? PR_SUCCESS : PR_FAILURE;
} /* PR_JoinThread */
-PR_IMPLEMENT(void) PR_DetachThread() { } /* PR_DetachThread */
+PR_IMPLEMENT(void) PR_DetachThread(void) { } /* PR_DetachThread */
-PR_IMPLEMENT(PRThread*) PR_GetCurrentThread()
+PR_IMPLEMENT(PRThread*) PR_GetCurrentThread(void)
{
void *thred;
@@ -724,25 +724,25 @@ PR_IMPLEMENT(PRStatus) PR_Interrupt(PRThread *thred)
return PR_SUCCESS;
} /* PR_Interrupt */
-PR_IMPLEMENT(void) PR_ClearInterrupt()
+PR_IMPLEMENT(void) PR_ClearInterrupt(void)
{
PRThread *me = PR_CurrentThread();
me->state &= ~PT_THREAD_ABORTED;
} /* PR_ClearInterrupt */
-PR_IMPLEMENT(void) PR_BlockInterrupt()
+PR_IMPLEMENT(void) PR_BlockInterrupt(void)
{
PRThread *me = PR_CurrentThread();
_PT_THREAD_BLOCK_INTERRUPT(me);
} /* PR_BlockInterrupt */
-PR_IMPLEMENT(void) PR_UnblockInterrupt()
+PR_IMPLEMENT(void) PR_UnblockInterrupt(void)
{
PRThread *me = PR_CurrentThread();
_PT_THREAD_UNBLOCK_INTERRUPT(me);
} /* PR_UnblockInterrupt */
-PR_IMPLEMENT(PRStatus) PR_Yield()
+PR_IMPLEMENT(PRStatus) PR_Yield(void)
{
static PRBool warning = PR_TRUE;
if (warning) warning = _PR_Obsolete(
@@ -908,7 +908,7 @@ void _PR_InitThreads(
PR_SetThreadPriority(thred, priority);
} /* _PR_InitThreads */
-PR_IMPLEMENT(PRStatus) PR_Cleanup()
+PR_IMPLEMENT(PRStatus) PR_Cleanup(void)
{
PRThread *me = PR_CurrentThread();
PR_LOG(_pr_thread_lm, PR_LOG_MIN, ("PR_Cleanup: shutting down NSPR"));
@@ -920,7 +920,12 @@ PR_IMPLEMENT(PRStatus) PR_Cleanup()
PR_WaitCondVar(pt_book.cv, PR_INTERVAL_NO_TIMEOUT);
PR_Unlock(pt_book.ml);
+ _PR_CleanupMW();
+ _PR_CleanupDtoa();
+ _PR_CleanupCallOnce();
+ _PR_ShutdownLinker();
_PR_LogCleanup();
+ _PR_CleanupNet();
/* Close all the fd's before calling _PR_CleanupIO */
_PR_CleanupIO();
@@ -1026,7 +1031,7 @@ static void null_signal_handler(PRIntn sig);
* conflict with the use of these two signals in our GC support.
* So we don't know how to support GC on Linux pthreads.
*/
-static void init_pthread_gc_support()
+static void init_pthread_gc_support(void)
{
PRIntn rv;
@@ -1066,14 +1071,14 @@ static void init_pthread_gc_support()
#endif /* defined(_PR_DCETHREADS) */
}
-PR_IMPLEMENT(void) PR_SetThreadGCAble()
+PR_IMPLEMENT(void) PR_SetThreadGCAble(void)
{
PR_Lock(pt_book.ml);
PR_CurrentThread()->state |= PT_THREAD_GCABLE;
PR_Unlock(pt_book.ml);
}
-PR_IMPLEMENT(void) PR_ClearThreadGCAble()
+PR_IMPLEMENT(void) PR_ClearThreadGCAble(void)
{
PR_Lock(pt_book.ml);
PR_CurrentThread()->state &= (~PT_THREAD_GCABLE);
@@ -1086,12 +1091,6 @@ static PRBool suspendAllOn = PR_FALSE;
static PRBool suspendAllSuspended = PR_FALSE;
-/* Are all GCAble threads (except gc'ing thread) suspended? */
-PR_IMPLEMENT(PRBool) PR_SuspendAllSuspended()
-{
- return suspendAllSuspended;
-} /* PR_SuspendAllSuspended */
-
PR_IMPLEMENT(PRStatus) PR_EnumerateThreads(PREnumerator func, void *arg)
{
PRIntn count = 0;
@@ -1215,7 +1214,7 @@ static void suspend_signal_handler(PRIntn sig)
while (me->suspend & PT_THREAD_SUSPENDED)
{
#if !defined(FREEBSD) && !defined(NETBSD) && !defined(OPENBSD) \
- && !defined(BSDI) && !defined(VMS) && !defined(UNIXWARE) /*XXX*/
+ && !defined(BSDI) && !defined(VMS) && !defined(UNIXWARE) && !defined(DARWIN) /*XXX*/
PRIntn rv;
sigwait(&sigwait_set, &rv);
#endif
@@ -1242,12 +1241,12 @@ static void suspend_signal_handler(PRIntn sig)
("End suspend_signal_handler thred = %X tid = %X\n", me, me->id));
} /* suspend_signal_handler */
-static void PR_SuspendSet(PRThread *thred)
+static void pt_SuspendSet(PRThread *thred)
{
PRIntn rv;
PR_LOG(_pr_gc_lm, PR_LOG_ALWAYS,
- ("PR_SuspendSet thred %X thread id = %X\n", thred, thred->id));
+ ("pt_SuspendSet thred %X thread id = %X\n", thred, thred->id));
/*
@@ -1257,7 +1256,7 @@ static void PR_SuspendSet(PRThread *thred)
PR_ASSERT((thred->suspend & PT_THREAD_SUSPENDED) == 0);
PR_LOG(_pr_gc_lm, PR_LOG_ALWAYS,
- ("doing pthread_kill in PR_SuspendSet thred %X tid = %X\n",
+ ("doing pthread_kill in pt_SuspendSet thred %X tid = %X\n",
thred, thred->id));
#if defined(VMS)
rv = thread_suspend(thred);
@@ -1267,10 +1266,10 @@ static void PR_SuspendSet(PRThread *thred)
PR_ASSERT(0 == rv);
}
-static void PR_SuspendTest(PRThread *thred)
+static void pt_SuspendTest(PRThread *thred)
{
PR_LOG(_pr_gc_lm, PR_LOG_ALWAYS,
- ("Begin PR_SuspendTest thred %X thread id = %X\n", thred, thred->id));
+ ("Begin pt_SuspendTest thred %X thread id = %X\n", thred, thred->id));
/*
@@ -1296,13 +1295,13 @@ static void PR_SuspendTest(PRThread *thred)
#endif
PR_LOG(_pr_gc_lm, PR_LOG_ALWAYS,
- ("End PR_SuspendTest thred %X tid %X\n", thred, thred->id));
-} /* PR_SuspendTest */
+ ("End pt_SuspendTest thred %X tid %X\n", thred, thred->id));
+} /* pt_SuspendTest */
-PR_IMPLEMENT(void) PR_ResumeSet(PRThread *thred)
+static void pt_ResumeSet(PRThread *thred)
{
PR_LOG(_pr_gc_lm, PR_LOG_ALWAYS,
- ("PR_ResumeSet thred %X thread id = %X\n", thred, thred->id));
+ ("pt_ResumeSet thred %X thread id = %X\n", thred, thred->id));
/*
* Clear the global state and set the thread state so that it will
@@ -1322,12 +1321,12 @@ PR_IMPLEMENT(void) PR_ResumeSet(PRThread *thred)
#endif
#endif
-} /* PR_ResumeSet */
+} /* pt_ResumeSet */
-PR_IMPLEMENT(void) PR_ResumeTest(PRThread *thred)
+static void pt_ResumeTest(PRThread *thred)
{
PR_LOG(_pr_gc_lm, PR_LOG_ALWAYS,
- ("Begin PR_ResumeTest thred %X thread id = %X\n", thred, thred->id));
+ ("Begin pt_ResumeTest thred %X thread id = %X\n", thred, thred->id));
/*
* Wait for the threads resume state to change
@@ -1351,12 +1350,12 @@ PR_IMPLEMENT(void) PR_ResumeTest(PRThread *thred)
thred->suspend &= ~PT_THREAD_RESUMED;
PR_LOG(_pr_gc_lm, PR_LOG_ALWAYS, (
- "End PR_ResumeTest thred %X tid %X\n", thred, thred->id));
-} /* PR_ResumeTest */
+ "End pt_ResumeTest thred %X tid %X\n", thred, thred->id));
+} /* pt_ResumeTest */
static pthread_once_t pt_gc_support_control = PTHREAD_ONCE_INIT;
-PR_IMPLEMENT(void) PR_SuspendAll()
+PR_IMPLEMENT(void) PR_SuspendAll(void)
{
#ifdef DEBUG
PRIntervalTime stime, etime;
@@ -1379,7 +1378,7 @@ PR_IMPLEMENT(void) PR_SuspendAll()
while (thred != NULL)
{
if ((thred != me) && _PT_IS_GCABLE_THREAD(thred))
- PR_SuspendSet(thred);
+ pt_SuspendSet(thred);
thred = thred->next;
}
@@ -1388,7 +1387,7 @@ PR_IMPLEMENT(void) PR_SuspendAll()
while (thred != NULL)
{
if ((thred != me) && _PT_IS_GCABLE_THREAD(thred))
- PR_SuspendTest(thred);
+ pt_SuspendTest(thred);
thred = thred->next;
}
@@ -1402,7 +1401,7 @@ PR_IMPLEMENT(void) PR_SuspendAll()
#endif
} /* PR_SuspendAll */
-PR_IMPLEMENT(void) PR_ResumeAll()
+PR_IMPLEMENT(void) PR_ResumeAll(void)
{
#ifdef DEBUG
PRIntervalTime stime, etime;
@@ -1421,7 +1420,7 @@ PR_IMPLEMENT(void) PR_ResumeAll()
while (thred != NULL)
{
if ((thred != me) && _PT_IS_GCABLE_THREAD(thred))
- PR_ResumeSet(thred);
+ pt_ResumeSet(thred);
thred = thred->next;
}
@@ -1429,7 +1428,7 @@ PR_IMPLEMENT(void) PR_ResumeAll()
while (thred != NULL)
{
if ((thred != me) && _PT_IS_GCABLE_THREAD(thred))
- PR_ResumeTest(thred);
+ pt_ResumeTest(thred);
thred = thred->next;
}
diff --git a/pr/src/threads/combined/prucpu.c b/pr/src/threads/combined/prucpu.c
index d9159b52..3d575d6c 100644
--- a/pr/src/threads/combined/prucpu.c
+++ b/pr/src/threads/combined/prucpu.c
@@ -59,7 +59,8 @@ static PRUintn _pr_cpuID;
static void PR_CALLBACK _PR_CPU_Idle(void *);
-static _PRCPU *_PR_CreateCPU(PRThread *thread, PRBool needQueue);
+static _PRCPU *_PR_CreateCPU(void);
+static PRStatus _PR_StartCPU(_PRCPU *cpu, PRThread *thread);
#if !defined(_PR_LOCAL_THREADS_ONLY)
static void _PR_RunCPU(void *arg);
@@ -69,6 +70,9 @@ void _PR_InitCPUs()
{
PRThread *me = _PR_MD_CURRENT_THREAD();
+ if (_native_threads_only)
+ return;
+
_pr_cpuID = 0;
_MD_NEW_LOCK( &_pr_cpuLock);
#if !defined(_PR_LOCAL_THREADS_ONLY) && !defined(_PR_GLOBAL_THREADS_ONLY)
@@ -80,13 +84,13 @@ void _PR_InitCPUs()
#ifdef _PR_LOCAL_THREADS_ONLY
#ifdef HAVE_CUSTOM_USER_THREADS
- if (!_native_threads_only)
- _PR_MD_CREATE_PRIMORDIAL_USER_THREAD(me);
+ _PR_MD_CREATE_PRIMORDIAL_USER_THREAD(me);
#endif
/* Now start the first CPU. */
- _pr_primordialCPU = _PR_CreateCPU(me, PR_TRUE);
+ _pr_primordialCPU = _PR_CreateCPU();
_pr_numCPU = 1;
+ _PR_StartCPU(_pr_primordialCPU, me);
_PR_MD_SET_CURRENT_CPU(_pr_primordialCPU);
@@ -97,21 +101,47 @@ void _PR_InitCPUs()
#else /* Combined MxN model */
+ _pr_primordialCPU = _PR_CreateCPU();
+ _pr_numCPU = 1;
_PR_CreateThread(PR_SYSTEM_THREAD,
_PR_RunCPU,
- me,
+ _pr_primordialCPU,
PR_PRIORITY_NORMAL,
PR_GLOBAL_THREAD,
PR_UNJOINABLE_THREAD,
0,
_PR_IDLE_THREAD);
- _PR_MD_WAIT(me, PR_INTERVAL_NO_TIMEOUT);
#endif /* _PR_LOCAL_THREADS_ONLY */
_PR_MD_INIT_CPUS();
}
+#ifdef WINNT
+/*
+ * Right now this function merely stops the CPUs and does
+ * not do any other cleanup.
+ *
+ * It is only implemented for WINNT because bug 161998 only
+ * affects the WINNT version of NSPR, but it would be nice
+ * to implement this function for other platforms too.
+ */
+void _PR_CleanupCPUs(void)
+{
+ PRUintn i;
+ PRCList *qp;
+ _PRCPU *cpu;
+
+ _pr_cpus_exit = 1;
+ for (i = 0; i < _pr_numCPU; i++) {
+ _PR_MD_WAKEUP_WAITER(NULL);
+ }
+ for (qp = _PR_CPUQ().next; qp != &_PR_CPUQ(); qp = qp->next) {
+ cpu = _PR_CPU_PTR(qp);
+ _PR_MD_JOIN_THREAD(&cpu->thread->md);
+ }
+}
+#endif
static _PRCPUQueue *_PR_CreateCPUQueue(void)
{
@@ -137,89 +167,113 @@ static _PRCPUQueue *_PR_CreateCPUQueue(void)
/*
* Create a new CPU.
+ *
+ * This function initializes enough of the _PRCPU structure so
+ * that it can be accessed safely by a global thread or another
+ * CPU. This function does not create the native thread that
+ * will run the CPU nor does it initialize the parts of _PRCPU
+ * that must be initialized by that native thread.
+ *
+ * The reason we cannot simply have the native thread create
+ * and fully initialize a new CPU is that we need to be able to
+ * create a usable _pr_primordialCPU in _PR_InitCPUs without
+ * assuming that the primordial CPU thread we created can run
+ * during NSPR initialization. For example, on Windows while
+ * new threads can be created by DllMain, they won't be able
+ * to run during DLL initialization. If NSPR is initialized
+ * by DllMain, the primordial CPU thread won't run until DLL
+ * initialization is finished.
*/
-static _PRCPU *_PR_CreateCPU(PRThread *thread, PRBool needQueue)
+static _PRCPU *_PR_CreateCPU(void)
{
_PRCPU *cpu;
- /*
- ** Create a new cpu. The assumption this code makes is that the
- ** underlying operating system creates a stack to go with the new
- ** native thread. That stack will be used by the cpu when pausing.
- */
cpu = PR_NEWZAP(_PRCPU);
if (cpu) {
- cpu->last_clock = PR_IntervalNow();
-
- if (needQueue == PR_TRUE)
- cpu->queue = _PR_CreateCPUQueue();
- else
- cpu->queue = _PR_MD_CURRENT_CPU()->queue;
-
+ cpu->queue = _PR_CreateCPUQueue();
if (!cpu->queue) {
PR_DELETE(cpu);
return NULL;
}
-
- /* Before we create any threads on this CPU we have to
- * set the current CPU
- */
- _PR_MD_SET_CURRENT_CPU(cpu);
- _PR_MD_INIT_RUNNING_CPU(cpu);
- thread->cpu = cpu;
-
- if (!_native_threads_only) {
-
- cpu->idle_thread = _PR_CreateThread(PR_SYSTEM_THREAD,
- _PR_CPU_Idle,
- (void *)cpu,
- PR_PRIORITY_NORMAL,
- PR_LOCAL_THREAD,
- PR_UNJOINABLE_THREAD,
- 0,
- _PR_IDLE_THREAD);
-
- if (!cpu->idle_thread) {
- /* didn't clean up CPU queue XXXMB */
- PR_DELETE(cpu);
- return NULL;
- }
- cpu->idle_thread->cpu = cpu;
-
- cpu->idle_thread->no_sched = 0;
- }
-
- cpu->thread = thread;
-
- if (_pr_cpu_affinity_mask)
- PR_SetThreadAffinityMask(thread, _pr_cpu_affinity_mask);
-
- /* Created a new CPU */
- _PR_CPU_LIST_LOCK();
- cpu->id = _pr_cpuID++;
- PR_APPEND_LINK(&cpu->links, &_PR_CPUQ());
- _PR_CPU_LIST_UNLOCK();
- }
+ }
return cpu;
}
+/*
+ * Start a new CPU.
+ *
+ * 'cpu' is a _PRCPU structure created by _PR_CreateCPU().
+ * 'thread' is the native thread that will run the CPU.
+ *
+ * If this function fails, 'cpu' is destroyed.
+ */
+static PRStatus _PR_StartCPU(_PRCPU *cpu, PRThread *thread)
+{
+ /*
+ ** Start a new cpu. The assumption this code makes is that the
+ ** underlying operating system creates a stack to go with the new
+ ** native thread. That stack will be used by the cpu when pausing.
+ */
+
+ PR_ASSERT(!_native_threads_only);
+
+ cpu->last_clock = PR_IntervalNow();
+
+ /* Before we create any threads on this CPU we have to
+ * set the current CPU
+ */
+ _PR_MD_SET_CURRENT_CPU(cpu);
+ _PR_MD_INIT_RUNNING_CPU(cpu);
+ thread->cpu = cpu;
+
+ cpu->idle_thread = _PR_CreateThread(PR_SYSTEM_THREAD,
+ _PR_CPU_Idle,
+ (void *)cpu,
+ PR_PRIORITY_NORMAL,
+ PR_LOCAL_THREAD,
+ PR_UNJOINABLE_THREAD,
+ 0,
+ _PR_IDLE_THREAD);
+
+ if (!cpu->idle_thread) {
+ /* didn't clean up CPU queue XXXMB */
+ PR_DELETE(cpu);
+ return PR_FAILURE;
+ }
+ PR_ASSERT(cpu->idle_thread->cpu == cpu);
+
+ cpu->idle_thread->no_sched = 0;
+
+ cpu->thread = thread;
+
+ if (_pr_cpu_affinity_mask)
+ PR_SetThreadAffinityMask(thread, _pr_cpu_affinity_mask);
+
+ /* Created and started a new CPU */
+ _PR_CPU_LIST_LOCK();
+ cpu->id = _pr_cpuID++;
+ PR_APPEND_LINK(&cpu->links, &_PR_CPUQ());
+ _PR_CPU_LIST_UNLOCK();
+
+ return PR_SUCCESS;
+}
+
#if !defined(_PR_GLOBAL_THREADS_ONLY) && !defined(_PR_LOCAL_THREADS_ONLY)
/*
** This code is used during a cpu's initial creation.
*/
static void _PR_RunCPU(void *arg)
{
- _PRCPU *cpu;
+ _PRCPU *cpu = (_PRCPU *)arg;
PRThread *me = _PR_MD_CURRENT_THREAD();
- PRThread *waiter = (PRThread *) arg;
PR_ASSERT(NULL != me);
/*
- * _PR_CreateCPU calls _PR_CreateThread to create the
+ * _PR_StartCPU calls _PR_CreateThread to create the
* idle thread. Because _PR_CreateThread calls PR_Lock,
* the current thread has to remain a global thread
- * during the _PR_CreateCPU call so that it can wait for
+ * during the _PR_StartCPU call so that it can wait for
* the lock if the lock is held by another thread. If
* we clear the _PR_GLOBAL_SCOPE flag in
* _PR_MD_CREATE_PRIMORDIAL_THREAD, the current thread
@@ -227,7 +281,7 @@ static void _PR_RunCPU(void *arg)
* waiting for the lock because the CPU is not fully
* constructed yet.
*
- * After the CPU is created, it is safe to mark the
+ * After the CPU is started, it is safe to mark the
* current thread as a local thread.
*/
@@ -236,7 +290,7 @@ static void _PR_RunCPU(void *arg)
#endif
me->no_sched = 1;
- cpu = _PR_CreateCPU(me, PR_TRUE);
+ _PR_StartCPU(cpu, me);
#ifdef HAVE_CUSTOM_USER_THREADS
me->flags &= (~_PR_GLOBAL_SCOPE);
@@ -246,12 +300,6 @@ static void _PR_RunCPU(void *arg)
_PR_MD_SET_CURRENT_THREAD(cpu->thread);
me->cpu = cpu;
- if (waiter) {
- _pr_primordialCPU = cpu;
- _pr_numCPU = 1;
- _PR_MD_WAKEUP_WAITER(waiter);
- }
-
while(1) {
PRInt32 is;
if (!_PR_IS_NATIVE_THREAD(me)) _PR_INTSOFF(is);
@@ -309,6 +357,12 @@ static void PR_CALLBACK _PR_CPU_Idle(void *_cpu)
/* Wait for an IO to complete */
(void)_PR_MD_PAUSE_CPU(timeout);
+#ifdef WINNT
+ if (_pr_cpus_exit) {
+ /* _PR_CleanupCPUs tells us to exit */
+ _PR_MD_END_THREAD();
+ }
+#endif
#if !defined(_PR_LOCAL_THREADS_ONLY) && !defined(_PR_GLOBAL_THREADS_ONLY)
#ifdef _PR_HAVE_ATOMIC_OPS
@@ -344,7 +398,8 @@ PR_IMPLEMENT(void) PR_SetConcurrency(PRUintn numCPUs)
#else /* combined, MxN thread model */
PRUintn newCPU;
- PRThread *cpu;
+ _PRCPU *cpu;
+ PRThread *thr;
if (!_pr_initialized) _PR_ImplicitInitialization();
@@ -360,9 +415,10 @@ PR_IMPLEMENT(void) PR_SetConcurrency(PRUintn numCPUs)
_PR_CPU_LIST_UNLOCK();
for (; newCPU; newCPU--) {
- cpu = _PR_CreateThread(PR_SYSTEM_THREAD,
+ cpu = _PR_CreateCPU();
+ thr = _PR_CreateThread(PR_SYSTEM_THREAD,
_PR_RunCPU,
- NULL,
+ cpu,
PR_PRIORITY_NORMAL,
PR_GLOBAL_THREAD,
PR_UNJOINABLE_THREAD,
diff --git a/pr/src/threads/combined/pruthr.c b/pr/src/threads/combined/pruthr.c
index 77236df1..1329bb66 100644
--- a/pr/src/threads/combined/pruthr.c
+++ b/pr/src/threads/combined/pruthr.c
@@ -85,7 +85,6 @@ PRThread *suspendAllThread = NULL;
extern PRCList _pr_active_global_threadQ;
extern PRCList _pr_active_local_threadQ;
-extern _PRCPU *_pr_primordialCPU;
static void _PR_DecrActiveThreadCount(PRThread *thread);
static PRThread *_PR_AttachThread(PRThreadType, PRThreadPriority, PRThreadStack *);
diff --git a/pr/src/threads/prcthr.c b/pr/src/threads/prcthr.c
index 71dafca4..ff4c2364 100644
--- a/pr/src/threads/prcthr.c
+++ b/pr/src/threads/prcthr.c
@@ -55,8 +55,6 @@ extern PRLock *_pr_sleeplock; /* allocated and initialized in prinit */
*/
void _PR_CleanupThread(PRThread *thread)
{
- PRUintn i;
-
/* Free up per-thread-data */
_PR_DestroyThreadPrivate(thread);
diff --git a/pr/src/threads/prtpd.c b/pr/src/threads/prtpd.c
index 42139329..6d8fd416 100644
--- a/pr/src/threads/prtpd.c
+++ b/pr/src/threads/prtpd.c
@@ -88,7 +88,7 @@ static PRThreadPrivateDTOR *_pr_tpd_destructors = NULL;
/*
** Initialize the thread private data manipulation
*/
-void _PR_InitTPD()
+void _PR_InitTPD(void)
{
_pr_tpd_destructors = (PRThreadPrivateDTOR*)
PR_CALLOC(_PR_TPD_LIMIT * sizeof(PRThreadPrivateDTOR*));
diff --git a/pr/tests/Makefile.in b/pr/tests/Makefile.in
index 7e8dbaf7..a1b7c686 100644
--- a/pr/tests/Makefile.in
+++ b/pr/tests/Makefile.in
@@ -45,10 +45,6 @@ include $(topsrcdir)/config/config.mk
DIRS = dll
-ifeq ($(OS_TARGET),OS2)
-OS_CFLAGS = $(OS_EXE_CFLAGS)
-endif
-
CSRCS = \
accept.c \
acceptread.c \
@@ -98,6 +94,7 @@ CSRCS = \
joinuu.c \
layer.c \
lazyinit.c \
+ libfilename.c \
lltest.c \
lock.c \
lockfile.c \
@@ -221,10 +218,15 @@ 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 += -lws2_32
+else
+ EXTRA_LIBS += wsock32.lib
LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO
ifdef PROFILE
LDOPTS += -PROFILE -MAP
endif # profile
+endif # NS_USE_GCC
endif
ifeq ($(OS_ARCH),OS2)
@@ -296,8 +298,10 @@ endif
ifeq ($(OS_ARCH), HP-UX)
LDOPTS += -z -Wl,+s,+b,$(ABSOLUTE_LIB_DIR)
ifeq ($(USE_64),1)
- LDOPTS += +DA2.0W
- EXTRA_LIBS = -lpthread
+ LDOPTS += +DD64
+ endif
+ ifeq ($(USE_PTHREADS),1)
+ EXTRA_LIBS = $(LIBPTHREAD)
endif
endif
@@ -480,11 +484,11 @@ else
$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
@$(MAKE_OBJDIR)
-ifeq ($(OS_ARCH), WINNT)
- link $(LDOPTS) $(EXTRA_LDOPTS) $< $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) wsock32.lib -out:$@
+ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
+ link $(LDOPTS) $(EXTRA_LDOPTS) $< $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -out:$@
else
ifeq ($(OS_ARCH),OS2)
- $(LINK) $(EXEFLAGS) $(LDOPTS) $< $(LIBPLC) $(LIBNSPR) $(OS_LIBS) $(EXTRA_LIBS)
+ $(LD) $(EXEFLAGS) $(LDOPTS) $< $(LIBPLC) $(LIBNSPR) $(OS_LIBS) $(EXTRA_LIBS)
else
$(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -o $@
endif # OS/2
diff --git a/pr/tests/affinity.c b/pr/tests/affinity.c
index 513775f7..ee78434a 100644
--- a/pr/tests/affinity.c
+++ b/pr/tests/affinity.c
@@ -40,6 +40,7 @@
#include <stdlib.h>
#include <string.h>
+#ifndef XP_BEOS
/*
* Test PR_GetThreadAffinityMask
@@ -109,3 +110,12 @@ int main(int argc, char **argv)
return 0;
}
+
+#else /* !XP_BEOS */
+
+int main()
+{
+ printf( "This test is not supported on the BeOS\n" );
+ return 0;
+}
+#endif /* !XP_BEOS */
diff --git a/pr/tests/dll/Makefile.in b/pr/tests/dll/Makefile.in
index cd0cca6e..38ad5b8e 100644
--- a/pr/tests/dll/Makefile.in
+++ b/pr/tests/dll/Makefile.in
@@ -64,7 +64,11 @@ ifeq ($(OS_ARCH), WINNT)
ifeq ($(OS_TARGET), WIN16)
# do nothing
else
+ifdef NS_USE_GCC
+DLLBASE=-Wl,--image-base -Wl,0x30000000
+else
DLLBASE=/BASE:0x30000000
+endif
RES=$(OBJDIR)/my.res
RESNAME=../../../pr/src/nspr.rc
endif
diff --git a/pr/tests/libfilename.c b/pr/tests/libfilename.c
new file mode 100644
index 00000000..4be50b09
--- /dev/null
+++ b/pr/tests/libfilename.c
@@ -0,0 +1,126 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * The contents of this file are subject to the Mozilla Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is the Netscape Portable Runtime (NSPR).
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation. Portions created by Netscape are
+ * Copyright (C) 2003 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the
+ * terms of the GNU General Public License Version 2 or later (the
+ * "GPL"), in which case the provisions of the GPL are applicable
+ * instead of those above. If you wish to allow use of your
+ * version of this file only under the terms of the GPL and not to
+ * allow others to use your version of this file under the MPL,
+ * indicate your decision by deleting the provisions above and
+ * replace them with the notice and other provisions required by
+ * the GPL. If you do not delete the provisions above, a recipient
+ * may use your version of this file under either the MPL or the
+ * GPL.
+ */
+
+/***********************************************************************
+**
+** Name: libfilename.c
+**
+** Description: test PR_GetLibraryFilePathname.
+**
+***********************************************************************/
+
+#include "nspr.h"
+#include "pprio.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+PRBool debug_mode = PR_FALSE;
+
+static PRStatus RunTest(const char *name, PRFuncPtr addr)
+{
+ char *pathname;
+ PRFileDesc *fd;
+
+ pathname = PR_GetLibraryFilePathname(name, addr);
+ if (pathname == NULL) {
+ fprintf(stderr, "PR_GetLibraryFilePathname failed\n");
+ /* we let this test pass if this function is not implemented */
+ if (PR_GetError() == PR_NOT_IMPLEMENTED_ERROR) {
+ return PR_SUCCESS;
+ }
+ return PR_FAILURE;
+ }
+
+ if (debug_mode) printf("Pathname is %s\n", pathname);
+ fd = PR_OpenFile(pathname, PR_RDONLY, 0);
+ if (fd == NULL) {
+ fprintf(stderr, "PR_Open failed: %d\n", (int)PR_GetError());
+ return PR_FAILURE;
+ }
+ if (PR_Close(fd) == PR_FAILURE) {
+ fprintf(stderr, "PR_Close failed: %d\n", (int)PR_GetError());
+ return PR_FAILURE;
+ }
+ PR_Free(pathname);
+ return PR_SUCCESS;
+}
+
+int main(int argc, char *argv[])
+{
+ char *name;
+ PRFuncPtr addr;
+ PRLibrary *lib;
+ PRBool failed = PR_FALSE;
+
+ if (argc >= 2 && strcmp(argv[1], "-d") == 0) {
+ debug_mode = PR_TRUE;
+ }
+
+ /* First test a library that is implicitly linked. */
+#ifdef WINNT
+ name = PR_Malloc(strlen("libnspr4.dll")+1);
+ strcpy(name, "libnspr4.dll");
+#else
+ name = PR_GetLibraryName(NULL, "nspr4");
+#endif
+ addr = (PRFuncPtr)PR_GetTCPMethods()->close;
+ if (RunTest(name, addr) == PR_FAILURE) {
+ failed = PR_TRUE;
+ }
+ PR_FreeLibraryName(name);
+
+ /* Next test a library that is dynamically loaded. */
+ name = PR_GetLibraryName("dll", "my");
+ if (debug_mode) printf("Loading library %s\n", name);
+ lib = PR_LoadLibrary(name);
+ if (!lib) {
+ fprintf(stderr, "PR_LoadLibrary failed\n");
+ exit(1);
+ }
+ PR_FreeLibraryName(name);
+ name = PR_GetLibraryName(NULL, "my");
+ addr = PR_FindFunctionSymbol(lib, "My_GetValue");
+ if (RunTest(name, addr) == PR_FAILURE) {
+ failed = PR_TRUE;
+ }
+ PR_FreeLibraryName(name);
+ PR_UnloadLibrary(lib);
+ if (failed) {
+ printf("FAIL\n");
+ return 1;
+ }
+ printf("PASS\n");
+ return 0;
+}
diff --git a/pr/tests/runtests.ksh b/pr/tests/runtests.ksh
index c4d027ad..52b1186a 100755
--- a/pr/tests/runtests.ksh
+++ b/pr/tests/runtests.ksh
@@ -132,6 +132,7 @@ joinuk
joinuu
layer
lazyinit
+libfilename
lltest
lock
lockfile
@@ -254,7 +255,7 @@ else
fi
wait $test_pid
test_rval=$?
- [ sleep_pid -eq 0 ] || kill $sleep_pid >/dev/null 2>&1
+ [ $sleep_pid -eq 0 ] || kill $sleep_pid >/dev/null 2>&1
if [ 0 = $test_rval ] ; then
echo "\t\t\tPassed";
else
diff --git a/pr/tests/runtests.sh b/pr/tests/runtests.sh
new file mode 100755
index 00000000..4024e9cb
--- /dev/null
+++ b/pr/tests/runtests.sh
@@ -0,0 +1,287 @@
+#!/bin/sh
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Netscape Portable Runtime (NSPR).
+#
+# The Initial Developer of the Original Code is Netscape
+# Communications Corporation. Portions created by Netscape are
+# Copyright (C) 1998-2000 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the
+# terms of the GNU General Public License Version 2 or later (the
+# "GPL"), in which case the provisions of the GPL are applicable
+# instead of those above. If you wish to allow use of your
+# version of this file only under the terms of the GPL and not to
+# allow others to use your version of this file under the MPL,
+# indicate your decision by deleting the provisions above and
+# replace them with the notice and other provisions required by
+# the GPL. If you do not delete the provisions above, a recipient
+# may use your version of this file under either the MPL or the
+# GPL.
+#
+
+#
+# tests.ksh
+# korn shell script for nspr tests
+#
+
+SYSTEM_INFO=`uname -a`
+OS_ARCH=`uname -s`
+if [ $OS_ARCH = "Windows_NT" ]
+then
+ NULL_DEVICE=nul
+else
+ NULL_DEVICE=/dev/null
+fi
+
+#
+# Irrevelant tests
+#
+#bug1test - used to demonstrate a bug on NT
+#bigfile2 - requires 4Gig file creation. See BugZilla #5451
+#bigfile3 - requires 4Gig file creation. See BugZilla #5451
+#dbmalloc - obsolete; originally for testing debug version of nspr's malloc
+#dbmalloc1 - obsolete; originally for testing debug version of nspr's malloc
+#depend - obsolete; used to test a initial spec for library dependencies
+#dceemu - used to tests special functions in NSPR for DCE emulation
+#ipv6 - IPV6 not in use by NSPR clients
+#mbcs - tests use of multi-byte charset for filenames. See BugZilla #25140
+#sproc_ch - obsolete; sproc-based tests for Irix
+#sproc_p - obsolete; sproc-based tests for Irix
+#io_timeoutk - obsolete; subsumed in io_timeout
+#io_timeoutu - obsolete; subsumed in io_timeout
+#prftest1 - obsolete; subsumed by prftest
+#prftest2 - obsolete; subsumed by prftest
+#prselect - obsolete; PR_Select is obsolete
+#select2 - obsolete; PR_Select is obsolete
+#sem - obsolete; PRSemaphore is obsolete
+#stat - for OS2?
+#suspend - private interfaces PR_SuspendAll, PR_ResumeAll, etc..
+#thruput - needs to be run manually as client/server
+#time - used to measure time with native calls and nspr calls
+#tmoacc - should be run with tmocon
+#tmocon - should be run with tmoacc
+#op_noacc - limited use
+#yield - limited use for PR_Yield
+
+#
+# Tests not run (but should)
+#
+
+#forktest (failed on IRIX)
+#nbconn - fails on some platforms
+#poll_er - fails on some platforms? limited use?
+#prpoll - the bad-FD test needs to be moved to a different test
+#sleep - specific to OS/2
+
+LOGFILE=${NSPR_TEST_LOGFILE:-$NULL_DEVICE}
+
+#
+# Tests run on all platforms
+#
+
+TESTS="
+accept
+acceptread
+acceptreademu
+affinity
+alarm
+anonfm
+atomic
+attach
+bigfile
+cleanup
+cltsrv
+concur
+cvar
+cvar2
+dlltest
+dtoa
+errcodes
+exit
+fdcach
+fileio
+foreign
+fsync
+gethost
+getproto
+i2l
+initclk
+inrval
+instrumt
+intrio
+intrupt
+io_timeout
+ioconthr
+join
+joinkk
+joinku
+joinuk
+joinuu
+layer
+lazyinit
+libfilename
+lltest
+lock
+lockfile
+logger
+many_cv
+multiwait
+nameshm1
+nblayer
+nonblock
+ntioto
+ntoh
+op_2long
+op_excl
+op_filnf
+op_filok
+op_nofil
+parent
+peek
+perf
+pipeping
+pipeping2
+pipeself
+poll_nm
+poll_to
+pollable
+prftest
+primblok
+provider
+prpollml
+ranfile
+randseed
+rwlocktest
+sel_spd
+selct_er
+selct_nm
+selct_to
+selintr
+sema
+semaerr
+semaping
+sendzlf
+server_test
+servr_kk
+servr_uk
+servr_ku
+servr_uu
+short_thread
+sigpipe
+socket
+sockopt
+sockping
+sprintf
+stack
+stdio
+str2addr
+strod
+switch
+system
+testbit
+testfile
+threads
+timemac
+timetest
+tpd
+udpsrv
+vercheck
+version
+writev
+xnotify
+zerolen"
+
+rval=0
+
+
+#
+# When set, value of the environment variable TEST_TIMEOUT is the maximum
+# time (secs) allowed for a test program beyond which it is terminated.
+# If TEST_TIMEOUT is not set or if it's value is 0, then test programs
+# don't timeout.
+#
+# Running runtests.ksh under MKS toolkit on NT, 95, 98 does not cause
+# timeout detection correctly. For these platforms, do not attempt timeout
+# test. (lth).
+#
+#
+
+OS_PLATFORM=`uname`
+OBJDIR=`basename $PWD`
+printf "\nNSPR Test Results - $OBJDIR\n\n"
+printf "BEGIN\t\t\t`date`\n"
+printf "NSPR_TEST_LOGFILE\t${LOGFILE}\n\n"
+printf "Test\t\t\tResult\n\n"
+if [ $OS_PLATFORM = "Windows_95" ] || [ $OS_PLATFORM = "Windows_98" ] || [ $OS_PLATFORM = "Windows_NT" ] ; then
+ for prog in $TESTS
+ do
+ printf "$prog"
+ printf "\nBEGIN TEST: $prog\n\n" >> ${LOGFILE} 2>&1
+ ./$prog >> ${LOGFILE} 2>&1
+ if [ 0 = $? ] ; then
+ printf "\t\t\tPassed\n";
+ else
+ printf "\t\t\tFAILED\n";
+ rval=1
+ fi;
+ printf "\nEND TEST: $prog\n\n" >> ${LOGFILE} 2>&1
+ done
+else
+ for prog in $TESTS
+ do
+ printf "$prog"
+ printf "\nBEGIN TEST: $prog\n\n" >> ${LOGFILE} 2>&1
+ export test_rval
+ ./$prog >> ${LOGFILE} 2>&1 &
+ test_pid=$!
+ sleep_pid=0
+ if test -n "$TEST_TIMEOUT" && test "$TEST_TIMEOUT" -gt 0
+ then
+ (sleep $TEST_TIMEOUT; kill $test_pid >/dev/null 2>&1 ) &
+ sleep_pid=$!
+ fi
+ wait $test_pid
+ test_rval=$?
+ [ $sleep_pid -eq 0 ] || kill $sleep_pid >/dev/null 2>&1
+ if [ 0 = $test_rval ] ; then
+ printf "\t\t\tPassed\n";
+ else
+ printf "\t\t\tFAILED\n";
+ rval=1
+ fi;
+ printf "\nEND TEST: $prog\n\n" >> ${LOGFILE} 2>&1
+ done
+fi;
+
+printf "END\t\t\t`date`\n"
+exit $rval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pr/tests/sigpipe.c b/pr/tests/sigpipe.c
index 2c708e29..28e7e251 100644
--- a/pr/tests/sigpipe.c
+++ b/pr/tests/sigpipe.c
@@ -69,7 +69,7 @@ int main(void)
#endif
#include <errno.h>
-int main(void)
+static void Test(void *arg)
{
#ifdef XP_OS2
HFILE pipefd[2];
@@ -79,9 +79,6 @@ int main(void)
int rv;
char c = '\0';
- /* This initializes NSPR. */
- PR_SetError(0, 0);
-
#ifdef XP_OS2
if (DosCreatePipe(&pipefd[0], &pipefd[1], 4096) != 0) {
#else
@@ -103,6 +100,27 @@ int main(void)
}
close(pipefd[1]);
printf("write to broken pipe failed with EPIPE, as expected\n");
+}
+
+int main(void)
+{
+ PRThread *thread;
+
+ /* This initializes NSPR. */
+ PR_SetError(0, 0);
+
+ thread = PR_CreateThread(PR_USER_THREAD, Test, NULL, PR_PRIORITY_NORMAL,
+ PR_GLOBAL_THREAD, PR_JOINABLE_THREAD, 0);
+ if (thread == NULL) {
+ fprintf(stderr, "PR_CreateThread failed\n");
+ exit(1);
+ }
+ if (PR_JoinThread(thread) == PR_FAILURE) {
+ fprintf(stderr, "PR_JoinThread failed\n");
+ exit(1);
+ }
+ Test(NULL);
+
printf("PASSED\n");
return 0;
}
diff --git a/pr/tests/vercheck.c b/pr/tests/vercheck.c
index 4235a832..9cec4302 100644
--- a/pr/tests/vercheck.c
+++ b/pr/tests/vercheck.c
@@ -49,12 +49,13 @@
#include <stdlib.h>
/*
- * This release (4.2) is backward compatible with the
- * 4.0.x and 4.1.x releases. It, of course, is compatible
+ * This release (4.3) is backward compatible with the
+ * 4.0.x, 4.1.x, and 4.2.x releases. It, of course, is compatible
* with itself.
*/
static char *compatible_version[] = {
- "4.0", "4.0.1", "4.1", "4.1.1", "4.1.2", "4.1.3", PR_VERSION
+ "4.0", "4.0.1", "4.1", "4.1.1", "4.1.2", "4.1.3",
+ "4.2", "4.2.1", "4.2.2", PR_VERSION
};
/*
@@ -69,8 +70,8 @@ static char *incompatible_version[] = {
"3.0", "3.0.1",
"3.1", "3.1.1", "3.1.2", "3.1.3",
"3.5", "3.5.1",
- "4.2.3",
- "4.3", "4.3.1",
+ "4.3.3",
+ "4.4", "4.4.1",
"10.0", "11.1", "12.14.20"
};