Compare commits
11 Commits
Bugzilla_P
...
RHAPSODY_N
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e69cd99b45 | ||
|
|
b1d544cd8e | ||
|
|
14c0be343d | ||
|
|
62660d5bab | ||
|
|
a5eb8ff006 | ||
|
|
2566e331ff | ||
|
|
0eb4adf962 | ||
|
|
1e6d0edc0a | ||
|
|
327d6871b4 | ||
|
|
f0e366ddda | ||
|
|
56d28c2510 |
105
mozilla/nsprpub/Makefile
Normal file
105
mozilla/nsprpub/Makefile
Normal file
@@ -0,0 +1,105 @@
|
||||
#! gmake
|
||||
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
MOD_DEPTH = .
|
||||
|
||||
DIRS = config pr lib
|
||||
|
||||
ifdef MOZILLA_CLIENT
|
||||
PR_CLIENT_BUILD = 1
|
||||
PR_CLIENT_BUILD_UNIX = 1
|
||||
endif
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
#
|
||||
# The -ll option of zip converts CR LF to LF.
|
||||
#
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
ZIP_ASCII_OPT = -ll
|
||||
endif
|
||||
|
||||
ifdef PR_CLIENT_BUILD
|
||||
export::
|
||||
rm -r -f $(DIST)/../public/nspr
|
||||
ifdef PR_CLIENT_BUILD_UNIX
|
||||
rm -f $(DIST)/lib/libnspr.a
|
||||
rm -f $(DIST)/bin/libnspr.$(DLL_SUFFIX)
|
||||
endif
|
||||
endif
|
||||
|
||||
release::
|
||||
echo $(BUILD_NUMBER) > $(RELEASE_DIR)/$(BUILD_NUMBER)/version.df
|
||||
@if test -f imports.df; then \
|
||||
echo "cp -f imports.df $(RELEASE_DIR)/$(BUILD_NUMBER)/imports.df"; \
|
||||
cp -f imports.df $(RELEASE_DIR)/$(BUILD_NUMBER)/imports.df; \
|
||||
else \
|
||||
echo "echo > $(RELEASE_DIR)/$(BUILD_NUMBER)/imports.df"; \
|
||||
echo > $(RELEASE_DIR)/$(BUILD_NUMBER)/imports.df; \
|
||||
fi
|
||||
cd $(RELEASE_DIR)/$(BUILD_NUMBER)/$(OBJDIR_NAME); \
|
||||
rm -rf META-INF; mkdir META-INF; cd META-INF; \
|
||||
echo "Manifest-Version: 1.0" > MANIFEST.MF; \
|
||||
echo "" >> MANIFEST.MF; \
|
||||
cd ..; rm -f mdbinary.jar; zip -r mdbinary.jar META-INF lib; \
|
||||
rm -rf META-INF; \
|
||||
cd include; \
|
||||
rm -rf META-INF; mkdir META-INF; cd META-INF; \
|
||||
echo "Manifest-Version: 1.0" > MANIFEST.MF; \
|
||||
echo "" >> MANIFEST.MF; \
|
||||
cd ..; rm -f mdheader.jar; zip $(ZIP_ASCII_OPT) -r mdheader.jar *; \
|
||||
rm -rf META-INF
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
@if test ! -d $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); then \
|
||||
rm -rf $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); \
|
||||
echo "making directory /m/dist/$(MOD_NAME)/$(BUILD_NUMBER)"; \
|
||||
config/prmkdir.bat $(MDIST_DOS)\\$(MOD_NAME)\\$(BUILD_NUMBER); \
|
||||
fi
|
||||
@if test ! -d $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME); then \
|
||||
rm -rf $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME); \
|
||||
echo "making directory /m/dist/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME)"; \
|
||||
config/prmkdir.bat $(MDIST_DOS)\\$(MOD_NAME)\\$(BUILD_NUMBER)\\$(OBJDIR_NAME); \
|
||||
fi
|
||||
else
|
||||
@if test ! -d $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); then \
|
||||
rm -rf $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); \
|
||||
echo "making directory /m/dist/$(MOD_NAME)/$(BUILD_NUMBER)"; \
|
||||
$(NSINSTALL) -D $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); \
|
||||
chmod 775 $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); \
|
||||
fi
|
||||
@if test ! -d $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME); then \
|
||||
rm -rf $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME); \
|
||||
echo "making directory /m/dist/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME)"; \
|
||||
$(NSINSTALL) -D $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME); \
|
||||
chmod 775 $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME); \
|
||||
fi
|
||||
endif
|
||||
cd $(RELEASE_DIR)/$(BUILD_NUMBER); \
|
||||
cp -f version.df imports.df $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER); \
|
||||
chmod 664 $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/version.df; \
|
||||
chmod 664 $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/imports.df; \
|
||||
cd $(OBJDIR_NAME); \
|
||||
cp -f mdbinary.jar $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME); \
|
||||
chmod 664 $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME)/mdbinary.jar; \
|
||||
cd include; \
|
||||
cp -f mdheader.jar $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME); \
|
||||
chmod 664 $(MDIST)/$(MOD_NAME)/$(BUILD_NUMBER)/$(OBJDIR_NAME)/mdheader.jar
|
||||
|
||||
depend:
|
||||
@echo "NSPR20 has no dependencies. Skipped."
|
||||
99
mozilla/nsprpub/config/AIX.mk
Normal file
99
mozilla/nsprpub/config/AIX.mk
Normal file
@@ -0,0 +1,99 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for AIX.
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
CLASSIC_NSPR = 1
|
||||
endif
|
||||
|
||||
#
|
||||
# There are three implementation strategies available on AIX:
|
||||
# pthreads, classic, and pthreads-user. The default is pthreads.
|
||||
#
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
PTHREADS_USER =
|
||||
USE_PTHREADS =
|
||||
IMPL_STRATEGY = _CLASSIC
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
else
|
||||
ifeq ($(PTHREADS_USER),1)
|
||||
USE_PTHREADS =
|
||||
IMPL_STRATEGY = _PTH_USER
|
||||
else
|
||||
USE_PTHREADS = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
IMPL_STRATEGY =
|
||||
endif
|
||||
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
CC = xlC
|
||||
CCC = xlC
|
||||
else
|
||||
CC = xlC_r
|
||||
CCC = xlC_r
|
||||
endif
|
||||
|
||||
CPU_ARCH = rs6000
|
||||
|
||||
RANLIB = ranlib
|
||||
|
||||
OS_CFLAGS = -qro -qroconst -DAIX -DSYSV
|
||||
ifeq ($(CC),xlC_r)
|
||||
OS_CFLAGS += -qarch=com
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE),4.1)
|
||||
OS_CFLAGS += -DAIX4_1
|
||||
else
|
||||
DSO_LDOPTS = -brtl -bM:SRE -bnoentry -bexpall
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
ifeq ($(OS_RELEASE),4.3)
|
||||
OS_CFLAGS += -DAIX4_3
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Special link info for constructing AIX programs. On AIX we have to
|
||||
# statically link programs that use NSPR into a single .o, rewriting the
|
||||
# calls to select to call "aix". Once that is done we then can
|
||||
# link that .o with a .o built in nspr which implements the system call.
|
||||
#
|
||||
ifneq ($(OS_RELEASE),4.1)
|
||||
AIX_LINK_OPTS = -brtl -bnso -berok
|
||||
else
|
||||
AIX_LINK_OPTS = -bnso -berok
|
||||
#AIX_LINK_OPTS = -bnso -berok -brename:.select,.wrap_select -brename:.poll,.wrap_poll -bI:/usr/lib/syscalls.exp
|
||||
endif
|
||||
|
||||
AIX_WRAP = $(DIST)/lib/aixwrap.o
|
||||
AIX_TMP = $(OBJDIR)/_aix_tmp.o
|
||||
45
mozilla/nsprpub/config/BSD_OS.mk
Normal file
45
mozilla/nsprpub/config/BSD_OS.mk
Normal file
@@ -0,0 +1,45 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for BSDI Unix for x86.
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
#CC = gcc -Wall -Wno-format
|
||||
#CCC = g++
|
||||
CC = shlicc2
|
||||
CCC = shlicc2
|
||||
RANLIB = ranlib
|
||||
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
OS_CFLAGS = -DBSDI -DHAVE_STRERROR -D__386BSD__ -DNEED_BSDREGEX -Di386
|
||||
OS_LIBS = -lcompat -ldl
|
||||
|
||||
ifeq ($(OS_RELEASE),2.1)
|
||||
OS_CFLAGS += -DBSDI_2
|
||||
endif
|
||||
|
||||
G++INCLUDES = -I/usr/include/g++
|
||||
|
||||
CPU_ARCH = x86
|
||||
|
||||
NOSUCHFILE = /no-such-file
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
DSO_LDOPTS = -r
|
||||
50
mozilla/nsprpub/config/FreeBSD.mk
Normal file
50
mozilla/nsprpub/config/FreeBSD.mk
Normal file
@@ -0,0 +1,50 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for FreeBSD
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
CC = gcc
|
||||
CCC = g++
|
||||
RANLIB = ranlib
|
||||
|
||||
OS_REL_CFLAGS = -mno-486 -Di386
|
||||
CPU_ARCH = x86
|
||||
|
||||
OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) -ansi -Wall -pipe -DFREEBSD -DHAVE_STRERROR -DHAVE_BSD_FLOCK -D_PR_NEED_POLL
|
||||
|
||||
ifeq ($(USE_PTHREADS),1)
|
||||
OS_LIBS = -lc_r
|
||||
# XXX probably should define _THREAD_SAFE too.
|
||||
DEFINES += -D_PR_NEED_FAKE_POLL
|
||||
else
|
||||
OS_LIBS = -lc
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
endif
|
||||
|
||||
ARCH = freebsd
|
||||
|
||||
DSO_CFLAGS = -fPIC
|
||||
DSO_LDOPTS = -Bshareable
|
||||
DSO_LDFLAGS =
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
|
||||
G++INCLUDES = -I/usr/include/g++
|
||||
155
mozilla/nsprpub/config/HP-UX.mk
Normal file
155
mozilla/nsprpub/config/HP-UX.mk
Normal file
@@ -0,0 +1,155 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for HP-UX
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
DLL_SUFFIX = sl
|
||||
|
||||
CC = cc -Ae
|
||||
CCC = CC
|
||||
RANLIB = echo
|
||||
|
||||
CPU_ARCH = hppa
|
||||
|
||||
OS_CFLAGS = +ESlit $(DSO_CFLAGS) -DHPUX -D$(CPU_ARCH) -D_HPUX_SOURCE
|
||||
|
||||
#
|
||||
# The header netdb.h on HP-UX 9 does not declare h_errno.
|
||||
# On 10.10 and 10.20, netdb.h declares h_errno only if
|
||||
# _XOPEN_SOURCE_EXTENDED is defined. So we need to declare
|
||||
# h_errno ourselves.
|
||||
#
|
||||
ifeq ($(basename $(OS_RELEASE)),A.09)
|
||||
OS_CFLAGS += -D_PR_NEED_H_ERRNO
|
||||
endif
|
||||
ifeq (,$(filter-out B.10.10 B.10.20,$(OS_RELEASE)))
|
||||
OS_CFLAGS += -D_PR_NEED_H_ERRNO
|
||||
endif
|
||||
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
CLASSIC_NSPR = 1
|
||||
endif
|
||||
|
||||
#
|
||||
# On HP-UX 9, the default (and only) implementation strategy is
|
||||
# classic nspr.
|
||||
#
|
||||
# On HP-UX 10.10 and 10.20, the default implementation strategy is
|
||||
# pthreads (actually DCE threads). Classic nspr is also available.
|
||||
#
|
||||
# On HP-UX 10.30 and 11.00, the default implementation strategy is
|
||||
# pthreads. Classic nspr and pthreads-user are also available.
|
||||
#
|
||||
ifeq ($(basename $(OS_RELEASE)),A.09)
|
||||
OS_CFLAGS += -DHPUX9
|
||||
DEFAULT_IMPL_STRATEGY = _CLASSIC
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE),B.10.01)
|
||||
OS_CFLAGS += -DHPUX10
|
||||
DEFAULT_IMPL_STRATEGY = _CLASSIC
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE),B.10.10)
|
||||
OS_CFLAGS += -DHPUX10 -DHPUX10_10
|
||||
DEFAULT_IMPL_STRATEGY = _PTH
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE),B.10.20)
|
||||
OS_CFLAGS += -DHPUX10 -DHPUX10_20
|
||||
DEFAULT_IMPL_STRATEGY = _PTH
|
||||
endif
|
||||
|
||||
#
|
||||
# On 10.30 and 11.00, we use the new ANSI C++ compiler aCC.
|
||||
#
|
||||
|
||||
ifeq ($(OS_RELEASE),B.10.30)
|
||||
CCC = /opt/aCC/bin/aCC
|
||||
OS_CFLAGS += +DAportable +DS1.1 -DHPUX10 -DHPUX10_30
|
||||
DEFAULT_IMPL_STRATEGY = _PTH
|
||||
endif
|
||||
|
||||
# 11.00 is similar to 10.30.
|
||||
ifeq ($(OS_RELEASE),B.11.00)
|
||||
CCC = /opt/aCC/bin/aCC
|
||||
OS_CFLAGS += +DAportable +DS1.1 -DHPUX10 -DHPUX11
|
||||
DEFAULT_IMPL_STRATEGY = _PTH
|
||||
endif
|
||||
|
||||
ifeq ($(DEFAULT_IMPL_STRATEGY),_CLASSIC)
|
||||
CLASSIC_NSPR = 1
|
||||
endif
|
||||
|
||||
ifeq ($(DEFAULT_IMPL_STRATEGY),_PTH)
|
||||
USE_PTHREADS = 1
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
USE_PTHREADS =
|
||||
IMPL_STRATEGY = _CLASSIC
|
||||
endif
|
||||
ifeq ($(PTHREADS_USER),1)
|
||||
USE_PTHREADS =
|
||||
IMPL_STRATEGY = _PTH_USER
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
IMPL_STRATEGY =
|
||||
endif
|
||||
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
endif
|
||||
|
||||
#
|
||||
# To use the true pthread (kernel thread) library on 10.30 and
|
||||
# 11.00, we should define _POSIX_C_SOURCE to be 199506L.
|
||||
# The _REENTRANT macro is deprecated.
|
||||
#
|
||||
|
||||
ifdef USE_PTHREADS
|
||||
ifeq (,$(filter-out B.10.10 B.10.20,$(OS_RELEASE)))
|
||||
OS_CFLAGS += -D_REENTRANT -D_PR_DCETHREADS
|
||||
else
|
||||
OS_CFLAGS += -D_POSIX_C_SOURCE=199506L
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef PTHREADS_USER
|
||||
OS_CFLAGS += -D_POSIX_C_SOURCE=199506L
|
||||
endif
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
|
||||
DSO_LDOPTS = -b
|
||||
DSO_LDFLAGS =
|
||||
# +Z generates position independent code for use in shared libraries.
|
||||
DSO_CFLAGS = +Z
|
||||
|
||||
HAVE_PURIFY = 1
|
||||
114
mozilla/nsprpub/config/IRIX.mk
Normal file
114
mozilla/nsprpub/config/IRIX.mk
Normal file
@@ -0,0 +1,114 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for IRIX
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
#
|
||||
# The default implementation strategy for Irix is classic nspr.
|
||||
#
|
||||
ifeq ($(USE_PTHREADS),1)
|
||||
IMPL_STRATEGY = _PTH
|
||||
endif
|
||||
|
||||
ifdef NS_USE_GCC
|
||||
CC = gcc
|
||||
COMPILER_TAG = _gcc
|
||||
AS = $(CC) -x assembler-with-cpp
|
||||
ODD_CFLAGS = -Wall -Wno-format
|
||||
ifdef BUILD_OPT
|
||||
OPTIMIZER = -O6
|
||||
endif
|
||||
else
|
||||
CC = cc
|
||||
CCC = CC
|
||||
ODD_CFLAGS = -fullwarn -xansi
|
||||
ifdef BUILD_OPT
|
||||
|
||||
ifeq ($(USE_N32),1)
|
||||
OPTIMIZER = -O -OPT:Olimit=4000
|
||||
else
|
||||
OPTIMIZER = -O -Olimit 4000
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
# For 6.x machines, include this flag
|
||||
ifeq (6.,$(findstring 6.,$(OS_RELEASE)))
|
||||
ifeq ($(USE_N32),1)
|
||||
ODD_CFLAGS += -n32 -exceptions -woff 1209,1642,3201
|
||||
COMPILER_TAG = _n32
|
||||
else
|
||||
ODD_CFLAGS += -32 -multigot
|
||||
endif
|
||||
else
|
||||
ODD_CFLAGS += -xgot
|
||||
endif
|
||||
endif
|
||||
|
||||
ODD_CFLAGS += -DSVR4 -DIRIX
|
||||
|
||||
|
||||
CPU_ARCH = mips
|
||||
|
||||
RANLIB = /bin/true
|
||||
|
||||
# For purify
|
||||
# XXX: should always define _SGI_MP_SOURCE
|
||||
NOMD_OS_CFLAGS = $(ODD_CFLAGS) -D_SGI_MP_SOURCE
|
||||
|
||||
ifeq ($(OS_RELEASE),5.3)
|
||||
OS_CFLAGS += -DIRIX5_3
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE),6.2)
|
||||
OS_CFLAGS += -DIRIX6_2
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE),6.3)
|
||||
OS_CFLAGS += -DIRIX6_3
|
||||
endif
|
||||
|
||||
ifndef NO_MDUPDATE
|
||||
OS_CFLAGS += $(NOMD_OS_CFLAGS) -MDupdate $(DEPENDENCIES)
|
||||
else
|
||||
OS_CFLAGS += $(NOMD_OS_CFLAGS)
|
||||
endif
|
||||
|
||||
# catch unresolved symbols
|
||||
ifeq ($(basename $(OS_RELEASE)),6)
|
||||
SHLIB_LD_OPTS = -no_unresolved
|
||||
endif
|
||||
|
||||
ifeq ($(USE_N32),1)
|
||||
SHLIB_LD_OPTS += -n32
|
||||
endif
|
||||
|
||||
MKSHLIB = $(LD) $(SHLIB_LD_OPTS) -rdata_shared -shared -soname $(@:$(OBJDIR)/%.so=%.so)
|
||||
|
||||
HAVE_PURIFY = 1
|
||||
|
||||
DSO_LDOPTS = -elf -shared -all
|
||||
|
||||
ifdef DSO_BACKEND
|
||||
DSO_LDOPTS += -soname $(DSO_NAME)
|
||||
|
||||
|
||||
endif
|
||||
112
mozilla/nsprpub/config/Linux.mk
Normal file
112
mozilla/nsprpub/config/Linux.mk
Normal file
@@ -0,0 +1,112 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
######################################################################
|
||||
# Config stuff for Linux (all architectures)
|
||||
######################################################################
|
||||
|
||||
######################################################################
|
||||
# Version-independent
|
||||
######################################################################
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
#
|
||||
# The default implementation strategy for Linux is classic nspr.
|
||||
#
|
||||
ifeq ($(USE_PTHREADS),1)
|
||||
IMPL_STRATEGY = _PTH
|
||||
DEFINES += -D_REENTRANT
|
||||
else
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
endif
|
||||
|
||||
ifeq (86,$(findstring 86,$(OS_TEST)))
|
||||
CPU_ARCH := x86
|
||||
else
|
||||
CPU_ARCH := $(OS_TEST)
|
||||
CPU_ARCH_TAG = _$(CPU_ARCH)
|
||||
endif
|
||||
|
||||
CC = gcc
|
||||
CCC = g++
|
||||
RANLIB = ranlib
|
||||
|
||||
OS_INCLUDES =
|
||||
G++INCLUDES = -I/usr/include/g++
|
||||
|
||||
PLATFORM_FLAGS = -ansi -Wall -pipe -DLINUX -Dlinux
|
||||
PORT_FLAGS = -D_POSIX_SOURCE -D_BSD_SOURCE -DHAVE_STRERROR
|
||||
|
||||
OS_CFLAGS = $(DSO_CFLAGS) $(PLATFORM_FLAGS) $(PORT_FLAGS)
|
||||
|
||||
######################################################################
|
||||
# Version-specific stuff
|
||||
######################################################################
|
||||
|
||||
ifeq ($(CPU_ARCH),alpha)
|
||||
PLATFORM_FLAGS += -DLINUX1_2 -D_ALPHA_ -D__alpha
|
||||
PORT_FLAGS += -D_XOPEN_SOURCE
|
||||
endif
|
||||
ifeq ($(CPU_ARCH),ppc)
|
||||
PLATFORM_FLAGS += -DMKLINUX -DLINUX1_2
|
||||
OS_INCLUDES += -I/usr/local/include
|
||||
endif
|
||||
ifeq ($(CPU_ARCH),sparc)
|
||||
PLATFORM_FLAGS += -DLINUX1_2
|
||||
endif
|
||||
ifeq ($(CPU_ARCH),x86)
|
||||
PLATFORM_FLAGS += -mno-486 -DLINUX1_2 -Di386
|
||||
PORT_FLAGS += -D_XOPEN_SOURCE
|
||||
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 -DLINUX1_2
|
||||
endif
|
||||
|
||||
# These are CPU_ARCH independent
|
||||
ifeq ($(basename $(OS_RELEASE)),2.0)
|
||||
PLATFORM_FLAGS += -DLINUX2_0
|
||||
endif
|
||||
|
||||
#
|
||||
# Linux ppc and 2.0 have shared libraries.
|
||||
#
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS) -soname $(@:$(OBJDIR)/%.so=%.so)
|
||||
ifdef BUILD_OPT
|
||||
OPTIMIZER = -O2
|
||||
endif
|
||||
|
||||
######################################################################
|
||||
# Overrides for defaults in config.mk (or wherever)
|
||||
######################################################################
|
||||
|
||||
######################################################################
|
||||
# Other
|
||||
######################################################################
|
||||
|
||||
DSO_CFLAGS = -fPIC
|
||||
DSO_LDOPTS = -shared
|
||||
DSO_LDFLAGS =
|
||||
40
mozilla/nsprpub/config/Makefile
Normal file
40
mozilla/nsprpub/config/Makefile
Normal file
@@ -0,0 +1,40 @@
|
||||
#! gmake
|
||||
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
MOD_DEPTH = ..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
CSRCS = nsinstall.c pathsub.c
|
||||
|
||||
PLSRCS = nfspwd.pl
|
||||
|
||||
ifneq ($(OS_ARCH),WINNT)
|
||||
PROGRAM = $(OBJDIR)/nsinstall
|
||||
TARGETS = $(PROGRAM) $(PLSRCS:.pl=)
|
||||
endif
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
# Redefine MAKE_OBJDIR for just this directory
|
||||
define MAKE_OBJDIR
|
||||
if test ! -d $(@D); then rm -rf $(@D); mkdir $(@D); fi
|
||||
endef
|
||||
|
||||
export:: $(TARGETS)
|
||||
75
mozilla/nsprpub/config/NCR.mk
Normal file
75
mozilla/nsprpub/config/NCR.mk
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for NCR SVR4 MP-RAS
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
###
|
||||
NS_USE_NATIVE = 1
|
||||
|
||||
# NS_USE_GCC = 1
|
||||
|
||||
export PATH:=$(PATH):/opt/ncc/bin
|
||||
###
|
||||
|
||||
RANLIB = true
|
||||
GCC_FLAGS_EXTRA = -pipe
|
||||
|
||||
DEFINES += -DSVR4 -DSYSV -DHAVE_STRERROR -DNCR -D_PR_LOCAL_THREADS_ONLY
|
||||
|
||||
ifdef NS_USE_NATIVE
|
||||
CC = cc
|
||||
CCC = ncc
|
||||
OS_CFLAGS = -Hnocopyr
|
||||
#OS_LIBS = -L/opt/ncc/lib
|
||||
else
|
||||
#OS_LIBS =
|
||||
endif
|
||||
|
||||
CCC = g++
|
||||
|
||||
#OS_LIBS += -lsocket -lnsl -ldl -lc
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
#DSO_LDOPTS = -G -z defs
|
||||
DSO_LDOPTS = -G
|
||||
|
||||
CPU_ARCH = x86
|
||||
ARCH = ncr
|
||||
|
||||
NOSUCHFILE = /no-such-file
|
||||
|
||||
# now take care of default GCC (rus@5/5/97)
|
||||
|
||||
ifdef NS_USE_GCC
|
||||
# if gcc-settings are redefined already - don't touch it
|
||||
#
|
||||
ifeq (,$(findstring gcc, $(CC)))
|
||||
CC = gcc
|
||||
CCC = g++
|
||||
CXX = g++
|
||||
COMPILER_TAG = _gcc
|
||||
# always use -fPIC - some makefiles are still broken and don't distinguish
|
||||
# situation when they build shared and static libraries
|
||||
CFLAGS += -fPIC -Wall $(GCC_FLAGS_EXTRA)
|
||||
#OS_LIBS += -L/usr/local/lib -lstdc++ -lg++ -lgcc
|
||||
endif
|
||||
endif
|
||||
###
|
||||
|
||||
45
mozilla/nsprpub/config/NEC.mk
Normal file
45
mozilla/nsprpub/config/NEC.mk
Normal file
@@ -0,0 +1,45 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for NEC Mips SYSV
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
CPU_ARCH = mips
|
||||
|
||||
ifdef NS_USE_GCC
|
||||
CC = gcc
|
||||
CCC = g++
|
||||
else
|
||||
CC = $(NSDEPTH)/build/hcc -Xa -KGnum=0 -KOlimit=4000
|
||||
CCC = g++
|
||||
endif
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
|
||||
RANLIB = /bin/true
|
||||
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
OS_CFLAGS = $(ODD_CFLAGS) -DSVR4 -D__SVR4 -DNEC -Dnec_ews -DHAVE_STRERROR
|
||||
OS_LIBS = -lsocket -lnsl -ldl $(LDOPTIONS)
|
||||
LDOPTIONS = -lc -L/usr/ucblib -lucb
|
||||
|
||||
NOSUCHFILE = /no-such-file
|
||||
|
||||
DSO_LDOPTS = -G
|
||||
59
mozilla/nsprpub/config/NEWS-OS.mk
Normal file
59
mozilla/nsprpub/config/NEWS-OS.mk
Normal file
@@ -0,0 +1,59 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
######################################################################
|
||||
# Config stuff for Sony NEWS-OS
|
||||
######################################################################
|
||||
|
||||
######################################################################
|
||||
# Version-independent
|
||||
######################################################################
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
ARCH := sony
|
||||
CPU_ARCH := mips
|
||||
|
||||
CC = cc
|
||||
CCC = CC
|
||||
RANLIB = /bin/true
|
||||
|
||||
OS_INCLUDES = -I/usr/include
|
||||
G++INCLUDES =
|
||||
#OS_LIBS = -lsocket -lnsl -lgen -lresolv
|
||||
|
||||
PLATFORM_FLAGS = -Xa -fullwarn -DSONY
|
||||
PORT_FLAGS = -DSYSV -DSVR4 -D__svr4 -D__svr4__ -D_PR_LOCAL_THREADS_ONLY
|
||||
|
||||
OS_CFLAGS = $(PLATFORM_FLAGS) $(PORT_FLAGS)
|
||||
|
||||
######################################################################
|
||||
# Version-specific stuff
|
||||
######################################################################
|
||||
|
||||
######################################################################
|
||||
# Overrides for defaults in config.mk (or wherever)
|
||||
######################################################################
|
||||
|
||||
######################################################################
|
||||
# Other
|
||||
######################################################################
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
|
||||
DSO_LDOPTS = -G
|
||||
DSO_LDFLAGS =
|
||||
87
mozilla/nsprpub/config/OS2.mk
Normal file
87
mozilla/nsprpub/config/OS2.mk
Normal file
@@ -0,0 +1,87 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Configuration common to all (supported) versions of OS/2
|
||||
#
|
||||
# OS_CFLAGS is the command line options for the compiler when
|
||||
# building the .DLL object files.
|
||||
# OS_EXE_CFLAGS is the command line options for the compiler
|
||||
# when building the .EXE object files; this is for the test
|
||||
# programs.
|
||||
# the macro OS_CFLAGS is set to OS_EXE_CFLAGS inside of the
|
||||
# makefile for the pr/tests directory. ... Hack.
|
||||
|
||||
|
||||
#
|
||||
# On OS/2 we proudly support gbash...
|
||||
#
|
||||
SHELL = GBASH.EXE
|
||||
|
||||
CC = icc -q -DXP_OS2 -N10
|
||||
CCC = icc -q -DXP_OS2 -DOS2=4 -N10
|
||||
LINK = flipper ilink
|
||||
AR = flipper ilibo //noignorecase //nologo $@
|
||||
RANLIB = echo
|
||||
BSDECHO = echo
|
||||
NSINSTALL = nsinstall
|
||||
INSTALL = $(NSINSTALL)
|
||||
MAKE_OBJDIR = mkdir $(OBJDIR)
|
||||
IMPLIB = flipper implib -nologo -noignorecase
|
||||
FILTER = flipper cppfilt -q
|
||||
RC = rc.exe
|
||||
|
||||
GARBAGE =
|
||||
|
||||
XP_DEFINE = -DXP_PC
|
||||
OBJ_SUFFIX = obj
|
||||
LIB_SUFFIX = lib
|
||||
DLL_SUFFIX = dll
|
||||
|
||||
OS_CFLAGS = -I. -W3 -gm -gd+ -sd- -su4 -ge-
|
||||
OS_EXE_CFLAGS = -I. -W3 -gm -gd+ -sd- -su4
|
||||
AR_EXTRA_ARGS = ,,
|
||||
|
||||
ifdef BUILD_OPT
|
||||
OPTIMIZER = -O+ -Oi
|
||||
DEFINES = -UDEBUG -U_DEBUG -DNDEBUG
|
||||
DLLFLAGS = -DLL -OUT:$@ -MAP:$(@:.dll=.map)
|
||||
OBJDIR_TAG = _OPT
|
||||
else
|
||||
OPTIMIZER = -Ti+
|
||||
DEFINES = -DDEBUG -D_DEBUG -UNDEBUG
|
||||
DLLFLAGS = -DEBUG -DLL -OUT:$@ -MAP:$(@:.dll=.map)
|
||||
OBJDIR_TAG = _DBG
|
||||
LDFLAGS = -DEBUG
|
||||
endif
|
||||
|
||||
DEFINES += -DOS2=4 -DBSD_SELECT
|
||||
DEFINES += -D_X86_
|
||||
DEFINES += -D_PR_GLOBAL_THREADS_ONLY
|
||||
|
||||
# Name of the binary code directories
|
||||
ifeq ($(CPU_ARCH),x386)
|
||||
ifdef MOZ_LITE
|
||||
OBJDIR_NAME = $(subst OS2,NAV,$(OS_CONFIG))$(OBJDIR_TAG).OBJ
|
||||
else
|
||||
OBJDIR_NAME = $(OS_CONFIG)$(OBJDIR_TAG).OBJ
|
||||
endif
|
||||
else
|
||||
OBJDIR_NAME = $(OS_CONFIG)$(CPU_ARCH)$(OBJDIR_TAG).OBJ
|
||||
endif
|
||||
|
||||
OS_DLLFLAGS = -nologo -DLL -FREE -NOE
|
||||
93
mozilla/nsprpub/config/OSF1.mk
Normal file
93
mozilla/nsprpub/config/OSF1.mk
Normal file
@@ -0,0 +1,93 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for DEC OSF/1
|
||||
#
|
||||
|
||||
#
|
||||
# The Bourne shell (sh) on OSF1 doesn't handle "set -e" correctly,
|
||||
# which we use to stop LOOP_OVER_DIRS submakes as soon as any
|
||||
# submake fails. So we use the Korn shell instead.
|
||||
#
|
||||
SHELL = /usr/bin/ksh
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
CLASSIC_NSPR = 1
|
||||
endif
|
||||
|
||||
#
|
||||
# On OSF1 V3.2, classic nspr is the default (and only) implementation
|
||||
# strategy.
|
||||
#
|
||||
# On OSF1 V4.0, pthreads is the default implementation strategy.
|
||||
# Classic nspr is also available.
|
||||
#
|
||||
ifneq ($(OS_RELEASE),V3.2)
|
||||
USE_PTHREADS = 1
|
||||
ifeq ($(CLASSIC_NSPR), 1)
|
||||
USE_PTHREADS =
|
||||
IMPL_STRATEGY := _CLASSIC
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
IMPL_STRATEGY =
|
||||
endif
|
||||
|
||||
CC = cc $(NON_LD_FLAGS) -std -readonly_strings
|
||||
# The C++ compiler cxx has -readonly_strings on by default.
|
||||
CCC = cxx
|
||||
|
||||
RANLIB = /bin/true
|
||||
|
||||
CPU_ARCH = alpha
|
||||
|
||||
ifdef BUILD_OPT
|
||||
OPTIMIZER += -Olimit 4000
|
||||
endif
|
||||
|
||||
NON_LD_FLAGS = -ieee_with_inexact
|
||||
|
||||
OS_CFLAGS = -DOSF1 -D_REENTRANT -taso
|
||||
|
||||
ifeq ($(OS_RELEASE),V3.2)
|
||||
OS_CFLAGS += -DOSF1V3
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE),V4.0)
|
||||
OS_CFLAGS += -DOSF1V4
|
||||
endif
|
||||
|
||||
ifeq ($(USE_PTHREADS),1)
|
||||
OS_CFLAGS += -pthread
|
||||
endif
|
||||
|
||||
# The command to build a shared library on OSF1.
|
||||
MKSHLIB = ld -shared -all -expect_unresolved "*"
|
||||
DSO_LDOPTS = -shared
|
||||
56
mozilla/nsprpub/config/Rhapsody.mk
Normal file
56
mozilla/nsprpub/config/Rhapsody.mk
Normal file
@@ -0,0 +1,56 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for Rhapsody5.0
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
#
|
||||
# The default implementation strategy for Rhapsody is classic nspr.
|
||||
#
|
||||
ifeq ($(USE_CTHREADS),1)
|
||||
IMPL_STRATEGY = _CTH
|
||||
DEFINES += -D_PR_GLOBAL_THREADS_ONLY -D_PR_NO_CTHREAD_KEY_T
|
||||
else
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
endif
|
||||
|
||||
DEFINES += -D_PR_NEED_FAKE_POLL
|
||||
|
||||
|
||||
CC = cc
|
||||
CCC = cc++
|
||||
RANLIB = ranlib
|
||||
|
||||
OS_REL_CFLAGS = -Dppc
|
||||
CPU_ARCH = ppc
|
||||
|
||||
#OS_REL_CFLAGS = -mno-486 -Di386
|
||||
#CPU_ARCH = x86
|
||||
|
||||
OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) -pipe -DRHAPSODY -DHAVE_STRERROR -DHAVE_BSD_FLOCK
|
||||
|
||||
ARCH = rhapsody
|
||||
|
||||
#DSO_CFLAGS = -fPIC
|
||||
#DSO_LDOPTS = -Bshareable
|
||||
#DSO_LDFLAGS =
|
||||
|
||||
MKSHLIB = $(CC) -arch ppc -dynamiclib -compatibility_version 1 -current_version 1
|
||||
DLL_SUFFIX = dylib
|
||||
74
mozilla/nsprpub/config/SCOOS.mk
Normal file
74
mozilla/nsprpub/config/SCOOS.mk
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for SCO OpenServer for x86.
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
CC = cc -b elf -KPIC
|
||||
CCC = g++ -b elf -I/usr/local/lib/g++-include
|
||||
# CCC = $(DEPTH)/build/hcpp +.cpp +w
|
||||
RANLIB = /bin/true
|
||||
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
#
|
||||
# -DSCO_PM - Policy Manager AKA: SCO Licensing
|
||||
# -DSCO - Changes to Netscape source (consistent with AIX, LINUX, etc..)
|
||||
# -Dsco - Needed for /usr/include/X11/*
|
||||
#
|
||||
OS_CFLAGS = -DSCO_SV -DSYSV -D_SVID3 -DHAVE_STRERROR -D_PR_NEED_H_ERRNO -DSCO_PM -DSCO -Dsco
|
||||
#OS_LIBS = -lpmapi -lsocket -lc
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
|
||||
XINC = /usr/include/X11
|
||||
MOTIFLIB = -lXm
|
||||
INCLUDES += -I$(XINC)
|
||||
|
||||
CPU_ARCH = x86
|
||||
GFX_ARCH = x
|
||||
ARCH = sco
|
||||
|
||||
LOCALE_MAP = $(DEPTH)/cmd/xfe/intl/sco.lm
|
||||
EN_LOCALE = C
|
||||
DE_LOCALE = de_DE.ISO8859-1
|
||||
FR_LOCALE = fr_FR.ISO8859-1
|
||||
JP_LOCALE = ja
|
||||
SJIS_LOCALE = ja_JP.SJIS
|
||||
KR_LOCALE = ko_KR.EUC
|
||||
CN_LOCALE = zh
|
||||
TW_LOCALE = zh
|
||||
I2_LOCALE = i2
|
||||
|
||||
LOC_LIB_DIR = /usr/lib/X11
|
||||
|
||||
NOSUCHFILE = /no-such-file
|
||||
|
||||
BSDECHO = /bin/echo
|
||||
|
||||
#
|
||||
# These defines are for building unix plugins
|
||||
#
|
||||
BUILD_UNIX_PLUGINS = 1
|
||||
#DSO_LDOPTS = -b elf -G -z defs
|
||||
DSO_LDOPTS = -b elf -G
|
||||
DSO_LDFLAGS = -nostdlib -L/lib -L/usr/lib -lXm -lXt -lX11 -lgen
|
||||
|
||||
# Used for Java compiler
|
||||
EXPORT_FLAGS = -W l,-Bexport
|
||||
74
mozilla/nsprpub/config/SINIX.mk
Normal file
74
mozilla/nsprpub/config/SINIX.mk
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for SNI SINIX-N (aka ReliantUNIX)
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
# use gcc -tf-
|
||||
NS_USE_GCC = 1
|
||||
|
||||
ifdef NS_USE_GCC
|
||||
## gcc-2.7.2 homebrewn
|
||||
CC = gcc
|
||||
COMPILER_TAG = _gcc
|
||||
CCC = g++
|
||||
AS = $(CC) -x assembler-with-cpp
|
||||
LD = gld
|
||||
ODD_CFLAGS = -pipe -Wall -Wno-format
|
||||
ifdef BUILD_OPT
|
||||
OPTIMIZER = -O
|
||||
#OPTIMIZER = -O6
|
||||
endif
|
||||
MKSHLIB = $(LD) -G -h $(@:$(OBJDIR)/%.so=%.so)
|
||||
DSO_LDOPTS = -G -Xlinker -Blargedynsym
|
||||
else
|
||||
## native compiler (CDS++ 1.0)
|
||||
CC = /usr/bin/cc
|
||||
CCC = /usr/bin/CC
|
||||
AS = /usr/bin/cc
|
||||
#ODD_CFLAGS = -fullwarn -xansi
|
||||
ODD_CFLAGS =
|
||||
ifdef BUILD_OPT
|
||||
#OPTIMIZER = -Olimit 4000
|
||||
OPTIMIZER = -O -F Olimit,4000
|
||||
endif
|
||||
MKSHLIB = $(CC) -G -h $(@:$(OBJDIR)/%.so=%.so)
|
||||
DSO_LDOPTS = -G -W l,-Blargedynsym
|
||||
endif
|
||||
|
||||
ODD_CFLAGS += -DSVR4 -DSNI -DRELIANTUNIX -D_SVID_GETTOD
|
||||
|
||||
CPU_ARCH = mips
|
||||
|
||||
RANLIB = /bin/true
|
||||
|
||||
# For purify
|
||||
NOMD_OS_CFLAGS = $(ODD_CFLAGS)
|
||||
|
||||
# we do not have -MDupdate ...
|
||||
OS_CFLAGS = $(NOMD_OS_CFLAGS)
|
||||
OS_LIBS = -lsocket -lnsl -lresolv -lgen -ldl -lc $(UCBLIB)
|
||||
UCBLIB = -L/usr/ucblib -lucb
|
||||
NOSUCHFILE = /no-such-file
|
||||
|
||||
HAVE_PURIFY = 0
|
||||
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
OS_CFLAGS = $(ODD_CFLAGS) -DSVR4 -DSNI -Dsinix
|
||||
26
mozilla/nsprpub/config/SunOS.mk
Normal file
26
mozilla/nsprpub/config/SunOS.mk
Normal file
@@ -0,0 +1,26 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for SunOS.
|
||||
# 4 and 5 are vastly different, so we use 2 different files.
|
||||
#
|
||||
ifeq ($(basename $(OS_RELEASE)),4.1)
|
||||
include $(MOD_DEPTH)/config/SunOS4.mk
|
||||
else
|
||||
include $(MOD_DEPTH)/config/SunOS5.mk
|
||||
endif
|
||||
48
mozilla/nsprpub/config/SunOS4.mk
Normal file
48
mozilla/nsprpub/config/SunOS4.mk
Normal file
@@ -0,0 +1,48 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for SunOS4.1
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
# SunOS 4 _requires_ that shared libs have a version number.
|
||||
# XXX FIXME: Version number should use NSPR_VERSION_NUMBER?
|
||||
DLL_SUFFIX = so.1.0
|
||||
|
||||
CC = gcc
|
||||
COMPILER_TAG = _gcc
|
||||
|
||||
RANLIB = ranlib
|
||||
|
||||
CPU_ARCH = sparc
|
||||
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
# Purify doesn't like -MDupdate
|
||||
NOMD_OS_CFLAGS = -Wall -Wno-format -DSUNOS4
|
||||
OS_CFLAGS = $(DSO_CFLAGS) $(NOMD_OS_CFLAGS) -MDupdate $(DEPENDENCIES)
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
|
||||
HAVE_PURIFY = 1
|
||||
|
||||
NOSUCHFILE = /no-such-file
|
||||
|
||||
DSO_LDOPTS =
|
||||
# -fPIC generates position-independent code for use in a shared library.
|
||||
DSO_CFLAGS = -fPIC
|
||||
162
mozilla/nsprpub/config/SunOS5.mk
Normal file
162
mozilla/nsprpub/config/SunOS5.mk
Normal file
@@ -0,0 +1,162 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for SunOS 5.x on sparc and x86
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
LOCAL_THREADS_ONLY = 1
|
||||
ifndef NS_USE_NATIVE
|
||||
NS_USE_GCC = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# The default implementation strategy on Solaris is global threads only.
|
||||
# Local threads only and pthreads are also available.
|
||||
#
|
||||
ifeq ($(USE_PTHREADS),1)
|
||||
IMPL_STRATEGY = _PTH
|
||||
else
|
||||
ifeq ($(LOCAL_THREADS_ONLY),1)
|
||||
IMPL_STRATEGY = _LOCAL
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
else
|
||||
DEFINES += -D_PR_GLOBAL_THREADS_ONLY
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
IMPL_STRATEGY =
|
||||
endif
|
||||
|
||||
ifdef NS_USE_GCC
|
||||
CC = gcc -Wall
|
||||
CCC = g++ -Wall
|
||||
#
|
||||
# XXX
|
||||
# Temporary define for the Client; to be removed when binary release is used
|
||||
#
|
||||
ifdef MOZILLA_CLIENT
|
||||
#COMPILER_TAG = _gcc
|
||||
else
|
||||
COMPILER_TAG = _gcc
|
||||
endif
|
||||
#ASFLAGS += -x assembler-with-cpp
|
||||
ifdef NO_MDUPDATE
|
||||
OS_CFLAGS = $(NOMD_OS_CFLAGS)
|
||||
else
|
||||
OS_CFLAGS = $(NOMD_OS_CFLAGS) -MDupdate $(DEPENDENCIES)
|
||||
endif
|
||||
else
|
||||
CC = cc -xstrconst
|
||||
CCC = CC -Qoption cg -xstrconst
|
||||
ASFLAGS += -Wa,-P
|
||||
OS_CFLAGS = $(NOMD_OS_CFLAGS)
|
||||
#
|
||||
# If we are building for a release, we want to put all symbol
|
||||
# tables in the debug executable or share library instead of
|
||||
# the .o files, so that our clients can run dbx on the debug
|
||||
# library without having the .o files around.
|
||||
#
|
||||
ifdef BUILD_NUMBER
|
||||
ifndef BUILD_OPT
|
||||
OS_CFLAGS += -xs
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
RANLIB = echo
|
||||
|
||||
OS_DEFINES = -DSVR4 -DSYSV -D__svr4 -D__svr4__ -DSOLARIS
|
||||
|
||||
ifeq ($(OS_TEST),i86pc)
|
||||
CPU_ARCH = x86
|
||||
CPU_ARCH_TAG = _i86pc
|
||||
OS_DEFINES += -Di386
|
||||
else
|
||||
CPU_ARCH = sparc
|
||||
endif
|
||||
|
||||
ifeq (5.5,$(findstring 5.5,$(OS_RELEASE)))
|
||||
OS_DEFINES += -DSOLARIS2_5
|
||||
SOL_CFLAGS = -D_SVID_GETTOD
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE),5.6)
|
||||
SOL_CFLAGS = -D_SVID_GETTOD
|
||||
endif
|
||||
|
||||
ifneq ($(LOCAL_THREADS_ONLY),1)
|
||||
OS_DEFINES += -D_REENTRANT
|
||||
endif
|
||||
|
||||
# Purify doesn't like -MDupdate
|
||||
NOMD_OS_CFLAGS = $(DSO_CFLAGS) $(OS_DEFINES) $(SOL_CFLAGS)
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
|
||||
# ld options:
|
||||
# -G: produce a shared object
|
||||
# -z defs: no unresolved symbols allowed
|
||||
DSO_LDOPTS = -G
|
||||
|
||||
# -KPIC generates position independent code for use in shared libraries.
|
||||
# (Similarly for -fPIC in case of gcc.)
|
||||
ifdef NS_USE_GCC
|
||||
DSO_CFLAGS = -fPIC
|
||||
else
|
||||
DSO_CFLAGS = -KPIC
|
||||
endif
|
||||
|
||||
HAVE_PURIFY = 1
|
||||
|
||||
NOSUCHFILE = /no-such-file
|
||||
|
||||
#
|
||||
# Library of atomic functions for UltraSparc systems
|
||||
#
|
||||
# The nspr makefiles build ULTRASPARC_LIBRARY (which contains assembly language
|
||||
# implementation of the nspr atomic functions for UltraSparc systems) in addition
|
||||
# to libnspr.so. (The actual name of the library is
|
||||
# lib$(ULTRASPARC_LIBRARY)$(MOD_VERSION).so
|
||||
#
|
||||
# The actual name of the filter-library, recorded in libnspr.so, is set to the
|
||||
# value of $(ULTRASPARC_FILTER_LIBRARY).
|
||||
# For an application to use the assembly-language implementation, a link should be
|
||||
# made so that opening ULTRASPARC_FILTER_LIBRARY results in opening
|
||||
# ULTRASPARC_LIBRARY. This indirection requires the user to explicitly set up
|
||||
# library for use on UltraSparc systems, thereby helping to avoid using it by
|
||||
# accident on non-UltraSparc systems.
|
||||
# The directory containing the ultrasparc libraries should be in LD_LIBRARY_PATH.
|
||||
#
|
||||
ifeq ($(OS_TEST),sun4u)
|
||||
ULTRASPARC_LIBRARY = ultrasparc
|
||||
ULTRASPARC_FILTER_LIBRARY = libatomic.so
|
||||
DSO_LDOPTS += -f $(ULTRASPARC_FILTER_LIBRARY)
|
||||
endif
|
||||
70
mozilla/nsprpub/config/UNIX.mk
Normal file
70
mozilla/nsprpub/config/UNIX.mk
Normal file
@@ -0,0 +1,70 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
XP_DEFINE = -DXP_UNIX
|
||||
OBJ_SUFFIX = o
|
||||
LIB_SUFFIX = a
|
||||
DLL_SUFFIX = so
|
||||
AR = ar cr $@
|
||||
|
||||
ifdef BUILD_OPT
|
||||
OPTIMIZER = -O
|
||||
DEFINES = -UDEBUG -DNDEBUG
|
||||
OBJDIR_TAG = _OPT
|
||||
else
|
||||
OPTIMIZER = -g
|
||||
DEFINES = -DDEBUG -UNDEBUG -DDEBUG_$(shell whoami)
|
||||
OBJDIR_TAG = _DBG
|
||||
endif
|
||||
|
||||
# Name of the binary code directories
|
||||
OBJDIR_NAME = $(OS_CONFIG)$(CPU_ARCH_TAG)$(COMPILER_TAG)$(IMPL_STRATEGY)$(OBJDIR_TAG).OBJ
|
||||
|
||||
MKDEPEND_DIR = $(DEPTH)/config/mkdepend
|
||||
MKDEPEND = $(MKDEPEND_DIR)/$(OBJDIR_NAME)/mkdepend
|
||||
MKDEPENDENCIES = $(OBJDIR)/depend.mk
|
||||
|
||||
####################################################################
|
||||
#
|
||||
# One can define the makefile variable NSDISTMODE to control
|
||||
# how files are published to the 'dist' directory. If not
|
||||
# defined, the default is "install using relative symbolic
|
||||
# links". The two possible values are "copy", which copies files
|
||||
# but preserves source mtime, and "absolute_symlink", which
|
||||
# installs using absolute symbolic links. The "absolute_symlink"
|
||||
# option requires NFSPWD.
|
||||
#
|
||||
####################################################################
|
||||
|
||||
NSINSTALL = $(MOD_DEPTH)/config/$(OBJDIR_NAME)/nsinstall
|
||||
|
||||
ifeq ($(NSDISTMODE),copy)
|
||||
# copy files, but preserve source mtime
|
||||
INSTALL = $(NSINSTALL) -t
|
||||
else
|
||||
ifeq ($(NSDISTMODE),absolute_symlink)
|
||||
# install using absolute symbolic links
|
||||
INSTALL = $(NSINSTALL) -L `$(NFSPWD)`
|
||||
else
|
||||
# install using relative symbolic links
|
||||
INSTALL = $(NSINSTALL) -R
|
||||
endif
|
||||
endif
|
||||
|
||||
define MAKE_OBJDIR
|
||||
if test ! -d $(@D); then rm -rf $(@D); $(NSINSTALL) -D $(@D); fi
|
||||
endef
|
||||
38
mozilla/nsprpub/config/UNIXWARE.mk
Normal file
38
mozilla/nsprpub/config/UNIXWARE.mk
Normal file
@@ -0,0 +1,38 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for SCO UnixWare
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/UNIX.mk
|
||||
|
||||
CC = $(NSDEPTH)/build/hcc
|
||||
CCC = $(NSDEPTH)/build/hcpp
|
||||
|
||||
RANLIB = true
|
||||
|
||||
DEFINES += -D_PR_LOCAL_THREADS_ONLY
|
||||
OS_CFLAGS = -DSVR4 -DSYSV -DUNIXWARE
|
||||
|
||||
MKSHLIB = $(LD) $(DSO_LDOPTS)
|
||||
DSO_LDOPTS = -G
|
||||
|
||||
CPU_ARCH = x86
|
||||
ARCH = sco
|
||||
|
||||
NOSUCHFILE = /no-such-file
|
||||
139
mozilla/nsprpub/config/WIN32.mk
Normal file
139
mozilla/nsprpub/config/WIN32.mk
Normal file
@@ -0,0 +1,139 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Configuration common to all versions of Windows NT
|
||||
# and Windows 95.
|
||||
#
|
||||
|
||||
#
|
||||
# Client build: make sure we use the shmsdos.exe under $(MOZ_TOOLS).
|
||||
# $(MOZ_TOOLS_FLIPPED) is $(MOZ_TOOLS) with all the backslashes
|
||||
# flipped, so that gmake won't interpret them as escape characters.
|
||||
#
|
||||
ifdef PR_CLIENT_BUILD_WINDOWS
|
||||
SHELL = $(MOZ_TOOLS_FLIPPED)/bin/shmsdos.exe
|
||||
endif
|
||||
|
||||
CC = cl
|
||||
CCC = cl
|
||||
LINK = link
|
||||
AR = lib -NOLOGO -OUT:"$@"
|
||||
RANLIB = echo
|
||||
BSDECHO = echo
|
||||
NSINSTALL = nsinstall
|
||||
INSTALL = $(NSINSTALL)
|
||||
define MAKE_OBJDIR
|
||||
if test ! -d $(@D); then rm -rf $(@D); $(NSINSTALL) -D $(@D); fi
|
||||
endef
|
||||
RC = rc.exe
|
||||
|
||||
GARBAGE = $(OBJDIR)/vc20.pdb $(OBJDIR)/vc40.pdb
|
||||
|
||||
XP_DEFINE = -DXP_PC
|
||||
OBJ_SUFFIX = obj
|
||||
LIB_SUFFIX = lib
|
||||
DLL_SUFFIX = dll
|
||||
|
||||
OS_CFLAGS = -W3 -nologo -GF -Gy
|
||||
|
||||
ifdef MOZ_PROF
|
||||
|
||||
#
|
||||
# compile with debug symbols, but without DEBUG code and ASSERTs
|
||||
#
|
||||
ifdef USE_DEBUG_RTL
|
||||
OS_CFLAGS += -MDd
|
||||
else
|
||||
OS_CFLAGS += -MD
|
||||
endif
|
||||
OPTIMIZER = -Od -Z7
|
||||
#OPTIMIZER = -Zi -Fd$(OBJDIR)/ -Od
|
||||
DEFINES = -UDEBUG -U_DEBUG -DNDEBUG
|
||||
DLLFLAGS = -DEBUG -DEBUGTYPE:CV -OUT:"$@"
|
||||
OBJDIR_TAG = _DBG
|
||||
LDFLAGS = -DEBUG -DEBUGTYPE:CV
|
||||
|
||||
else
|
||||
|
||||
ifdef BUILD_OPT
|
||||
OS_CFLAGS += -MD
|
||||
OPTIMIZER = -O2
|
||||
DEFINES = -UDEBUG -U_DEBUG -DNDEBUG
|
||||
DLLFLAGS = -OUT:"$@"
|
||||
OBJDIR_TAG = _OPT
|
||||
else
|
||||
#
|
||||
# Define USE_DEBUG_RTL if you want to use the debug runtime library
|
||||
# (RTL) in the debug build
|
||||
#
|
||||
ifdef USE_DEBUG_RTL
|
||||
OS_CFLAGS += -MDd
|
||||
else
|
||||
OS_CFLAGS += -MD
|
||||
endif
|
||||
OPTIMIZER = -Od -Z7
|
||||
#OPTIMIZER = -Zi -Fd$(OBJDIR)/ -Od
|
||||
DEFINES = -DDEBUG -D_DEBUG -UNDEBUG
|
||||
DLLFLAGS = -DEBUG -DEBUGTYPE:CV -OUT:"$@"
|
||||
OBJDIR_TAG = _DBG
|
||||
LDFLAGS = -DEBUG -DEBUGTYPE:CV
|
||||
endif
|
||||
endif
|
||||
|
||||
DEFINES += -DWIN32
|
||||
ifeq ($(OS_TARGET),WINNT)
|
||||
#
|
||||
# Win NT needs -GT so that fibers can work
|
||||
#
|
||||
OS_CFLAGS += -GT
|
||||
DEFINES += -DWINNT
|
||||
else
|
||||
DEFINES += -DWIN95 -D_PR_GLOBAL_THREADS_ONLY
|
||||
endif
|
||||
|
||||
ifeq ($(CPU_ARCH),x386)
|
||||
DEFINES += -D_X86_
|
||||
else
|
||||
ifeq ($(CPU_ARCH),MIPS)
|
||||
DEFINES += -D_MIPS_
|
||||
else
|
||||
ifeq ($(CPU_ARCH),ALPHA)
|
||||
DEFINES += -D_ALPHA_=1
|
||||
else
|
||||
CPU_ARCH = processor_is_undefined
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Name of the binary code directories
|
||||
|
||||
ifeq ($(CPU_ARCH),x386)
|
||||
CPU_ARCH_TAG =
|
||||
else
|
||||
CPU_ARCH_TAG = $(CPU_ARCH)
|
||||
endif
|
||||
|
||||
ifdef USE_DEBUG_RTL
|
||||
OBJDIR_SUFFIX = OBJD
|
||||
else
|
||||
OBJDIR_SUFFIX = OBJ
|
||||
endif
|
||||
|
||||
OBJDIR_NAME = $(OS_CONFIG)$(CPU_ARCH_TAG)$(OBJDIR_TAG).$(OBJDIR_SUFFIX)
|
||||
|
||||
OS_DLLFLAGS = -nologo -DLL -SUBSYSTEM:WINDOWS -PDB:NONE
|
||||
22
mozilla/nsprpub/config/WIN95.mk
Normal file
22
mozilla/nsprpub/config/WIN95.mk
Normal file
@@ -0,0 +1,22 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for WIN95
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/WIN32.mk
|
||||
22
mozilla/nsprpub/config/WINNT.mk
Normal file
22
mozilla/nsprpub/config/WINNT.mk
Normal file
@@ -0,0 +1,22 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# Config stuff for WINNT
|
||||
#
|
||||
|
||||
include $(MOD_DEPTH)/config/WIN32.mk
|
||||
200
mozilla/nsprpub/config/arch.mk
Normal file
200
mozilla/nsprpub/config/arch.mk
Normal file
@@ -0,0 +1,200 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#######################################################################
|
||||
# Master "Core Components" macros for getting the OS architecture #
|
||||
#######################################################################
|
||||
|
||||
#
|
||||
# Important internal static macros
|
||||
#
|
||||
|
||||
OS_ARCH := $(subst /,_,$(shell uname -s))
|
||||
OS_RELEASE := $(shell uname -r)
|
||||
OS_TEST := $(shell uname -m)
|
||||
|
||||
#
|
||||
# Tweak the default OS_ARCH and OS_RELEASE macros as needed.
|
||||
#
|
||||
ifeq ($(OS_ARCH),AIX)
|
||||
OS_RELEASE := $(shell uname -v).$(shell uname -r)
|
||||
endif
|
||||
ifeq ($(OS_ARCH),BSD_386)
|
||||
OS_ARCH := BSD_OS
|
||||
endif
|
||||
ifeq ($(OS_ARCH),IRIX64)
|
||||
OS_ARCH := IRIX
|
||||
endif
|
||||
ifeq ($(OS_ARCH),UNIX_SV)
|
||||
ifneq ($(findstring NCR,$(shell grep NCR /etc/bcheckrc | head -1 )),)
|
||||
OS_ARCH := NCR
|
||||
else
|
||||
OS_ARCH := UNIXWARE
|
||||
OS_RELEASE := $(shell uname -v)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(OS_ARCH),ncr)
|
||||
OS_ARCH := NCR
|
||||
endif
|
||||
# This is the only way to correctly determine the actual OS version on NCR boxes.
|
||||
ifeq ($(OS_ARCH),NCR)
|
||||
OS_RELEASE := $(shell awk '{print $$3}' /etc/.relid | sed 's/^\([0-9]\)\(.\)\(..\)\(.*\)$$/\2.\3/')
|
||||
endif
|
||||
ifeq ($(OS_ARCH),UNIX_System_V)
|
||||
OS_ARCH := NEC
|
||||
endif
|
||||
ifeq ($(OS_ARCH),SCO_SV)
|
||||
OS_ARCH := SCOOS
|
||||
OS_RELEASE := 5.0
|
||||
endif
|
||||
ifeq ($(OS_ARCH),SINIX-N)
|
||||
OS_ARCH := SINIX
|
||||
endif
|
||||
# SINIX changes name to ReliantUNIX with 5.43
|
||||
ifeq ($(OS_ARCH),ReliantUNIX-N)
|
||||
OS_ARCH := SINIX
|
||||
endif
|
||||
ifeq ($(OS_ARCH),UnixWare)
|
||||
OS_ARCH := UNIXWARE
|
||||
OS_RELEASE := $(shell uname -v)
|
||||
endif
|
||||
|
||||
#
|
||||
# Handle FreeBSD 2.2-STABLE and Linux 2.0.30-osfmach3
|
||||
#
|
||||
|
||||
ifeq (,$(filter-out Linux FreeBSD,$(OS_ARCH)))
|
||||
OS_RELEASE := $(shell echo $(OS_RELEASE) | sed 's/-.*//')
|
||||
endif
|
||||
|
||||
#
|
||||
# Distinguish between OSF1 V4.0B and V4.0D
|
||||
#
|
||||
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE),OSF1V4.0)
|
||||
OS_VERSION := $(shell uname -v)
|
||||
ifeq ($(OS_VERSION),564)
|
||||
OS_RELEASE := V4.0B
|
||||
endif
|
||||
ifeq ($(OS_VERSION),878)
|
||||
OS_RELEASE := V4.0D
|
||||
endif
|
||||
endif
|
||||
|
||||
#######################################################################
|
||||
# Master "Core Components" macros for getting the OS target #
|
||||
#######################################################################
|
||||
|
||||
#
|
||||
# Note: OS_TARGET should be specified on the command line for gmake.
|
||||
# When OS_TARGET=WIN95 is specified, then a Windows 95 target is built.
|
||||
# The difference between the Win95 target and the WinNT target is that
|
||||
# the WinNT target uses Windows NT specific features not available
|
||||
# in Windows 95. The Win95 target will run on Windows NT, but (supposedly)
|
||||
# at lesser performance (the Win95 target uses threads; the WinNT target
|
||||
# uses fibers).
|
||||
#
|
||||
# When OS_TARGET=WIN16 is specified, then a Windows 3.11 (16bit) target
|
||||
# is built. See: win16_3.11.mk for lots more about the Win16 target.
|
||||
#
|
||||
# If OS_TARGET is not specified, it defaults to $(OS_ARCH), i.e., no
|
||||
# cross-compilation.
|
||||
#
|
||||
|
||||
#
|
||||
# The following hack allows one to build on a WIN95 machine (as if
|
||||
# s/he were cross-compiling on a WINNT host for a WIN95 target).
|
||||
# It also accomodates for MKS's uname.exe. If you never intend
|
||||
# to do development on a WIN95 machine, you don't need this hack.
|
||||
#
|
||||
ifeq ($(OS_ARCH),WIN95)
|
||||
OS_ARCH := WINNT
|
||||
OS_TARGET := WIN95
|
||||
endif
|
||||
ifeq ($(OS_ARCH),Windows_95)
|
||||
OS_ARCH := Windows_NT
|
||||
OS_TARGET := WIN95
|
||||
endif
|
||||
ifeq ($(OS_ARCH), OS2)
|
||||
OS_ARCH := WINNT
|
||||
OS_TARGET := OS2
|
||||
endif
|
||||
|
||||
#
|
||||
# On WIN32, we also define the variable CPU_ARCH.
|
||||
#
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
CPU_ARCH := $(shell uname -p)
|
||||
ifeq ($(CPU_ARCH),I386)
|
||||
CPU_ARCH = x386
|
||||
endif
|
||||
else
|
||||
#
|
||||
# If uname -s returns "Windows_NT", we assume that we are using
|
||||
# the uname.exe in MKS toolkit.
|
||||
#
|
||||
# The -r option of MKS uname only returns the major version number.
|
||||
# So we need to use its -v option to get the minor version number.
|
||||
# Moreover, it doesn't have the -p option, so we need to use uname -m.
|
||||
#
|
||||
ifeq ($(OS_ARCH), Windows_NT)
|
||||
OS_ARCH = WINNT
|
||||
OS_MINOR_RELEASE := $(shell uname -v)
|
||||
ifeq ($(OS_MINOR_RELEASE),00)
|
||||
OS_MINOR_RELEASE = 0
|
||||
endif
|
||||
OS_RELEASE := $(OS_RELEASE).$(OS_MINOR_RELEASE)
|
||||
CPU_ARCH := $(shell uname -m)
|
||||
#
|
||||
# MKS's uname -m returns "586" on a Pentium machine.
|
||||
#
|
||||
ifneq (,$(findstring 86,$(CPU_ARCH)))
|
||||
CPU_ARCH = x386
|
||||
endif
|
||||
else
|
||||
#
|
||||
# If uname -s returns "CYGWIN32/NT", we assume that we are using
|
||||
# the uname.exe in the GNU-Win32 tools.
|
||||
#
|
||||
ifeq ($(OS_ARCH), CYGWIN32_NT)
|
||||
OS_ARCH = WINNT
|
||||
CPU_ARCH := $(shell uname -m)
|
||||
#
|
||||
# GNU-Win32's uname -m returns "i686" on a Pentium Pro machine.
|
||||
#
|
||||
ifneq (,$(findstring 86,$(CPU_ARCH)))
|
||||
CPU_ARCH = x386
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifndef OS_TARGET
|
||||
OS_TARGET := $(OS_ARCH)
|
||||
endif
|
||||
|
||||
ifeq ($(OS_TARGET), WIN95)
|
||||
OS_RELEASE := 4.0
|
||||
endif
|
||||
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
OS_RELEASE :=
|
||||
# OS_RELEASE := _3.11
|
||||
endif
|
||||
|
||||
OS_CONFIG := $(OS_TARGET)$(OS_RELEASE)
|
||||
116
mozilla/nsprpub/config/config.mk
Normal file
116
mozilla/nsprpub/config/config.mk
Normal file
@@ -0,0 +1,116 @@
|
||||
#! gmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
# Configuration information for building in the NSPR source module
|
||||
|
||||
# Define an include-at-most-once-flag
|
||||
NSPR_CONFIG_MK = 1
|
||||
|
||||
include $(MOD_DEPTH)/config/module.df
|
||||
|
||||
include $(MOD_DEPTH)/config/arch.mk
|
||||
|
||||
ifndef NSDEPTH
|
||||
NSDEPTH = $(MOD_DEPTH)/..
|
||||
endif
|
||||
|
||||
#
|
||||
# Default command macros; can be overridden in <arch>.mk.
|
||||
#
|
||||
# XXX FIXME: I removed CCF and LINKEXE.
|
||||
AS = $(CC)
|
||||
ASFLAGS = $(CFLAGS)
|
||||
PURIFY = purify $(PURIFYOPTIONS)
|
||||
LINK_DLL = $(LINK) $(OS_DLLFLAGS) $(DLLFLAGS)
|
||||
NFSPWD = $(MOD_DEPTH)/config/nfspwd
|
||||
|
||||
LIBNSPR = $(DIST)/lib/libnspr.$(LIB_SUFFIX)
|
||||
PURELIBNSPR = $(DIST)/lib/libpurenspr.$(LIB_SUFFIX)
|
||||
|
||||
CFLAGS = $(OPTIMIZER) $(OS_CFLAGS) $(XP_DEFINE) $(DEFINES) $(INCLUDES) \
|
||||
$(XCFLAGS)
|
||||
# For purify
|
||||
NOMD_CFLAGS = $(OPTIMIZER) $(NOMD_OS_CFLAGS) $(XP_DEFINE) $(DEFINES) $(INCLUDES) \
|
||||
$(XCFLAGS)
|
||||
|
||||
include $(MOD_DEPTH)/config/$(OS_TARGET).mk
|
||||
|
||||
# Figure out where the binary code lives.
|
||||
BUILD = $(OBJDIR_NAME)
|
||||
OBJDIR = $(OBJDIR_NAME)
|
||||
DIST = $(NSDEPTH)/dist/$(OBJDIR_NAME)
|
||||
ifeq ($(MOZ_BITS),16)
|
||||
MOZ_INCL = $(NSDEPTH)/dist/public/win16
|
||||
MOZ_DIST = $(NSDEPTH)/dist/WIN16D_D.OBJ
|
||||
endif
|
||||
|
||||
VPATH = $(OBJDIR)
|
||||
DEPENDENCIES = $(OBJDIR)/.md
|
||||
|
||||
ifdef BUILD_DEBUG_GC
|
||||
DEFINES += -DDEBUG_GC
|
||||
endif
|
||||
|
||||
GARBAGE += $(DEPENDENCIES) core $(wildcard core.[0-9]*)
|
||||
|
||||
####################################################################
|
||||
#
|
||||
# The NSPR-specific configuration
|
||||
#
|
||||
####################################################################
|
||||
|
||||
OS_CFLAGS += -DFORCE_PR_LOG
|
||||
|
||||
ifeq ($(_PR_NO_CLOCK_TIMER),1)
|
||||
OS_CFLAGS += -D_PR_NO_CLOCK_TIMER
|
||||
endif
|
||||
|
||||
ifeq ($(USE_PTHREADS), 1)
|
||||
OS_CFLAGS += -D_PR_PTHREADS -UHAVE_CVAR_BUILT_ON_SEM
|
||||
endif
|
||||
|
||||
ifeq ($(PTHREADS_USER), 1)
|
||||
OS_CFLAGS += -DPTHREADS_USER -UHAVE_CVAR_BUILT_ON_SEM
|
||||
endif
|
||||
|
||||
ifeq ($(USE_CTHREADS), 1)
|
||||
OS_CFLAGS += -D_PR_CTHREADS
|
||||
endif
|
||||
|
||||
ifeq ($(USE_IPV6),1)
|
||||
OS_CFLAGS += -D_PR_INET6
|
||||
endif
|
||||
|
||||
####################################################################
|
||||
#
|
||||
# Configuration for the release process
|
||||
#
|
||||
####################################################################
|
||||
|
||||
MDIST = /m/dist
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
MDIST = //helium/dist
|
||||
MDIST_DOS = \\\\helium\\dist
|
||||
endif
|
||||
|
||||
# RELEASE_DIR is ns/dist/<module name>
|
||||
|
||||
RELEASE_DIR = $(NSDEPTH)/dist/release/$(MOD_NAME)
|
||||
|
||||
RELEASE_INCLUDE_DIR = $(RELEASE_DIR)/$(BUILD_NUMBER)/$(OBJDIR_NAME)/include
|
||||
RELEASE_LIB_DIR = $(RELEASE_DIR)/$(BUILD_NUMBER)/$(OBJDIR_NAME)/lib
|
||||
139
mozilla/nsprpub/config/libc_r.h
Normal file
139
mozilla/nsprpub/config/libc_r.h
Normal file
@@ -0,0 +1,139 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/* libc_r.h -- macros, defines, etc. to make using reentrant libc calls */
|
||||
/* a bit easier. This was initially done for AIX pthreads, */
|
||||
/* but should be usable for anyone... */
|
||||
|
||||
/* Most of these use locally defined space instead of static library space. */
|
||||
/* Because of this, we use the _INIT_R to declare/allocate space (stack), */
|
||||
/* and the plain routines to actually do it..._WARNING_: avoid allocating */
|
||||
/* memory wherever possible. Memory allocation is fairly expensive, at */
|
||||
/* least on AIX...use arrays instead (which allocate from the stack.) */
|
||||
/* I know the names are a bit strange, but I wanted to be fairly certain */
|
||||
/* that we didn't have any namespace corruption...in general, the inits are */
|
||||
/* R_<name>_INIT_R(), and the actual calls are R_<name>_R(). */
|
||||
|
||||
#ifndef _LIBC_R_H
|
||||
#define _LIBC_R_H
|
||||
|
||||
/************/
|
||||
/* strtok */
|
||||
/************/
|
||||
#define R_STRTOK_INIT_R() \
|
||||
char *r_strtok_r=NULL
|
||||
|
||||
#define R_STRTOK_R(return,source,delim) \
|
||||
return=strtok_r(source,delim,&r_strtok_r)
|
||||
|
||||
#define R_STRTOK_NORET_R(source,delim) \
|
||||
strtok_r(source,delim,&r_strtok_r)
|
||||
|
||||
/**************/
|
||||
/* strerror */
|
||||
/**************/
|
||||
#define R_MAX_STRERROR_LEN_R 8192 /* Straight from limits.h */
|
||||
|
||||
#define R_STRERROR_INIT_R() \
|
||||
char r_strerror_r[R_MAX_STRERROR_LEN_R]
|
||||
|
||||
#define R_STRERROR_R(val) \
|
||||
strerror_r(val,r_strerror_r,R_MAX_STRERROR_LEN_R)
|
||||
|
||||
/*****************/
|
||||
/* time things */
|
||||
/*****************/
|
||||
#define R_ASCTIME_INIT_R() \
|
||||
char r_asctime_r[26]
|
||||
|
||||
#define R_ASCTIME_R(val) \
|
||||
asctime_r(val,r_asctime_r)
|
||||
|
||||
#define R_CTIME_INIT_R() \
|
||||
char r_ctime_r[26]
|
||||
|
||||
#define R_CTIME_R(val) \
|
||||
ctime_r(val,r_ctime_r)
|
||||
|
||||
#define R_GMTIME_INIT_R() \
|
||||
struct tm r_gmtime_r
|
||||
|
||||
#define R_GMTIME_R(time) \
|
||||
gmtime_r(time,&r_gmtime_r)
|
||||
|
||||
#define R_LOCALTIME_INIT_R() \
|
||||
struct tm r_localtime_r
|
||||
|
||||
#define R_LOCALTIME_R(val) \
|
||||
localtime_r(val,&r_localtime_r)
|
||||
|
||||
/***********/
|
||||
/* crypt */
|
||||
/***********/
|
||||
#include <crypt.h>
|
||||
#define R_CRYPT_INIT_R() \
|
||||
CRYPTD r_cryptd_r; \
|
||||
bzero(&r_cryptd_r,sizeof(CRYPTD))
|
||||
|
||||
#define R_CRYPT_R(pass,salt) \
|
||||
crypt_r(pass,salt,&r_cryptd_r)
|
||||
|
||||
/**************/
|
||||
/* pw stuff */
|
||||
/**************/
|
||||
#define R_MAX_PW_LEN_R 1024
|
||||
/* The following must be after the last declaration, but */
|
||||
/* before the first bit of code... */
|
||||
#define R_GETPWNAM_INIT_R(pw_ptr) \
|
||||
struct passwd r_getpwnam_pw_r; \
|
||||
char r_getpwnam_line_r[R_MAX_PW_LEN_R]; \
|
||||
pw_ptr = &r_getpwnam_pw_r
|
||||
|
||||
#define R_GETPWNAM_R(name) \
|
||||
getpwnam_r(name,&r_getpwnam_pw_r,r_getpwnam_line_r,R_MAX_PW_LEN_R)
|
||||
|
||||
/*******************/
|
||||
/* gethost stuff */
|
||||
/*******************/
|
||||
#define R_GETHOSTBYADDR_INIT_R() \
|
||||
struct hostent r_gethostbyaddr_r; \
|
||||
struct hostent_data r_gethostbyaddr_data_r
|
||||
|
||||
#define R_GETHOSTBYADDR_R(addr,len,type,xptr_ent) \
|
||||
bzero(&r_gethostbyaddr_r,sizeof(struct hostent)); \
|
||||
bzero(&r_gethostbyaddr_data_r,sizeof(struct hostent_data)); \
|
||||
xptr_ent = &r_gethostbyaddr_r; \
|
||||
if (gethostbyaddr_r(addr,len,type, \
|
||||
&r_gethostbyaddr_r,&r_gethostbyaddr_data_r) == -1) { \
|
||||
xptr_ent = NULL; \
|
||||
}
|
||||
|
||||
#define R_GETHOSTBYNAME_INIT_R() \
|
||||
struct hostent r_gethostbyname_r; \
|
||||
struct hostent_data r_gethostbyname_data_r
|
||||
|
||||
#define R_GETHOSTBYNAME_R(name,xptr_ent) \
|
||||
bzero(&r_gethostbyname_r,sizeof(struct hostent)); \
|
||||
bzero(&r_gethostbyname_data_r,sizeof(struct hostent_data)); \
|
||||
xptr_ent = &r_gethostbyname_r; \
|
||||
if (gethostbyname_r(name, \
|
||||
&r_gethostbyname_r,&r_gethostbyname_data_r) == -1) { \
|
||||
xptr_ent = NULL; \
|
||||
}
|
||||
|
||||
#endif /* _LIBC_R_H */
|
||||
23
mozilla/nsprpub/config/module.df
Normal file
23
mozilla/nsprpub/config/module.df
Normal file
@@ -0,0 +1,23 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
# Module description file
|
||||
#
|
||||
# A module is also called a component or a subsystem.
|
||||
|
||||
MOD_NAME = nspr20
|
||||
MOD_VERSION = 21
|
||||
30
mozilla/nsprpub/config/nfspwd.pl
Normal file
30
mozilla/nsprpub/config/nfspwd.pl
Normal file
@@ -0,0 +1,30 @@
|
||||
#! perl
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
require "fastcwd.pl";
|
||||
|
||||
$_ = &fastcwd;
|
||||
if (m@^/[uh]/@o || s@^/tmp_mnt/@/@o) {
|
||||
print("$_\n");
|
||||
} elsif ((($user, $rest) = m@^/usr/people/(\w+)/(.*)@o)
|
||||
&& readlink("/u/$user") eq "/usr/people/$user") {
|
||||
print("/u/$user/$rest\n");
|
||||
} else {
|
||||
chop($host = `hostname`);
|
||||
print("/h/$host$_\n");
|
||||
}
|
||||
336
mozilla/nsprpub/config/nsinstall.c
Normal file
336
mozilla/nsprpub/config/nsinstall.c
Normal file
@@ -0,0 +1,336 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
** Netscape portable install command.
|
||||
**
|
||||
** Brendan Eich, 7/20/95
|
||||
*/
|
||||
#include <stdio.h> /* OSF/1 requires this before grp.h, so put it first */
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <grp.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <utime.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include "pathsub.h"
|
||||
|
||||
#define HAVE_LCHOWN
|
||||
|
||||
#if defined(AIX) || defined(BSDI) || defined(HPUX) || defined(LINUX) || defined(SUNOS4) || defined(SCO) || defined(UNIXWARE) || defined(RHAPSODY)
|
||||
#undef HAVE_LCHOWN
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Does getcwd() take NULL as the first argument and malloc
|
||||
* the result buffer?
|
||||
*/
|
||||
#if !defined(RHAPSODY)
|
||||
#define GETCWD_CAN_MALLOC
|
||||
#endif
|
||||
|
||||
#ifdef LINUX
|
||||
#include <getopt.h>
|
||||
#endif
|
||||
|
||||
#if defined(SCO) || defined(UNIXWARE) || defined(SNI) || defined(NCR) || defined(NEC)
|
||||
#if !defined(S_ISLNK) && defined(S_IFLNK)
|
||||
#define S_ISLNK(a) (((a) & S_IFMT) == S_IFLNK)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(SNI)
|
||||
extern int fchmod(int fildes, mode_t mode);
|
||||
#endif
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"usage: %s [-C cwd] [-L linkprefix] [-m mode] [-o owner] [-g group]\n"
|
||||
" %*s [-DdltR] file [file ...] directory\n",
|
||||
program, strlen(program), "");
|
||||
exit(2);
|
||||
}
|
||||
|
||||
static int
|
||||
mkdirs(char *path, mode_t mode)
|
||||
{
|
||||
char *cp;
|
||||
struct stat sb;
|
||||
|
||||
while (*path == '/' && path[1] == '/')
|
||||
path++;
|
||||
while ((cp = strrchr(path, '/')) && cp[1] == '\0')
|
||||
*cp = '\0';
|
||||
if (cp && cp != path) {
|
||||
*cp = '\0';
|
||||
if ((lstat(path, &sb) < 0 || !S_ISDIR(sb.st_mode)) &&
|
||||
mkdirs(path, mode) < 0) {
|
||||
return -1;
|
||||
}
|
||||
*cp = '/';
|
||||
}
|
||||
return mkdir(path, mode);
|
||||
}
|
||||
|
||||
static uid_t
|
||||
touid(char *owner)
|
||||
{
|
||||
struct passwd *pw;
|
||||
uid_t uid;
|
||||
char *cp;
|
||||
|
||||
pw = getpwnam(owner);
|
||||
if (pw)
|
||||
return pw->pw_uid;
|
||||
uid = strtol(owner, &cp, 0);
|
||||
if (uid == 0 && cp == owner)
|
||||
fail("cannot find uid for %s", owner);
|
||||
return uid;
|
||||
}
|
||||
|
||||
static gid_t
|
||||
togid(char *group)
|
||||
{
|
||||
struct group *gr;
|
||||
gid_t gid;
|
||||
char *cp;
|
||||
|
||||
gr = getgrnam(group);
|
||||
if (gr)
|
||||
return gr->gr_gid;
|
||||
gid = strtol(group, &cp, 0);
|
||||
if (gid == 0 && cp == group)
|
||||
fail("cannot find gid for %s", group);
|
||||
return gid;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int onlydir, dodir, dolink, dorelsymlink, dotimes, opt, len, lplen, tdlen, bnlen, exists, fromfd, tofd, cc, wc;
|
||||
mode_t mode = 0755;
|
||||
char *linkprefix, *owner, *group, *cp, *cwd, *todir, *toname, *name, *base, *linkname, *bp, buf[BUFSIZ];
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
struct stat sb, tosb;
|
||||
struct utimbuf utb;
|
||||
|
||||
program = argv[0];
|
||||
cwd = linkname = linkprefix = owner = group = 0;
|
||||
onlydir = dodir = dolink = dorelsymlink = dotimes = lplen = 0;
|
||||
|
||||
while ((opt = getopt(argc, argv, "C:DdlL:Rm:o:g:t")) != EOF) {
|
||||
switch (opt) {
|
||||
case 'C':
|
||||
cwd = optarg;
|
||||
break;
|
||||
case 'D':
|
||||
onlydir = 1;
|
||||
break;
|
||||
case 'd':
|
||||
dodir = 1;
|
||||
break;
|
||||
case 'l':
|
||||
dolink = 1;
|
||||
break;
|
||||
case 'L':
|
||||
linkprefix = optarg;
|
||||
lplen = strlen(linkprefix);
|
||||
dolink = 1;
|
||||
break;
|
||||
case 'R':
|
||||
dolink = dorelsymlink = 1;
|
||||
break;
|
||||
case 'm':
|
||||
mode = strtoul(optarg, &cp, 8);
|
||||
if (mode == 0 && cp == optarg)
|
||||
usage();
|
||||
break;
|
||||
case 'o':
|
||||
owner = optarg;
|
||||
break;
|
||||
case 'g':
|
||||
group = optarg;
|
||||
break;
|
||||
case 't':
|
||||
dotimes = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
}
|
||||
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
if (argc < 2 - onlydir)
|
||||
usage();
|
||||
|
||||
todir = argv[argc-1];
|
||||
if ((stat(todir, &sb) < 0 || !S_ISDIR(sb.st_mode)) &&
|
||||
mkdirs(todir, 0777) < 0) {
|
||||
fail("cannot make directory %s", todir);
|
||||
}
|
||||
if (onlydir)
|
||||
return 0;
|
||||
|
||||
if (!cwd) {
|
||||
#ifdef GETCWD_CAN_MALLOC
|
||||
cwd = getcwd(0, PATH_MAX);
|
||||
#else
|
||||
cwd = malloc(PATH_MAX + 1);
|
||||
cwd = getcwd(cwd, PATH_MAX);
|
||||
#endif
|
||||
}
|
||||
xchdir(todir);
|
||||
#ifdef GETCWD_CAN_MALLOC
|
||||
todir = getcwd(0, PATH_MAX);
|
||||
#else
|
||||
todir = malloc(PATH_MAX + 1);
|
||||
todir = getcwd(todir, PATH_MAX);
|
||||
#endif
|
||||
tdlen = strlen(todir);
|
||||
xchdir(cwd);
|
||||
tdlen = strlen(todir);
|
||||
|
||||
uid = owner ? touid(owner) : -1;
|
||||
gid = group ? togid(group) : -1;
|
||||
|
||||
while (--argc > 0) {
|
||||
name = *argv++;
|
||||
len = strlen(name);
|
||||
base = xbasename(name);
|
||||
bnlen = strlen(base);
|
||||
toname = (char*)xmalloc(tdlen + 1 + bnlen + 1);
|
||||
sprintf(toname, "%s/%s", todir, base);
|
||||
exists = (lstat(toname, &tosb) == 0);
|
||||
|
||||
if (dodir) {
|
||||
/* -d means create a directory, always */
|
||||
if (exists && !S_ISDIR(tosb.st_mode)) {
|
||||
(void) unlink(toname);
|
||||
exists = 0;
|
||||
}
|
||||
if (!exists && mkdir(toname, mode) < 0)
|
||||
fail("cannot make directory %s", toname);
|
||||
if ((owner || group) && chown(toname, uid, gid) < 0)
|
||||
fail("cannot change owner of %s", toname);
|
||||
} else if (dolink) {
|
||||
if (*name == '/') {
|
||||
/* source is absolute pathname, link to it directly */
|
||||
linkname = 0;
|
||||
} else {
|
||||
if (linkprefix) {
|
||||
/* -L implies -l and prefixes names with a $cwd arg. */
|
||||
len += lplen + 1;
|
||||
linkname = (char*)xmalloc(len + 1);
|
||||
sprintf(linkname, "%s/%s", linkprefix, name);
|
||||
} else if (dorelsymlink) {
|
||||
/* Symlink the relative path from todir to source name. */
|
||||
linkname = (char*)xmalloc(PATH_MAX);
|
||||
|
||||
if (*todir == '/') {
|
||||
/* todir is absolute: skip over common prefix. */
|
||||
lplen = relatepaths(todir, cwd, linkname);
|
||||
strcpy(linkname + lplen, name);
|
||||
} else {
|
||||
/* todir is named by a relative path: reverse it. */
|
||||
reversepath(todir, name, len, linkname);
|
||||
xchdir(cwd);
|
||||
}
|
||||
|
||||
len = strlen(linkname);
|
||||
}
|
||||
name = linkname;
|
||||
}
|
||||
|
||||
/* Check for a pre-existing symlink with identical content. */
|
||||
if (exists &&
|
||||
(!S_ISLNK(tosb.st_mode) ||
|
||||
readlink(toname, buf, sizeof buf) != len ||
|
||||
strncmp(buf, name, len) != 0)) {
|
||||
(void) (S_ISDIR(tosb.st_mode) ? rmdir : unlink)(toname);
|
||||
exists = 0;
|
||||
}
|
||||
if (!exists && symlink(name, toname) < 0)
|
||||
fail("cannot make symbolic link %s", toname);
|
||||
#ifdef HAVE_LCHOWN
|
||||
if ((owner || group) && lchown(toname, uid, gid) < 0)
|
||||
fail("cannot change owner of %s", toname);
|
||||
#endif
|
||||
|
||||
if (linkname) {
|
||||
free(linkname);
|
||||
linkname = 0;
|
||||
}
|
||||
} else {
|
||||
/* Copy from name to toname, which might be the same file. */
|
||||
fromfd = open(name, O_RDONLY);
|
||||
if (fromfd < 0 || fstat(fromfd, &sb) < 0)
|
||||
fail("cannot access %s", name);
|
||||
if (exists && (!S_ISREG(tosb.st_mode) || access(toname, W_OK) < 0))
|
||||
(void) (S_ISDIR(tosb.st_mode) ? rmdir : unlink)(toname);
|
||||
tofd = open(toname, O_CREAT | O_WRONLY, 0666);
|
||||
if (tofd < 0)
|
||||
fail("cannot create %s", toname);
|
||||
|
||||
bp = buf;
|
||||
while ((cc = read(fromfd, bp, sizeof buf)) > 0) {
|
||||
while ((wc = write(tofd, bp, cc)) > 0) {
|
||||
if ((cc -= wc) == 0)
|
||||
break;
|
||||
bp += wc;
|
||||
}
|
||||
if (wc < 0)
|
||||
fail("cannot write to %s", toname);
|
||||
}
|
||||
if (cc < 0)
|
||||
fail("cannot read from %s", name);
|
||||
|
||||
if (ftruncate(tofd, sb.st_size) < 0)
|
||||
fail("cannot truncate %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);
|
||||
}
|
||||
if (fchmod(tofd, mode) < 0)
|
||||
fail("cannot change mode of %s", toname);
|
||||
if ((owner || group) && fchown(tofd, uid, gid) < 0)
|
||||
fail("cannot change owner of %s", toname);
|
||||
|
||||
/* Must check for delayed (NFS) write errors on close. */
|
||||
if (close(tofd) < 0)
|
||||
fail("cannot write to %s", toname);
|
||||
close(fromfd);
|
||||
}
|
||||
|
||||
free(toname);
|
||||
}
|
||||
|
||||
free(cwd);
|
||||
free(todir);
|
||||
return 0;
|
||||
}
|
||||
219
mozilla/nsprpub/config/pathsub.c
Normal file
219
mozilla/nsprpub/config/pathsub.c
Normal file
@@ -0,0 +1,219 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
** Pathname subroutines.
|
||||
**
|
||||
** Brendan Eich, 8/29/95
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include "pathsub.h"
|
||||
#ifdef USE_REENTRANT_LIBC
|
||||
#include "libc_r.h"
|
||||
#endif /* USE_REENTRANT_LIBC */
|
||||
|
||||
char *program;
|
||||
|
||||
void
|
||||
fail(char *format, ...)
|
||||
{
|
||||
int error;
|
||||
va_list ap;
|
||||
|
||||
#ifdef USE_REENTRANT_LIBC
|
||||
R_STRERROR_INIT_R();
|
||||
#endif
|
||||
|
||||
error = errno;
|
||||
fprintf(stderr, "%s: ", program);
|
||||
va_start(ap, format);
|
||||
vfprintf(stderr, format, ap);
|
||||
va_end(ap);
|
||||
if (error)
|
||||
|
||||
#ifdef USE_REENTRANT_LIBC
|
||||
R_STRERROR_R(errno);
|
||||
fprintf(stderr, ": %s", r_strerror_r);
|
||||
#else
|
||||
fprintf(stderr, ": %s", strerror(errno));
|
||||
#endif
|
||||
|
||||
putc('\n', stderr);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
char *
|
||||
getcomponent(char *path, char *name)
|
||||
{
|
||||
if (*path == '\0')
|
||||
return 0;
|
||||
if (*path == '/') {
|
||||
*name++ = '/';
|
||||
} else {
|
||||
do {
|
||||
*name++ = *path++;
|
||||
} while (*path != '/' && *path != '\0');
|
||||
}
|
||||
*name = '\0';
|
||||
while (*path == '/')
|
||||
path++;
|
||||
return path;
|
||||
}
|
||||
|
||||
#ifdef UNIXWARE
|
||||
/* Sigh. The static buffer in Unixware's readdir is too small. */
|
||||
struct dirent * readdir(DIR *d)
|
||||
{
|
||||
static struct dirent *buf = NULL;
|
||||
#define MAX_PATH_LEN 1024
|
||||
|
||||
|
||||
if(buf == NULL)
|
||||
buf = (struct dirent *) malloc(sizeof(struct dirent) + MAX_PATH_LEN)
|
||||
;
|
||||
return(readdir_r(d, buf));
|
||||
}
|
||||
#endif
|
||||
|
||||
char *
|
||||
ino2name(ino_t ino, char *dir)
|
||||
{
|
||||
DIR *dp;
|
||||
struct dirent *ep;
|
||||
char *name;
|
||||
|
||||
dp = opendir("..");
|
||||
if (!dp)
|
||||
fail("cannot read parent directory");
|
||||
for (;;) {
|
||||
if (!(ep = readdir(dp)))
|
||||
fail("cannot find current directory");
|
||||
if (ep->d_ino == ino)
|
||||
break;
|
||||
}
|
||||
name = xstrdup(ep->d_name);
|
||||
closedir(dp);
|
||||
return name;
|
||||
}
|
||||
|
||||
void *
|
||||
xmalloc(size_t size)
|
||||
{
|
||||
void *p = malloc(size);
|
||||
if (!p)
|
||||
fail("cannot allocate %u bytes", size);
|
||||
return p;
|
||||
}
|
||||
|
||||
char *
|
||||
xstrdup(char *s)
|
||||
{
|
||||
return strcpy((char*)xmalloc(strlen(s) + 1), s);
|
||||
}
|
||||
|
||||
char *
|
||||
xbasename(char *path)
|
||||
{
|
||||
char *cp;
|
||||
|
||||
while ((cp = strrchr(path, '/')) && cp[1] == '\0')
|
||||
*cp = '\0';
|
||||
if (!cp) return path;
|
||||
return cp + 1;
|
||||
}
|
||||
|
||||
void
|
||||
xchdir(char *dir)
|
||||
{
|
||||
if (chdir(dir) < 0)
|
||||
fail("cannot change directory to %s", dir);
|
||||
}
|
||||
|
||||
int
|
||||
relatepaths(char *from, char *to, char *outpath)
|
||||
{
|
||||
char *cp, *cp2;
|
||||
int len;
|
||||
char buf[NAME_MAX];
|
||||
|
||||
assert(*from == '/' && *to == '/');
|
||||
for (cp = to, cp2 = from; *cp == *cp2; cp++, cp2++)
|
||||
if (*cp == '\0')
|
||||
break;
|
||||
while (cp[-1] != '/')
|
||||
cp--, cp2--;
|
||||
if (cp - 1 == to) {
|
||||
/* closest common ancestor is /, so use full pathname */
|
||||
len = strlen(strcpy(outpath, to));
|
||||
if (outpath[len] != '/') {
|
||||
outpath[len++] = '/';
|
||||
outpath[len] = '\0';
|
||||
}
|
||||
} else {
|
||||
len = 0;
|
||||
while ((cp2 = getcomponent(cp2, buf)) != 0) {
|
||||
strcpy(outpath + len, "../");
|
||||
len += 3;
|
||||
}
|
||||
while ((cp = getcomponent(cp, buf)) != 0) {
|
||||
sprintf(outpath + len, "%s/", buf);
|
||||
len += strlen(outpath + len);
|
||||
}
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
void
|
||||
reversepath(char *inpath, char *name, int len, char *outpath)
|
||||
{
|
||||
char *cp, *cp2;
|
||||
char buf[NAME_MAX];
|
||||
struct stat sb;
|
||||
|
||||
cp = strcpy(outpath + PATH_MAX - (len + 1), name);
|
||||
cp2 = inpath;
|
||||
while ((cp2 = getcomponent(cp2, buf)) != 0) {
|
||||
if (strcmp(buf, ".") == 0)
|
||||
continue;
|
||||
if (strcmp(buf, "..") == 0) {
|
||||
if (stat(".", &sb) < 0)
|
||||
fail("cannot stat current directory");
|
||||
name = ino2name(sb.st_ino, "..");
|
||||
len = strlen(name);
|
||||
cp -= len + 1;
|
||||
strcpy(cp, name);
|
||||
cp[len] = '/';
|
||||
free(name);
|
||||
xchdir("..");
|
||||
} else {
|
||||
cp -= 3;
|
||||
strncpy(cp, "../", 3);
|
||||
xchdir(buf);
|
||||
}
|
||||
}
|
||||
strcpy(outpath, cp);
|
||||
}
|
||||
59
mozilla/nsprpub/config/pathsub.h
Normal file
59
mozilla/nsprpub/config/pathsub.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef pathsub_h___
|
||||
#define pathsub_h___
|
||||
/*
|
||||
** Pathname subroutines.
|
||||
**
|
||||
** Brendan Eich, 8/29/95
|
||||
*/
|
||||
#include <limits.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#if SUNOS4
|
||||
#include "../pr/include/md/sunos4.h"
|
||||
#endif
|
||||
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 1024
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Just prevent stupidity
|
||||
*/
|
||||
#undef NAME_MAX
|
||||
#define NAME_MAX 256
|
||||
|
||||
extern char *program;
|
||||
|
||||
extern void fail(char *format, ...);
|
||||
extern char *getcomponent(char *path, char *name);
|
||||
extern char *ino2name(ino_t ino, char *dir);
|
||||
extern void *xmalloc(size_t size);
|
||||
extern char *xstrdup(char *s);
|
||||
extern char *xbasename(char *path);
|
||||
extern void xchdir(char *dir);
|
||||
|
||||
/* Relate absolute pathnames from and to returning the result in outpath. */
|
||||
extern int relatepaths(char *from, char *to, char *outpath);
|
||||
|
||||
/* XXX changes current working directory -- caveat emptor */
|
||||
extern void reversepath(char *inpath, char *name, int len, char *outpath);
|
||||
|
||||
#endif /* pathsub_h___ */
|
||||
18
mozilla/nsprpub/config/prmkdir.bat
Executable file
18
mozilla/nsprpub/config/prmkdir.bat
Executable file
@@ -0,0 +1,18 @@
|
||||
REM
|
||||
REM The contents of this file are subject to the Netscape Public License
|
||||
REM Version 1.0 (the "NPL"); you may not use this file except in
|
||||
REM compliance with the NPL. You may obtain a copy of the NPL at
|
||||
REM http://www.mozilla.org/NPL/
|
||||
REM
|
||||
REM Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
REM WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
REM for the specific language governing rights and limitations under the
|
||||
REM NPL.
|
||||
REM
|
||||
REM The Initial Developer of this code under the NPL is Netscape
|
||||
REM Communications Corporation. Portions created by Netscape are
|
||||
REM Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
REM Reserved.
|
||||
REM
|
||||
|
||||
mkdir %1
|
||||
367
mozilla/nsprpub/config/rules.mk
Normal file
367
mozilla/nsprpub/config/rules.mk
Normal file
@@ -0,0 +1,367 @@
|
||||
#! gmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# We have a 4 pass build process:
|
||||
#
|
||||
# Pass 1. export - Create generated headers and stubs. Publish public headers to
|
||||
# dist/<arch>/include.
|
||||
#
|
||||
# Pass 2. libs - Create libraries. Publish libraries to dist/<arch>/lib.
|
||||
#
|
||||
# Pass 3. all - Create programs.
|
||||
#
|
||||
# Pass 4. install - Publish programs to dist/<arch>/bin.
|
||||
#
|
||||
# Parameters to this makefile (set these before including):
|
||||
#
|
||||
# a)
|
||||
# TARGETS -- the target to create
|
||||
# (defaults to $LIBRARY $PROGRAM)
|
||||
# b)
|
||||
# DIRS -- subdirectories for make to recurse on
|
||||
# (the 'all' rule builds $TARGETS $DIRS)
|
||||
# c)
|
||||
# CSRCS -- .c files to compile
|
||||
# (used to define $OBJS)
|
||||
# d)
|
||||
# PROGRAM -- the target program name to create from $OBJS
|
||||
# ($OBJDIR automatically prepended to it)
|
||||
# e)
|
||||
# LIBRARY -- the target library name to create from $OBJS
|
||||
# ($OBJDIR automatically prepended to it)
|
||||
#
|
||||
################################################################################
|
||||
|
||||
ifndef NSPR_CONFIG_MK
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
endif
|
||||
|
||||
#
|
||||
# This makefile contains rules for building the following kinds of
|
||||
# libraries:
|
||||
# - LIBRARY: a static (archival) library
|
||||
# - SHARED_LIBRARY: a shared (dynamic link) library
|
||||
# - IMPORT_LIBRARY: an import library, used only on Windows and OS/2
|
||||
# - PURE_LIBRARY: a library for Purify
|
||||
#
|
||||
# The names of these libraries can be generated by simply specifying
|
||||
# LIBRARY_NAME and LIBRARY_VERSION.
|
||||
#
|
||||
|
||||
ifdef LIBRARY_NAME
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
|
||||
#
|
||||
# Win16 and OS/2 require library names conforming to the 8.3 rule.
|
||||
# other platforms do not.
|
||||
#
|
||||
ifeq (,$(filter-out WIN16 OS2,$(OS_TARGET)))
|
||||
LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)_s.lib
|
||||
SHARED_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION).dll
|
||||
IMPORT_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION).lib
|
||||
else
|
||||
LIBRARY = $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION)_s.lib
|
||||
SHARED_LIBRARY = $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).dll
|
||||
IMPORT_LIBRARY = $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).lib
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
LIBRARY = $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(LIB_SUFFIX)
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
|
||||
SHARED_LIBRARY = $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION)_shr.a
|
||||
else
|
||||
SHARED_LIBRARY = $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
|
||||
endif
|
||||
ifdef HAVE_PURIFY
|
||||
ifdef DSO_BACKEND
|
||||
PURE_LIBRARY = $(OBJDIR)/purelib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
|
||||
else
|
||||
PURE_LIBRARY = $(OBJDIR)/purelib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(LIB_SUFFIX)
|
||||
endif
|
||||
endif
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
ifndef TARGETS
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY)
|
||||
else
|
||||
TARGETS = $(LIBRARY) $(SHARED_LIBRARY)
|
||||
ifdef HAVE_PURIFY
|
||||
TARGETS += $(PURE_LIBRARY)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# OBJS is the list of object files. It can be constructed by
|
||||
# specifying CSRCS (list of C source files) and ASFILES (list
|
||||
# of assembly language source files).
|
||||
#
|
||||
|
||||
ifndef OBJS
|
||||
OBJS = $(addprefix $(OBJDIR)/,$(CSRCS:.c=.$(OBJ_SUFFIX))) \
|
||||
$(addprefix $(OBJDIR)/,$(ASFILES:.s=.$(OBJ_SUFFIX)))
|
||||
endif
|
||||
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
comma := ,
|
||||
empty :=
|
||||
space := $(empty) $(empty)
|
||||
W16OBJS = $(subst $(space),$(comma)$(space),$(strip $(OBJS)))
|
||||
W16TEMP =$(OS_LIBS) $(EXTRA_LIBS)
|
||||
ifeq ($(strip $(W16TEMP)),)
|
||||
W16LIBS =
|
||||
else
|
||||
W16LIBS = library $(subst $(space),$(comma)$(space),$(strip $(W16TEMP)))
|
||||
endif
|
||||
W16DEF = $(notdir $(basename $(SHARED_LIBRARY))).DEF
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifneq ($(OS_TARGET), WIN16)
|
||||
ifneq ($(OS_TARGET), OS2)
|
||||
OBJS += $(RES)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ALL_TRASH = $(TARGETS) $(OBJS) $(OBJDIR) LOGS TAGS $(GARBAGE) \
|
||||
$(NOSUCHFILE) \
|
||||
so_locations
|
||||
|
||||
ifdef DIRS
|
||||
LOOP_OVER_DIRS = \
|
||||
@for d in $(DIRS); do \
|
||||
if test -d $$d; then \
|
||||
set -e; \
|
||||
echo "cd $$d; $(MAKE) $@"; \
|
||||
$(MAKE) -C $$d $@; \
|
||||
set +e; \
|
||||
else \
|
||||
echo "Skipping non-directory $$d..."; \
|
||||
fi; \
|
||||
done
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
|
||||
all:: export libs install
|
||||
|
||||
export::
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
libs::
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
install::
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
clean::
|
||||
rm -rf $(OBJS) so_locations $(NOSUCHFILE)
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
clobber::
|
||||
rm -f $(OBJS) $(TARGETS) $(GARBAGE) so_locations $(NOSUCHFILE)
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
realclean clobber_all::
|
||||
rm -rf $(wildcard *.OBJ *.OBJD) dist $(ALL_TRASH)
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
release:: export
|
||||
ifdef RELEASE_LIBS
|
||||
@echo "Copying libraries to release directory"
|
||||
@if test -z "$(BUILD_NUMBER)"; then \
|
||||
echo "BUILD_NUMBER must be defined"; \
|
||||
false; \
|
||||
fi
|
||||
@if test ! -d $(RELEASE_LIB_DIR); then \
|
||||
rm -f $(RELEASE_LIB_DIR); \
|
||||
$(NSINSTALL) -D $(RELEASE_LIB_DIR);\
|
||||
fi
|
||||
cp $(RELEASE_LIBS) $(RELEASE_LIB_DIR)
|
||||
endif
|
||||
ifdef RELEASE_HEADERS
|
||||
@echo "Copying header files to release directory"
|
||||
@if test -z "$(BUILD_NUMBER)"; then \
|
||||
echo "BUILD_NUMBER must be defined"; \
|
||||
false; \
|
||||
fi
|
||||
@if test ! -d $(RELEASE_HEADERS_DEST); then \
|
||||
rm -rf $(RELEASE_HEADERS_DEST); \
|
||||
$(NSINSTALL) -D $(RELEASE_HEADERS_DEST);\
|
||||
fi
|
||||
cp $(RELEASE_HEADERS) $(RELEASE_HEADERS_DEST)
|
||||
endif
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
alltags:
|
||||
rm -f TAGS tags
|
||||
find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs etags -a
|
||||
find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs ctags -a
|
||||
|
||||
$(NFSPWD):
|
||||
cd $(@D); $(MAKE) $(@F)
|
||||
|
||||
$(PROGRAM): $(OBJS)
|
||||
@$(MAKE_OBJDIR)
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
$(CC) $(OBJS) -Fe$@ -link $(LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS)
|
||||
else
|
||||
$(CC) -o $@ $(CFLAGS) $(OBJS) $(LDFLAGS)
|
||||
endif
|
||||
|
||||
$(LIBRARY): $(OBJS)
|
||||
@$(MAKE_OBJDIR)
|
||||
rm -f $@
|
||||
$(AR) $(OBJS) $(AR_EXTRA_ARGS)
|
||||
$(RANLIB) $@
|
||||
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
$(IMPORT_LIBRARY): $(SHARED_LIBRARY)
|
||||
wlib $(OS_LIB_FLAGS) $@ +$(SHARED_LIBRARY)
|
||||
endif
|
||||
|
||||
ifeq ($(OS_TARGET), OS2)
|
||||
$(IMPORT_LIBRARY): $(SHARED_LIBRARY)
|
||||
$(IMPLIB) $@ $(SHARED_LIBRARY).def
|
||||
endif
|
||||
|
||||
$(SHARED_LIBRARY): $(OBJS)
|
||||
@$(MAKE_OBJDIR)
|
||||
rm -f $@
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
|
||||
echo "#!" > $(OBJDIR)/lib$(LIBRARY_NAME)_syms
|
||||
nm -B -C -g $(OBJS) \
|
||||
| awk '/ [T,D] / {print $$3}' \
|
||||
| sed -e 's/^\.//' \
|
||||
| sort -u >> $(OBJDIR)/lib$(LIBRARY_NAME)_syms
|
||||
$(LD) $(XCFLAGS) -o $@ $(OBJS) -bE:$(OBJDIR)/lib$(LIBRARY_NAME)_syms \
|
||||
-bM:SRE -bnoentry $(OS_LIBS) $(EXTRA_LIBS)
|
||||
|
||||
else
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
echo system windows dll initinstance >w16link
|
||||
echo option map >>w16link
|
||||
echo option oneautodata >>w16link
|
||||
echo option heapsize=32K >>w16link
|
||||
echo option $(OS_DLL_OPTION) >>w16link
|
||||
echo debug $(DEBUGTYPE) all >>w16link
|
||||
echo name $@ >>w16link
|
||||
echo file >>w16link
|
||||
echo $(W16OBJS) >>w16link
|
||||
echo $(W16IMPORTS) >>w16link
|
||||
echo $(W16LIBS) >>w16link
|
||||
echo $(W16_EXPORTS) >>w16link
|
||||
echo libfile libentry >>w16link
|
||||
$(LINK) @w16link.
|
||||
rm w16link
|
||||
else
|
||||
ifeq ($(OS_TARGET), OS2)
|
||||
# append ( >> ) doesn't seem to be working under OS/2 gmake. Run through OS/2 shell instead.
|
||||
@cmd /C "echo LIBRARY $(notdir $(basename $(SHARED_LIBRARY))) INITINSTANCE TERMINSTANCE >$@.def"
|
||||
@cmd /C "echo PROTMODE >>$@.def"
|
||||
@cmd /C "echo CODE LOADONCALL MOVEABLE DISCARDABLE >>$@.def"
|
||||
@cmd /C "echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >>$@.def"
|
||||
@cmd /C "echo EXPORTS >>$@.def"
|
||||
@cmd /C "$(FILTER) -B -P $(LIBRARY) >> $@.def"
|
||||
$(LINK_DLL) -MAP $(DLLBASE) $(OS_LIBS) $(EXTRA_LIBS) $(OBJS) $@.def
|
||||
else
|
||||
$(LINK_DLL) -MAP $(DLLBASE) $(OS_LIBS) $(EXTRA_LIBS) $(OBJS)
|
||||
endif
|
||||
endif
|
||||
else
|
||||
$(MKSHLIB) -o $@ $(OBJS) $(EXTRA_LIBS) $(OS_LIBS)
|
||||
endif
|
||||
endif
|
||||
|
||||
$(PURE_LIBRARY):
|
||||
rm -f $@
|
||||
ifneq ($(OS_ARCH), WINNT)
|
||||
$(AR) $(OBJS)
|
||||
endif
|
||||
$(RANLIB) $@
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
$(RES): $(RESNAME)
|
||||
@$(MAKE_OBJDIR)
|
||||
ifeq ($(OS_TARGET),OS2)
|
||||
$(RC) -DOS2 -r $(RESNAME) $(RES)
|
||||
else
|
||||
$(RC) -Fo$(RES) $(RESNAME)
|
||||
endif
|
||||
@echo $(RES) finished
|
||||
endif
|
||||
|
||||
$(OBJDIR)/%.$(OBJ_SUFFIX): %.cpp
|
||||
@$(MAKE_OBJDIR)
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
$(CCC) -Fo$@ -c $(CFLAGS) $<
|
||||
else
|
||||
$(CCC) -o $@ -c $(CFLAGS) $<
|
||||
endif
|
||||
|
||||
WCCFLAGS1 = $(subst /,\\,$(CFLAGS))
|
||||
WCCFLAGS2 = $(subst -I,-i=,$(WCCFLAGS1))
|
||||
WCCFLAGS3 = $(subst -D,-d,$(WCCFLAGS2))
|
||||
$(OBJDIR)/%.$(OBJ_SUFFIX): %.c
|
||||
@$(MAKE_OBJDIR)
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
# $(MOD_DEPTH)/config/w16opt $(WCCFLAGS3)
|
||||
echo $(WCCFLAGS3) >w16wccf
|
||||
$(CC) -zq -fo$(OBJDIR)\\$*.$(OBJ_SUFFIX) @w16wccf $*.c
|
||||
rm w16wccf
|
||||
else
|
||||
$(CC) -Fo$@ -c $(CFLAGS) $*.c
|
||||
endif
|
||||
else
|
||||
$(CC) -o $@ -c $(CFLAGS) $*.c
|
||||
endif
|
||||
|
||||
$(OBJDIR)/%.$(OBJ_SUFFIX): %.s
|
||||
@$(MAKE_OBJDIR)
|
||||
$(AS) -o $@ $(ASFLAGS) -c $*.s
|
||||
|
||||
%.i: %.c
|
||||
$(CC) -C -E $(CFLAGS) $< > $*.i
|
||||
|
||||
%: %.pl
|
||||
rm -f $@; cp $*.pl $@; chmod +x $@
|
||||
|
||||
################################################################################
|
||||
# Special gmake rules.
|
||||
################################################################################
|
||||
|
||||
#
|
||||
# Re-define the list of default suffixes, so gmake won't have to churn through
|
||||
# hundreds of built-in suffix rules for stuff we don't need.
|
||||
#
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .a .$(OBJ_SUFFIX) .c .cpp .s .h .i .pl
|
||||
|
||||
#
|
||||
# Fake targets. Always run these rules, even if a file/directory with that
|
||||
# name already exists.
|
||||
#
|
||||
.PHONY: all alltags clean export install libs realclean release
|
||||
99
mozilla/nsprpub/config/win16.mk
Normal file
99
mozilla/nsprpub/config/win16.mk
Normal file
@@ -0,0 +1,99 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# win16_3.11.mk -- Make configuration for Win16
|
||||
#
|
||||
# This file configures gmake to build the Win16 variant of
|
||||
# NSPR 2.0. This file has the function of two files commonly
|
||||
# used on other platforms, for example: winnt.mk and
|
||||
# winnt4.0.mk. ... The packaging is easier and there is only
|
||||
# one variant of the Win16 target.
|
||||
#
|
||||
# Win16 is built using the Watcom C/C++ version 11.0
|
||||
# compiler. You gotta set up the compiler first. Follow the
|
||||
# directions in the manual (Ha! ... really, its not a
|
||||
# problem). The Watcom compiler depends on a few environment
|
||||
# variables; these environment variables define where the
|
||||
# compiler components are installed; they must be set before
|
||||
# running the make.
|
||||
#
|
||||
# Notes:
|
||||
# OS_CFLAGS is the command line options for the compiler when
|
||||
# building the .DLL object files.
|
||||
# OS_EXE_CFLAGS is the command line options for the compiler
|
||||
# when building the .EXE object files; this is for the test
|
||||
# programs.
|
||||
# the macro OS_CFLAGS is set to OS_EXE_CFLAGS inside of the
|
||||
# makefile for the pr/tests directory. ... Hack.
|
||||
#
|
||||
# USE_WATCOM_DEBUG_DATA environment variable causes the
|
||||
# watcom compiler flag to be set to -hw (otherwise
|
||||
# it is set to -hc (codeview debug data)) for debug builds.
|
||||
#
|
||||
|
||||
# -- configuration -----------------------------------------
|
||||
|
||||
CC = wcc
|
||||
CCC = wcl
|
||||
LINK = wlink
|
||||
AR = wlib -q $@
|
||||
RC = wrc.exe /r /dWIN16=1 /bt=windows
|
||||
RANLIB = echo
|
||||
BSDECHO = echo
|
||||
NSINSTALL = nsinstall
|
||||
INSTALL = $(NSINSTALL)
|
||||
MAKE_OBJDIR = mkdir $(OBJDIR)
|
||||
|
||||
XP_DEFINE = -DXP_PC
|
||||
OBJ_SUFFIX = obj
|
||||
LIB_SUFFIX = lib
|
||||
DLL_SUFFIX = dll
|
||||
|
||||
ifdef BUILD_OPT
|
||||
OBJDIR_TAG = _O
|
||||
OPTIMIZER = -oneatx -oh -oi -ei -3 -fpi87 -fp3 -s
|
||||
else
|
||||
ifdef USE_WATCOM_DEBUG_DATA
|
||||
OPTIMIZER = -d2 -hw -s -DDEBUG
|
||||
DEBUGTYPE = watcom
|
||||
else
|
||||
OPTIMIZER = -d2 -hc -s -DDEBUG
|
||||
DEBUGTYPE = codeview
|
||||
endif
|
||||
OBJDIR_TAG = _D
|
||||
endif
|
||||
|
||||
# XXX FIXME: I doubt we use this. It is redundant with
|
||||
# SHARED_LIBRARY.
|
||||
ifdef DLL
|
||||
DLL := $(addprefix $(OBJDIR)/, $(DLL))
|
||||
endif
|
||||
|
||||
|
||||
CPU_ARCH = x386
|
||||
OS_CFLAGS = -ml -3 -bd -zc -zu -bt=windows -d_X86_ -dWIN16 -d_WINDLL
|
||||
OS_EXE_CFLAGS = -ml -3 -bt=windows -d_X86_ -dWIN16
|
||||
OS_LIB_FLAGS = -c -iro -n
|
||||
|
||||
# Name of the binary code directories
|
||||
OBJDIR_NAME = $(OS_CONFIG)$(OBJDIR_TAG).OBJ
|
||||
|
||||
OS_DLL_OPTION = CASEEXACT
|
||||
OS_DLLFLAGS =
|
||||
OS_LIBS =
|
||||
W16_EXPORTS = #
|
||||
32
mozilla/nsprpub/lib/Makefile
Normal file
32
mozilla/nsprpub/lib/Makefile
Normal file
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ..
|
||||
|
||||
export NSPR20=1
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
DIRS = ds libc msgc
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
export:: $(TARGETS)
|
||||
|
||||
install:: export
|
||||
108
mozilla/nsprpub/lib/ds/Makefile
Normal file
108
mozilla/nsprpub/lib/ds/Makefile
Normal file
@@ -0,0 +1,108 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
# Disable optimization of the nspr on SunOS4.1.3
|
||||
ifeq ($(OS_ARCH),SunOS)
|
||||
ifeq ($(OS_RELEASE),4.1.3_U1)
|
||||
OPTIMIZER =
|
||||
endif
|
||||
endif
|
||||
|
||||
INCLUDES = -I$(DIST)/include/private -I$(DIST)/include
|
||||
|
||||
CSRCS = \
|
||||
plarena.c \
|
||||
plevent.c \
|
||||
plhash.c \
|
||||
$(NULL)
|
||||
|
||||
HEADERS = \
|
||||
plarenas.h \
|
||||
plarena.h \
|
||||
plevent.h \
|
||||
plhash.h \
|
||||
$(NULL)
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq (,$(filter-out WIN16 OS2,$(OS_TARGET)))
|
||||
# OS_CFLAGS = $(OS_EXE_CFLAGS)
|
||||
EXTRA_LIBS = $(DIST)/lib/nspr$(MOD_VERSION).lib
|
||||
else
|
||||
DLLBASE=/BASE:0x30000000
|
||||
RES=$(OBJDIR)/ds.res
|
||||
RESNAME=$(MOD_DEPTH)/pr/src/nspr.rc
|
||||
OS_LIBS = user32.lib
|
||||
EXTRA_LIBS = $(DIST)/lib/libnspr$(MOD_VERSION).lib
|
||||
endif
|
||||
else
|
||||
ifeq ($(OS_ARCH), AIX)
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
OS_LIBS += -lc
|
||||
else
|
||||
OS_LIBS += -lc_r
|
||||
endif
|
||||
endif
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
|
||||
EXTRA_LIBS = -L$(DIST)/lib -lnspr$(MOD_VERSION)_shr
|
||||
else
|
||||
EXTRA_LIBS = -L$(DIST)/lib -lnspr$(MOD_VERSION)
|
||||
endif
|
||||
endif
|
||||
|
||||
# On NCR and SCO_SV, we can't link with extra libraries when
|
||||
# we build a shared library. If we do so, the linker doesn't
|
||||
# complain, but we would run into weird problems at run-time.
|
||||
# Therefore on these platforms, we link just the .o files.
|
||||
ifeq ($(OS_ARCH),NCR)
|
||||
EXTRA_LIBS =
|
||||
endif
|
||||
ifeq ($(OS_ARCH),SCO_SV)
|
||||
EXTRA_LIBS =
|
||||
endif
|
||||
|
||||
LIBRARY_NAME = plds
|
||||
LIBRARY_VERSION = $(MOD_VERSION)
|
||||
|
||||
RELEASE_HEADERS = $(HEADERS)
|
||||
RELEASE_HEADERS_DEST = $(RELEASE_INCLUDE_DIR)
|
||||
RELEASE_LIBS = $(TARGETS)
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
#
|
||||
# The Client build wants the shared libraries in $(DIST)/bin,
|
||||
# so we also install them there.
|
||||
#
|
||||
|
||||
export:: $(TARGETS)
|
||||
$(INSTALL) -m 444 $(HEADERS) $(DIST)/include
|
||||
$(INSTALL) -m 444 $(TARGETS) $(DIST)/lib
|
||||
$(INSTALL) -m 444 $(SHARED_LIBRARY) $(DIST)/bin
|
||||
ifeq ($(MOZ_BITS),16)
|
||||
$(INSTALL) -m 444 $(HEADERS) $(MOZ_INCL)
|
||||
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/lib
|
||||
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/bin
|
||||
endif
|
||||
|
||||
install:: export
|
||||
|
||||
299
mozilla/nsprpub/lib/ds/plarena.c
Normal file
299
mozilla/nsprpub/lib/ds/plarena.c
Normal file
@@ -0,0 +1,299 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Lifetime-based fast allocation, inspired by much prior art, including
|
||||
* "Fast Allocation and Deallocation of Memory Based on Object Lifetimes"
|
||||
* David R. Hanson, Software -- Practice and Experience, Vol. 20(1).
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "plarena.h"
|
||||
#include "prmem.h"
|
||||
#include "prbit.h"
|
||||
#include "prlog.h"
|
||||
|
||||
static PLArena *arena_freelist;
|
||||
|
||||
#ifdef PL_ARENAMETER
|
||||
static PLArenaStats *arena_stats_list;
|
||||
|
||||
#define COUNT(pool,what) (pool)->stats.what++
|
||||
#else
|
||||
#define COUNT(pool,what) /* nothing */
|
||||
#endif
|
||||
|
||||
#define PL_ARENA_DEFAULT_ALIGN sizeof(double)
|
||||
|
||||
PR_IMPLEMENT(void) PL_InitArenaPool(
|
||||
PLArenaPool *pool, const char *name, PRUint32 size, PRUint32 align)
|
||||
{
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (name)
|
||||
#endif
|
||||
|
||||
if (align == 0)
|
||||
align = PL_ARENA_DEFAULT_ALIGN;
|
||||
pool->mask = PR_BITMASK(PR_CeilingLog2(align));
|
||||
pool->first.next = NULL;
|
||||
pool->first.base = pool->first.avail = pool->first.limit =
|
||||
(PRUword)PL_ARENA_ALIGN(pool, &pool->first + 1);
|
||||
pool->current = &pool->first;
|
||||
pool->arenasize = size;
|
||||
#ifdef PL_ARENAMETER
|
||||
memset(&pool->stats, 0, sizeof pool->stats);
|
||||
pool->stats.name = strdup(name);
|
||||
pool->stats.next = arena_stats_list;
|
||||
arena_stats_list = &pool->stats;
|
||||
#endif
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb)
|
||||
{
|
||||
PLArena **ap, *a, *b;
|
||||
PRUint32 sz;
|
||||
void *p;
|
||||
|
||||
PR_ASSERT((nb & pool->mask) == 0);
|
||||
#if defined(WIN16)
|
||||
if (nb >= 60000U)
|
||||
return 0;
|
||||
#endif /* WIN16 */
|
||||
ap = &arena_freelist;
|
||||
for (a = pool->current; a->avail + nb > a->limit; pool->current = a) {
|
||||
if (a->next) { /* move to next arena */
|
||||
a = a->next;
|
||||
continue;
|
||||
}
|
||||
while ((b = *ap) != 0) { /* reclaim a free arena */
|
||||
if (b->limit - b->base == pool->arenasize) {
|
||||
*ap = b->next;
|
||||
b->next = 0;
|
||||
a = a->next = b;
|
||||
COUNT(pool, nreclaims);
|
||||
goto claim;
|
||||
}
|
||||
ap = &b->next;
|
||||
}
|
||||
sz = PR_MAX(pool->arenasize, nb); /* allocate a new arena */
|
||||
sz += sizeof *a + pool->mask; /* header and alignment slop */
|
||||
b = (PLArena*)PR_MALLOC(sz);
|
||||
if (!b)
|
||||
return 0;
|
||||
a = a->next = b;
|
||||
a->next = 0;
|
||||
a->limit = (PRUword)a + sz;
|
||||
PL_COUNT_ARENA(pool,++);
|
||||
COUNT(pool, nmallocs);
|
||||
claim:
|
||||
a->base = a->avail = (PRUword)PL_ARENA_ALIGN(pool, a + 1);
|
||||
}
|
||||
p = (void *)a->avail;
|
||||
a->avail += nb;
|
||||
return p;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void *) PL_ArenaGrow(
|
||||
PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr)
|
||||
{
|
||||
void *newp;
|
||||
|
||||
PL_ARENA_ALLOCATE(newp, pool, size + incr);
|
||||
if (newp)
|
||||
memcpy(newp, p, size);
|
||||
return newp;
|
||||
}
|
||||
|
||||
/*
|
||||
* Free tail arenas linked after head, which may not be the true list head.
|
||||
* Reset pool->current to point to head in case it pointed at a tail arena.
|
||||
*/
|
||||
static void FreeArenaList(PLArenaPool *pool, PLArena *head, PRBool reallyFree)
|
||||
{
|
||||
PLArena **ap, *a;
|
||||
|
||||
ap = &head->next;
|
||||
a = *ap;
|
||||
if (!a)
|
||||
return;
|
||||
|
||||
#ifdef DEBUG
|
||||
do {
|
||||
PR_ASSERT(a->base <= a->avail && a->avail <= a->limit);
|
||||
a->avail = a->base;
|
||||
PL_CLEAR_UNUSED(a);
|
||||
} while ((a = a->next) != 0);
|
||||
a = *ap;
|
||||
#endif
|
||||
|
||||
if (reallyFree) {
|
||||
do {
|
||||
*ap = a->next;
|
||||
PL_CLEAR_ARENA(a);
|
||||
PL_COUNT_ARENA(pool,--);
|
||||
PR_DELETE(a);
|
||||
} while ((a = *ap) != 0);
|
||||
} else {
|
||||
/* Insert the whole arena chain at the front of the freelist. */
|
||||
do {
|
||||
ap = &(*ap)->next;
|
||||
} while (*ap);
|
||||
*ap = arena_freelist;
|
||||
arena_freelist = a;
|
||||
head->next = 0;
|
||||
}
|
||||
|
||||
pool->current = head;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_ArenaRelease(PLArenaPool *pool, char *mark)
|
||||
{
|
||||
PLArena *a;
|
||||
|
||||
for (a = pool->first.next; a; a = a->next) {
|
||||
if (PR_UPTRDIFF(mark, a) < PR_UPTRDIFF(a->avail, a)) {
|
||||
a->avail = (PRUword)PL_ARENA_ALIGN(pool, mark);
|
||||
FreeArenaList(pool, a, PR_TRUE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_FreeArenaPool(PLArenaPool *pool)
|
||||
{
|
||||
FreeArenaList(pool, &pool->first, PR_FALSE);
|
||||
COUNT(pool, ndeallocs);
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_FinishArenaPool(PLArenaPool *pool)
|
||||
{
|
||||
FreeArenaList(pool, &pool->first, PR_TRUE);
|
||||
#ifdef PL_ARENAMETER
|
||||
{
|
||||
PLArenaStats *stats, **statsp;
|
||||
|
||||
if (pool->stats.name)
|
||||
PR_DELETE(pool->stats.name);
|
||||
for (statsp = &arena_stats_list; (stats = *statsp) != 0;
|
||||
statsp = &stats->next) {
|
||||
if (stats == &pool->stats) {
|
||||
*statsp = stats->next;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_CompactArenaPool(PLArenaPool *ap)
|
||||
{
|
||||
#if XP_MAC
|
||||
#pragma unused (ap)
|
||||
#if 0
|
||||
PRArena *curr = &(ap->first);
|
||||
while (curr) {
|
||||
reallocSmaller(curr, curr->avail - (uprword_t)curr);
|
||||
curr->limit = curr->avail;
|
||||
curr = curr->next;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_ArenaFinish()
|
||||
{
|
||||
PLArena *a, *next;
|
||||
|
||||
for (a = arena_freelist; a; a = next) {
|
||||
next = a->next;
|
||||
PR_DELETE(a);
|
||||
}
|
||||
arena_freelist = NULL;
|
||||
}
|
||||
|
||||
#ifdef PL_ARENAMETER
|
||||
PR_IMPLEMENT(void) PL_ArenaCountAllocation(PLArenaPool *pool, PRUint32 nb)
|
||||
{
|
||||
pool->stats.nallocs++;
|
||||
pool->stats.nbytes += nb;
|
||||
if (nb > pool->stats.maxalloc)
|
||||
pool->stats.maxalloc = nb;
|
||||
pool->stats.variance += nb * nb;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_ArenaCountInplaceGrowth(
|
||||
PLArenaPool *pool, PRUint32 size, PRUint32 incr)
|
||||
{
|
||||
pool->stats.ninplace++;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_ArenaCountGrowth(
|
||||
PLArenaPool *pool, PRUint32 size, PRUint32 incr)
|
||||
{
|
||||
pool->stats.ngrows++;
|
||||
pool->stats.nbytes += incr;
|
||||
pool->stats.variance -= size * size;
|
||||
size += incr;
|
||||
if (size > pool->stats.maxalloc)
|
||||
pool->stats.maxalloc = size;
|
||||
pool->stats.variance += size * size;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_ArenaCountRelease(PLArenaPool *pool, char *mark)
|
||||
{
|
||||
pool->stats.nreleases++;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PL_ArenaCountRetract(PLArenaPool *pool, char *mark)
|
||||
{
|
||||
pool->stats.nfastrels++;
|
||||
}
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
PR_IMPLEMENT(void) PL_DumpArenaStats(FILE *fp)
|
||||
{
|
||||
PLArenaStats *stats;
|
||||
double mean, variance;
|
||||
|
||||
for (stats = arena_stats_list; stats; stats = stats->next) {
|
||||
if (stats->nallocs != 0) {
|
||||
mean = (double)stats->nbytes / stats->nallocs;
|
||||
variance = fabs(stats->variance / stats->nallocs - mean * mean);
|
||||
} else {
|
||||
mean = variance = 0;
|
||||
}
|
||||
|
||||
fprintf(fp, "\n%s allocation statistics:\n", stats->name);
|
||||
fprintf(fp, " number of arenas: %u\n", stats->narenas);
|
||||
fprintf(fp, " number of allocations: %u\n", stats->nallocs);
|
||||
fprintf(fp, " number of free arena reclaims: %u\n", stats->nreclaims);
|
||||
fprintf(fp, " number of malloc calls: %u\n", stats->nmallocs);
|
||||
fprintf(fp, " number of deallocations: %u\n", stats->ndeallocs);
|
||||
fprintf(fp, " number of allocation growths: %u\n", stats->ngrows);
|
||||
fprintf(fp, " number of in-place growths: %u\n", stats->ninplace);
|
||||
fprintf(fp, "number of released allocations: %u\n", stats->nreleases);
|
||||
fprintf(fp, " number of fast releases: %u\n", stats->nfastrels);
|
||||
fprintf(fp, " total bytes allocated: %u\n", stats->nbytes);
|
||||
fprintf(fp, " mean allocation size: %g\n", mean);
|
||||
fprintf(fp, " standard deviation: %g\n", sqrt(variance));
|
||||
fprintf(fp, " maximum allocation size: %u\n", stats->maxalloc);
|
||||
}
|
||||
}
|
||||
#endif /* PL_ARENAMETER */
|
||||
193
mozilla/nsprpub/lib/ds/plarena.h
Normal file
193
mozilla/nsprpub/lib/ds/plarena.h
Normal file
@@ -0,0 +1,193 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef plarena_h___
|
||||
#define plarena_h___
|
||||
/*
|
||||
* Lifetime-based fast allocation, inspired by much prior art, including
|
||||
* "Fast Allocation and Deallocation of Memory Based on Object Lifetimes"
|
||||
* David R. Hanson, Software -- Practice and Experience, Vol. 20(1).
|
||||
*
|
||||
* Also supports LIFO allocation (PL_ARENA_MARK/PL_ARENA_RELEASE).
|
||||
*/
|
||||
#include "prtypes.h"
|
||||
#include "plarenas.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
typedef struct PLArena PLArena;
|
||||
|
||||
struct PLArena {
|
||||
PLArena *next; /* next arena for this lifetime */
|
||||
PRUword base; /* aligned base address, follows this header */
|
||||
PRUword limit; /* one beyond last byte in arena */
|
||||
PRUword avail; /* points to next available byte */
|
||||
};
|
||||
|
||||
#ifdef PL_ARENAMETER
|
||||
typedef struct PLArenaStats PLArenaStats;
|
||||
|
||||
struct PLArenaStats {
|
||||
PLArenaStats *next; /* next in arenaStats list */
|
||||
char *name; /* name for debugging */
|
||||
PRUint32 narenas; /* number of arenas in pool */
|
||||
PRUint32 nallocs; /* number of PL_ARENA_ALLOCATE() calls */
|
||||
PRUint32 nreclaims; /* number of reclaims from freeArenas */
|
||||
PRUint32 nmallocs; /* number of malloc() calls */
|
||||
PRUint32 ndeallocs; /* number of lifetime deallocations */
|
||||
PRUint32 ngrows; /* number of PL_ARENA_GROW() calls */
|
||||
PRUint32 ninplace; /* number of in-place growths */
|
||||
PRUint32 nreleases; /* number of PL_ARENA_RELEASE() calls */
|
||||
PRUint32 nfastrels; /* number of "fast path" releases */
|
||||
PRUint32 nbytes; /* total bytes allocated */
|
||||
PRUint32 maxalloc; /* maximum allocation size in bytes */
|
||||
PRFloat64 variance; /* size variance accumulator */
|
||||
};
|
||||
#endif
|
||||
|
||||
struct PLArenaPool {
|
||||
PLArena first; /* first arena in pool list */
|
||||
PLArena *current; /* arena from which to allocate space */
|
||||
PRUint32 arenasize; /* net exact size of a new arena */
|
||||
PRUword mask; /* alignment mask (power-of-2 - 1) */
|
||||
#ifdef PL_ARENAMETER
|
||||
PLArenaStats stats;
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* If the including .c file uses only one power-of-2 alignment, it may define
|
||||
* PL_ARENA_CONST_ALIGN_MASK to the alignment mask and save a few instructions
|
||||
* per ALLOCATE and GROW.
|
||||
*/
|
||||
#ifdef PL_ARENA_CONST_ALIGN_MASK
|
||||
#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + PL_ARENA_CONST_ALIGN_MASK) \
|
||||
& ~PL_ARENA_CONST_ALIGN_MASK)
|
||||
|
||||
#define PL_INIT_ARENA_POOL(pool, name, size) \
|
||||
PL_InitArenaPool(pool, name, size, PL_ARENA_CONST_ALIGN_MASK + 1)
|
||||
#else
|
||||
#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
|
||||
#endif
|
||||
|
||||
#define PL_ARENA_ALLOCATE(p, pool, nb) \
|
||||
PR_BEGIN_MACRO \
|
||||
PLArena *_a = (pool)->current; \
|
||||
PRUint32 _nb = PL_ARENA_ALIGN(pool, nb); \
|
||||
PRUword _p = _a->avail; \
|
||||
PRUword _q = _p + _nb; \
|
||||
if (_q > _a->limit) \
|
||||
_p = (PRUword)PL_ArenaAllocate(pool, _nb); \
|
||||
else \
|
||||
_a->avail = _q; \
|
||||
p = (void *)_p; \
|
||||
PL_ArenaCountAllocation(pool, nb); \
|
||||
PR_END_MACRO
|
||||
|
||||
#define PL_ARENA_GROW(p, pool, size, incr) \
|
||||
PR_BEGIN_MACRO \
|
||||
PLArena *_a = (pool)->current; \
|
||||
PRUint32 _incr = PL_ARENA_ALIGN(pool, incr); \
|
||||
PRUword _p = _a->avail; \
|
||||
PRUword _q = _p + _incr; \
|
||||
if (_p == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \
|
||||
_q <= _a->limit) { \
|
||||
_a->avail = _q; \
|
||||
PL_ArenaCountInplaceGrowth(pool, size, incr); \
|
||||
} else { \
|
||||
p = PL_ArenaGrow(pool, p, size, incr); \
|
||||
} \
|
||||
PL_ArenaCountGrowth(pool, size, incr); \
|
||||
PR_END_MACRO
|
||||
|
||||
#define PL_ARENA_MARK(pool) ((void *) (pool)->current->avail)
|
||||
#define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q))
|
||||
|
||||
#ifdef DEBUG
|
||||
#define PL_FREE_PATTERN 0xDA
|
||||
#define PL_CLEAR_UNUSED(a) (PR_ASSERT((a)->avail <= (a)->limit), \
|
||||
memset((void*)(a)->avail, PL_FREE_PATTERN, \
|
||||
(a)->limit - (a)->avail))
|
||||
#define PL_CLEAR_ARENA(a) memset((void*)(a), PL_FREE_PATTERN, \
|
||||
(a)->limit - (PRUword)(a))
|
||||
#else
|
||||
#define PL_CLEAR_UNUSED(a)
|
||||
#define PL_CLEAR_ARENA(a)
|
||||
#endif
|
||||
|
||||
#define PL_ARENA_RELEASE(pool, mark) \
|
||||
PR_BEGIN_MACRO \
|
||||
char *_m = (char *)(mark); \
|
||||
PLArena *_a = (pool)->current; \
|
||||
if (PR_UPTRDIFF(_m, _a) <= PR_UPTRDIFF(_a->avail, _a)) { \
|
||||
_a->avail = (PRUword)PL_ARENA_ALIGN(pool, _m); \
|
||||
PL_CLEAR_UNUSED(_a); \
|
||||
PL_ArenaCountRetract(pool, _m); \
|
||||
} else { \
|
||||
PL_ArenaRelease(pool, _m); \
|
||||
} \
|
||||
PL_ArenaCountRelease(pool, _m); \
|
||||
PR_END_MACRO
|
||||
|
||||
#ifdef PL_ARENAMETER
|
||||
#define PL_COUNT_ARENA(pool,op) ((pool)->stats.narenas op)
|
||||
#else
|
||||
#define PL_COUNT_ARENA(pool,op)
|
||||
#endif
|
||||
|
||||
#define PL_ARENA_DESTROY(pool, a, pnext) \
|
||||
PR_BEGIN_MACRO \
|
||||
PL_COUNT_ARENA(pool,--); \
|
||||
if ((pool)->current == (a)) (pool)->current = &(pool)->first; \
|
||||
*(pnext) = (a)->next; \
|
||||
PL_CLEAR_ARENA(a); \
|
||||
free(a); \
|
||||
(a) = 0; \
|
||||
PR_END_MACRO
|
||||
|
||||
#ifdef PL_ARENAMETER
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
PR_EXTERN(void) PL_ArenaCountAllocation(PLArenaPool *pool, PRUint32 nb);
|
||||
|
||||
PR_EXTERN(void) PL_ArenaCountInplaceGrowth(
|
||||
PLArenaPool *pool, PRUint32 size, PRUint32 incr);
|
||||
|
||||
PR_EXTERN(void) PL_ArenaCountGrowth(
|
||||
PLArenaPool *pool, PRUint32 size, PRUint32 incr);
|
||||
|
||||
PR_EXTERN(void) PL_ArenaCountRelease(PLArenaPool *pool, char *mark);
|
||||
|
||||
PR_EXTERN(void) PL_ArenaCountRetract(PLArenaPool *pool, char *mark);
|
||||
|
||||
PR_EXTERN(void) PL_DumpArenaStats(FILE *fp);
|
||||
|
||||
#else /* !PL_ARENAMETER */
|
||||
|
||||
#define PL_ArenaCountAllocation(ap, nb) /* nothing */
|
||||
#define PL_ArenaCountInplaceGrowth(ap, size, incr) /* nothing */
|
||||
#define PL_ArenaCountGrowth(ap, size, incr) /* nothing */
|
||||
#define PL_ArenaCountRelease(ap, mark) /* nothing */
|
||||
#define PL_ArenaCountRetract(ap, mark) /* nothing */
|
||||
|
||||
#endif /* !PL_ARENAMETER */
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* plarena_h___ */
|
||||
95
mozilla/nsprpub/lib/ds/plarenas.h
Normal file
95
mozilla/nsprpub/lib/ds/plarenas.h
Normal file
@@ -0,0 +1,95 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#if defined(PLARENAS_H)
|
||||
#else /* defined(PLARENAS_H) */
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
typedef struct PLArenaPool PLArenaPool;
|
||||
|
||||
/*
|
||||
** Allocate an arena pool as specified by the parameters.
|
||||
**
|
||||
** This is equivelant to allocating the space yourself and then
|
||||
** calling PL_InitArenaPool().
|
||||
**
|
||||
** This function may fail (and return a NULL) for a variety of
|
||||
** reasons. The reason for a particular failure can be discovered
|
||||
** by calling PR_GetError().
|
||||
*/
|
||||
#if 0 /* Not implemented */
|
||||
PR_EXTERN(PLArenaPool*) PL_AllocArenaPool(
|
||||
const char *name, PRUint32 size, PRUint32 align);
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Destroy an arena pool previously allocated by PL_AllocArenaPool().
|
||||
**
|
||||
** This function may fail if the arena is not empty and the caller
|
||||
** wishes to check for empty upon descruction.
|
||||
*/
|
||||
#if 0 /* Not implemented */
|
||||
PR_EXTERN(PRStatus) PL_DestroyArenaPool(PLArenaPool *pool, PRBool checkEmpty);
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
** Initialize an arena pool with the given name for debugging and metering,
|
||||
** with a minimum size per arena of size bytes.
|
||||
**/
|
||||
PR_EXTERN(void) PL_InitArenaPool(
|
||||
PLArenaPool *pool, const char *name, PRUint32 size, PRUint32 align);
|
||||
|
||||
/*
|
||||
** Finish using arenas, freeing all memory associated with them.
|
||||
**/
|
||||
PR_EXTERN(void) PL_ArenaFinish(void);
|
||||
|
||||
/*
|
||||
** Free the arenas in pool. The user may continue to allocate from pool
|
||||
** after calling this function. There is no need to call PL_InitArenaPool()
|
||||
** again unless PL_FinishArenaPool(pool) has been called.
|
||||
**/
|
||||
PR_EXTERN(void) PL_FreeArenaPool(PLArenaPool *pool);
|
||||
|
||||
/*
|
||||
** Free the arenas in pool and finish using it altogether.
|
||||
**/
|
||||
PR_EXTERN(void) PL_FinishArenaPool(PLArenaPool *pool);
|
||||
|
||||
/*
|
||||
** Compact all of the arenas in a pool so that no space is wasted.
|
||||
**/
|
||||
PR_EXTERN(void) PL_CompactArenaPool(PLArenaPool *pool);
|
||||
|
||||
/*
|
||||
** Friend functions used by the PL_ARENA_*() macros.
|
||||
**/
|
||||
PR_EXTERN(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb);
|
||||
|
||||
PR_EXTERN(void *) PL_ArenaGrow(
|
||||
PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr);
|
||||
|
||||
PR_EXTERN(void) PL_ArenaRelease(PLArenaPool *pool, char *mark);
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* defined(PLARENAS_H) */
|
||||
|
||||
/* plarenas */
|
||||
734
mozilla/nsprpub/lib/ds/plevent.c
Normal file
734
mozilla/nsprpub/lib/ds/plevent.c
Normal file
@@ -0,0 +1,734 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
#if defined(WIN16)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include "plevent.h"
|
||||
#include "prmem.h"
|
||||
#include "prcmon.h"
|
||||
#include "prlog.h"
|
||||
#if !defined(WIN32)
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#if !defined(OS2)
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(XP_MAC)
|
||||
#include <AppleEvents.h>
|
||||
#include "pprthred.h"
|
||||
#include "primpl.h"
|
||||
#else
|
||||
#include "private/pprthred.h"
|
||||
#include "private/primpl.h"
|
||||
#endif
|
||||
|
||||
static PRLogModuleInfo *event_lm = NULL;
|
||||
|
||||
/*******************************************************************************
|
||||
* Private Stuff
|
||||
******************************************************************************/
|
||||
|
||||
struct PLEventQueue {
|
||||
char* name;
|
||||
PRCList queue;
|
||||
PRMonitor* monitor;
|
||||
PRThread* handlerThread;
|
||||
#ifdef XP_UNIX
|
||||
PRInt32 eventPipe[2];
|
||||
PRPackedBool nativeNotifier;
|
||||
int notifyCount;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define PR_EVENT_PTR(_qp) \
|
||||
((PLEvent*) ((char*) (_qp) - offsetof(PLEvent, link)))
|
||||
|
||||
static PRStatus _pl_SetupNativeNotifier(PLEventQueue* self);
|
||||
static void _pl_CleanupNativeNotifier(PLEventQueue* self);
|
||||
static PRStatus _pl_NativeNotify(PLEventQueue* self);
|
||||
static PRStatus _pl_AcknowledgeNativeNotify(PLEventQueue* self);
|
||||
|
||||
|
||||
#if defined(_WIN32) || defined(WIN16)
|
||||
PLEventQueue * _pr_main_event_queue;
|
||||
UINT _pr_PostEventMsgId;
|
||||
HWND _pr_eventReceiverWindow;
|
||||
static char *_pr_eventWindowClass = "NSPR:EventWindow";
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Event Queue Operations
|
||||
******************************************************************************/
|
||||
|
||||
PR_IMPLEMENT(PLEventQueue*)
|
||||
PL_CreateEventQueue(char* name, PRThread* handlerThread)
|
||||
{
|
||||
PRStatus err;
|
||||
PLEventQueue* self = NULL;
|
||||
PRMonitor* mon = NULL;
|
||||
|
||||
if (event_lm == NULL)
|
||||
event_lm = PR_LOG_DEFINE("event");
|
||||
|
||||
self = PR_NEWZAP(PLEventQueue);
|
||||
if (self == NULL) return NULL;
|
||||
|
||||
mon = PR_NewNamedMonitor(name);
|
||||
if (mon == NULL) goto error;
|
||||
|
||||
self->name = name;
|
||||
self->monitor = mon;
|
||||
self->handlerThread = handlerThread;
|
||||
PR_INIT_CLIST(&self->queue);
|
||||
err = _pl_SetupNativeNotifier(self);
|
||||
if (err) goto error;
|
||||
|
||||
return self;
|
||||
|
||||
error:
|
||||
if (mon != NULL)
|
||||
PR_DestroyMonitor(mon);
|
||||
PR_DELETE(self);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRMonitor*)
|
||||
PL_GetEventQueueMonitor(PLEventQueue* self)
|
||||
{
|
||||
return self->monitor;
|
||||
}
|
||||
|
||||
static void PR_CALLBACK
|
||||
_pl_destroyEvent(PLEvent* event, void* data, PLEventQueue* queue)
|
||||
{
|
||||
#ifdef XP_MAC
|
||||
#pragma unused (data, queue)
|
||||
#endif
|
||||
PL_DequeueEvent(event, queue);
|
||||
PL_DestroyEvent(event);
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_DestroyEventQueue(PLEventQueue* self)
|
||||
{
|
||||
PR_EnterMonitor(self->monitor);
|
||||
|
||||
/* destroy undelivered events */
|
||||
PL_MapEvents(self, _pl_destroyEvent, NULL);
|
||||
|
||||
_pl_CleanupNativeNotifier(self);
|
||||
|
||||
/* destroying the monitor also destroys the name */
|
||||
PR_ExitMonitor(self->monitor);
|
||||
PR_DestroyMonitor(self->monitor);
|
||||
PR_DELETE(self);
|
||||
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRStatus)
|
||||
PL_PostEvent(PLEventQueue* self, PLEvent* event)
|
||||
{
|
||||
PRStatus err;
|
||||
PRMonitor* mon;
|
||||
|
||||
if (self == NULL)
|
||||
return PR_FAILURE;
|
||||
|
||||
mon = self->monitor;
|
||||
PR_EnterMonitor(mon);
|
||||
|
||||
/* insert event into thread's event queue: */
|
||||
if (event != NULL) {
|
||||
PR_APPEND_LINK(&event->link, &self->queue);
|
||||
}
|
||||
|
||||
/* notify even if event is NULL */
|
||||
err = _pl_NativeNotify(self);
|
||||
if (err != PR_SUCCESS) goto done;
|
||||
|
||||
/*
|
||||
* This may fall on deaf ears if we're really notifying the native
|
||||
* thread, and no one has called PL_WaitForEvent (or PL_EventLoop):
|
||||
*/
|
||||
err = PR_Notify(mon);
|
||||
|
||||
done:
|
||||
PR_ExitMonitor(mon);
|
||||
return err;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void*)
|
||||
PL_PostSynchronousEvent(PLEventQueue* self, PLEvent* event)
|
||||
{
|
||||
void* result;
|
||||
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
|
||||
PR_ASSERT(event != NULL);
|
||||
PR_CEnterMonitor(event);
|
||||
|
||||
if (PR_CurrentThread() == self->handlerThread) {
|
||||
/* Handle the case where the thread requesting the event handling
|
||||
is also the thread that's supposed to do the handling. */
|
||||
result = event->handler(event);
|
||||
}
|
||||
else {
|
||||
int inEventQueueMon = PR_GetMonitorEntryCount(self->monitor);
|
||||
int i, entryCount = self->monitor->entryCount;
|
||||
|
||||
event->synchronousResult = (void*)PR_TRUE;
|
||||
PR_PostEvent(self, event);
|
||||
/* We need to temporarily give up our event queue monitor if
|
||||
we're holding it, otherwise, the thread we're going to wait
|
||||
for notification from won't be able to enter it to process
|
||||
the event. */
|
||||
if (inEventQueueMon) {
|
||||
for (i = 0; i < entryCount; i++)
|
||||
PR_ExitMonitor(self->monitor);
|
||||
}
|
||||
PR_CWait(event, PR_INTERVAL_NO_TIMEOUT); /* wait for event to be handled or destroyed */
|
||||
if (inEventQueueMon) {
|
||||
for (i = 0; i < entryCount; i++)
|
||||
PR_EnterMonitor(self->monitor);
|
||||
}
|
||||
result = event->synchronousResult;
|
||||
event->synchronousResult = NULL;
|
||||
}
|
||||
|
||||
PR_CExitMonitor(event);
|
||||
|
||||
/* For synchronous events, they're destroyed here on the caller's
|
||||
thread before the result is returned. See PL_HandleEvent. */
|
||||
PL_DestroyEvent(event);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PLEvent*)
|
||||
PL_GetEvent(PLEventQueue* self)
|
||||
{
|
||||
PLEvent* event = NULL;
|
||||
PRStatus err;
|
||||
PRMonitor* mon;
|
||||
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
|
||||
mon = self->monitor;
|
||||
PR_EnterMonitor(mon);
|
||||
|
||||
err = _pl_AcknowledgeNativeNotify(self);
|
||||
if (err) goto done;
|
||||
|
||||
if (!PR_CLIST_IS_EMPTY(&self->queue)) {
|
||||
/* then grab the event and return it: */
|
||||
event = PR_EVENT_PTR(self->queue.next);
|
||||
PR_REMOVE_AND_INIT_LINK(&event->link);
|
||||
}
|
||||
|
||||
done:
|
||||
PR_ExitMonitor(mon);
|
||||
return event;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRBool)
|
||||
PL_EventAvailable(PLEventQueue* self)
|
||||
{
|
||||
PRBool result = PR_FALSE;
|
||||
|
||||
if (self == NULL)
|
||||
return PR_FALSE;
|
||||
|
||||
PR_EnterMonitor(self->monitor);
|
||||
|
||||
if (!PR_CLIST_IS_EMPTY(&self->queue))
|
||||
result = PR_TRUE;
|
||||
|
||||
PR_ExitMonitor(self->monitor);
|
||||
return result;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_MapEvents(PLEventQueue* self, PLEventFunProc fun, void* data)
|
||||
{
|
||||
PRCList* qp;
|
||||
|
||||
if (self == NULL)
|
||||
return;
|
||||
|
||||
PR_EnterMonitor(self->monitor);
|
||||
qp = self->queue.next;
|
||||
while (qp != &self->queue) {
|
||||
PLEvent* event = PR_EVENT_PTR(qp);
|
||||
qp = qp->next;
|
||||
(*fun)(event, data, self);
|
||||
}
|
||||
PR_ExitMonitor(self->monitor);
|
||||
}
|
||||
|
||||
static void PR_CALLBACK
|
||||
_pl_DestroyEventForOwner(PLEvent* event, void* owner, PLEventQueue* queue)
|
||||
{
|
||||
PR_ASSERT(PR_GetMonitorEntryCount(queue->monitor) > 0);
|
||||
if (event->owner == owner) {
|
||||
PR_LOG(event_lm, PR_LOG_DEBUG,
|
||||
("$$$ \tdestroying event %0x for owner %0x", event, owner));
|
||||
PL_DequeueEvent(event, queue);
|
||||
if (event->synchronousResult == (void*)PR_TRUE) {
|
||||
PR_CEnterMonitor(event);
|
||||
event->synchronousResult = NULL;
|
||||
PR_CNotify(event);
|
||||
PR_CExitMonitor(event);
|
||||
}
|
||||
else {
|
||||
PL_DestroyEvent(event);
|
||||
}
|
||||
}
|
||||
else {
|
||||
PR_LOG(event_lm, PR_LOG_DEBUG,
|
||||
("$$$ \tskipping event %0x for owner %0x", event, owner));
|
||||
}
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_RevokeEvents(PLEventQueue* self, void* owner)
|
||||
{
|
||||
if (self == NULL)
|
||||
return;
|
||||
|
||||
PR_LOG_BEGIN(event_lm, PR_LOG_DEBUG,
|
||||
("$$$ revoking events for owner %0x", owner));
|
||||
|
||||
/*
|
||||
** First we enter the monitor so that no one else can post any events
|
||||
** to the queue:
|
||||
*/
|
||||
PR_EnterMonitor(self->monitor);
|
||||
PR_LOG(event_lm, PR_LOG_DEBUG, ("$$$ owner %0x, entered monitor", owner));
|
||||
|
||||
/*
|
||||
** Discard any pending events for this owner:
|
||||
*/
|
||||
PL_MapEvents(self, _pl_DestroyEventForOwner, owner);
|
||||
|
||||
#ifdef DEBUG
|
||||
{
|
||||
PRCList* qp = self->queue.next;
|
||||
while (qp != &self->queue) {
|
||||
PREvent* event = PR_EVENT_PTR(qp);
|
||||
qp = qp->next;
|
||||
PR_ASSERT(event->owner != owner);
|
||||
}
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
PR_ExitMonitor(self->monitor);
|
||||
|
||||
PR_LOG_END(event_lm, PR_LOG_DEBUG,
|
||||
("$$$ revoking events for owner %0x", owner));
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_ProcessPendingEvents(PLEventQueue* self)
|
||||
{
|
||||
if (self == NULL)
|
||||
return;
|
||||
|
||||
while (PR_TRUE) {
|
||||
PLEvent* event = PL_GetEvent(self);
|
||||
if (event == NULL) return;
|
||||
|
||||
PR_LOG_BEGIN(event_lm, PR_LOG_DEBUG, ("$$$ processing event"));
|
||||
PL_HandleEvent(event);
|
||||
PR_LOG_END(event_lm, PR_LOG_DEBUG, ("$$$ done processing event"));
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Event Operations
|
||||
******************************************************************************/
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_InitEvent(PLEvent* self, void* owner,
|
||||
PLHandleEventProc handler,
|
||||
PLDestroyEventProc destructor)
|
||||
{
|
||||
PR_INIT_CLIST(&self->link);
|
||||
self->handler = handler;
|
||||
self->destructor = destructor;
|
||||
self->owner = owner;
|
||||
self->synchronousResult = NULL;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void*)
|
||||
PL_GetEventOwner(PLEvent* self)
|
||||
{
|
||||
return self->owner;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_HandleEvent(PLEvent* self)
|
||||
{
|
||||
void* result;
|
||||
|
||||
if (self == NULL)
|
||||
return;
|
||||
|
||||
/* This event better not be on an event queue anymore. */
|
||||
PR_ASSERT(PR_CLIST_IS_EMPTY(&self->link));
|
||||
|
||||
result = (*self->handler)(self);
|
||||
if (NULL != self->synchronousResult) {
|
||||
PR_CEnterMonitor(self);
|
||||
self->synchronousResult = result;
|
||||
PR_CNotify(self); /* wake up the guy waiting for the result */
|
||||
PR_CExitMonitor(self);
|
||||
}
|
||||
else {
|
||||
/* For asynchronous events, they're destroyed by the event-handler
|
||||
thread. See PR_PostSynchronousEvent. */
|
||||
PL_DestroyEvent(self);
|
||||
}
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_DestroyEvent(PLEvent* self)
|
||||
{
|
||||
if (self == NULL)
|
||||
return;
|
||||
|
||||
/* This event better not be on an event queue anymore. */
|
||||
PR_ASSERT(PR_CLIST_IS_EMPTY(&self->link));
|
||||
|
||||
(*self->destructor)(self);
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_DequeueEvent(PLEvent* self, PLEventQueue* queue)
|
||||
{
|
||||
#ifdef XP_MAC
|
||||
#pragma unused (queue)
|
||||
#endif
|
||||
if (self == NULL)
|
||||
return;
|
||||
|
||||
/* Only the owner is allowed to dequeue events because once the
|
||||
client has put it in the queue, they have no idea whether it's
|
||||
been processed and destroyed or not. */
|
||||
/* PR_ASSERT(queue->handlerThread == PR_CurrentThread());*/
|
||||
|
||||
PR_EnterMonitor(queue->monitor);
|
||||
|
||||
PR_ASSERT(!PR_CLIST_IS_EMPTY(&self->link));
|
||||
PR_REMOVE_AND_INIT_LINK(&self->link);
|
||||
|
||||
PR_ExitMonitor(queue->monitor);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Pure Event Queues
|
||||
*
|
||||
* For when you're only processing PLEvents and there is no native
|
||||
* select, thread messages, or AppleEvents.
|
||||
******************************************************************************/
|
||||
|
||||
PR_IMPLEMENT(PLEvent*)
|
||||
PL_WaitForEvent(PLEventQueue* self)
|
||||
{
|
||||
PLEvent* event;
|
||||
PRMonitor* mon;
|
||||
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
|
||||
mon = self->monitor;
|
||||
PR_EnterMonitor(mon);
|
||||
|
||||
while ((event = PL_GetEvent(self)) == NULL) {
|
||||
PRStatus err;
|
||||
PR_LOG_END(event_lm, PR_LOG_DEBUG, ("$$$ waiting for event"));
|
||||
err = PR_Wait(mon, PR_INTERVAL_NO_TIMEOUT);
|
||||
if ((err == PR_FAILURE)
|
||||
&& (PR_PENDING_INTERRUPT_ERROR == PR_GetError())) break;
|
||||
}
|
||||
|
||||
PR_ExitMonitor(mon);
|
||||
return event;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_EventLoop(PLEventQueue* self)
|
||||
{
|
||||
if (self == NULL)
|
||||
return;
|
||||
|
||||
while (PR_TRUE) {
|
||||
PLEvent* event = PL_WaitForEvent(self);
|
||||
if (event == NULL) {
|
||||
/* This can only happen if the current thread is interrupted */
|
||||
return;
|
||||
}
|
||||
|
||||
PR_LOG_BEGIN(event_lm, PR_LOG_DEBUG, ("$$$ processing event"));
|
||||
PL_HandleEvent(event);
|
||||
PR_LOG_END(event_lm, PR_LOG_DEBUG, ("$$$ done processing event"));
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Native Event Queues
|
||||
*
|
||||
* For when you need to call select, or WaitNextEvent, and yet also want
|
||||
* to handle PLEvents.
|
||||
******************************************************************************/
|
||||
|
||||
static PRStatus
|
||||
_pl_SetupNativeNotifier(PLEventQueue* self)
|
||||
{
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (self)
|
||||
#endif
|
||||
|
||||
PRInt32 err = 0;
|
||||
#if defined(XP_UNIX)
|
||||
err = pipe(self->eventPipe);
|
||||
#endif
|
||||
return err == 0 ? PR_SUCCESS : PR_FAILURE;
|
||||
}
|
||||
|
||||
static void
|
||||
_pl_CleanupNativeNotifier(PLEventQueue* self)
|
||||
{
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (self)
|
||||
#endif
|
||||
|
||||
#if defined(XP_UNIX)
|
||||
close(self->eventPipe[0]);
|
||||
close(self->eventPipe[1]);
|
||||
#endif
|
||||
}
|
||||
|
||||
static PRStatus
|
||||
_pl_NativeNotify(PLEventQueue* self)
|
||||
{
|
||||
#if defined(XP_UNIX)
|
||||
|
||||
# define NOTIFY_TOKEN 0xFA
|
||||
PRInt32 count;
|
||||
unsigned char buf[] = { NOTIFY_TOKEN };
|
||||
|
||||
count = write(self->eventPipe[1], buf, 1);
|
||||
self->notifyCount++;
|
||||
return (count == 1) ? PR_SUCCESS : PR_FAILURE;
|
||||
|
||||
#elif defined(XP_PC) && ( defined(WINNT) || defined(WIN95) || defined(WIN16))
|
||||
/*
|
||||
** Post a message to the NSPR window on the main thread requesting
|
||||
** it to process the pending events. This is only necessary for the
|
||||
** main event queue, since the main thread is waiting for OS events.
|
||||
*/
|
||||
if (self == _pr_main_event_queue) {
|
||||
PostMessage( _pr_eventReceiverWindow, _pr_PostEventMsgId,
|
||||
(WPARAM)0, (LPARAM)self);
|
||||
}
|
||||
return PR_SUCCESS;
|
||||
|
||||
#elif defined(XP_MAC)
|
||||
|
||||
#pragma unused (self)
|
||||
return PR_SUCCESS; /* XXX can fail? */
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
static PRStatus
|
||||
_pl_AcknowledgeNativeNotify(PLEventQueue* self)
|
||||
{
|
||||
#if defined(XP_UNIX)
|
||||
|
||||
PRInt32 count;
|
||||
unsigned char c;
|
||||
|
||||
if (self->notifyCount <= 0) return PR_SUCCESS;
|
||||
/* consume the byte NativeNotify put in our pipe: */
|
||||
count = read(self->eventPipe[0], &c, 1);
|
||||
self->notifyCount--;
|
||||
return ((count == 1 && c == NOTIFY_TOKEN) || count == 0)
|
||||
? PR_SUCCESS : PR_FAILURE;
|
||||
|
||||
#else
|
||||
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (self)
|
||||
#endif
|
||||
|
||||
/* nothing to do on the other platforms */
|
||||
return PR_SUCCESS;
|
||||
#endif
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRInt32)
|
||||
PL_GetEventQueueSelectFD(PLEventQueue* self)
|
||||
{
|
||||
if (self == NULL)
|
||||
return -1;
|
||||
|
||||
#if defined(XP_UNIX)
|
||||
return self->eventPipe[0];
|
||||
#else
|
||||
return -1; /* other platforms don't handle this (yet) */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if defined(WIN16) || defined(_WIN32)
|
||||
/*
|
||||
** Global Instance handle...
|
||||
** In Win32 this is the module handle of the DLL.
|
||||
**
|
||||
*/
|
||||
HINSTANCE _pr_hInstance;
|
||||
#endif
|
||||
|
||||
#if defined(WIN16)
|
||||
/*
|
||||
** Function LibMain() is required by Win16
|
||||
**
|
||||
*/
|
||||
int CALLBACK LibMain( HINSTANCE hInst, WORD wDataSeg,
|
||||
WORD cbHeapSize, LPSTR lpszCmdLine )
|
||||
{
|
||||
_pr_hInstance = hInst;
|
||||
return TRUE;
|
||||
}
|
||||
#endif /* WIN16 */
|
||||
|
||||
#if defined(_WIN32)
|
||||
|
||||
/*
|
||||
** Initialization routine for the NSPR DLL...
|
||||
*/
|
||||
|
||||
BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
_pr_hInstance = hDLL;
|
||||
break;
|
||||
|
||||
case DLL_THREAD_ATTACH:
|
||||
break;
|
||||
|
||||
case DLL_THREAD_DETACH:
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
_pr_hInstance = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(WIN16) || defined(_WIN32)
|
||||
PR_IMPLEMENT(PLEventQueue *)
|
||||
PL_GetMainEventQueue()
|
||||
{
|
||||
PR_ASSERT(_pr_main_event_queue);
|
||||
|
||||
return _pr_main_event_queue;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK
|
||||
#if defined(WIN16)
|
||||
__loadds
|
||||
#endif
|
||||
_md_EventReceiverProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (_pr_PostEventMsgId == uMsg )
|
||||
{
|
||||
PREventQueue *queue = (PREventQueue *)lParam;
|
||||
|
||||
PR_ASSERT(queue == PL_GetMainEventQueue());
|
||||
if (queue == PL_GetMainEventQueue())
|
||||
{
|
||||
PR_ProcessPendingEvents(queue);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_InitializeEventsLib(char *name)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
|
||||
_pr_main_event_queue = PL_CreateEventQueue(name, PR_GetCurrentThread());
|
||||
|
||||
/* Register the windows message for NSPR Event notification */
|
||||
_pr_PostEventMsgId = RegisterWindowMessage("NSPR_PostEvent");
|
||||
|
||||
/* Register the class for the event receiver window */
|
||||
if (!GetClassInfo(_pr_hInstance, _pr_eventWindowClass, &wc)) {
|
||||
wc.style = 0;
|
||||
wc.lpfnWndProc = _md_EventReceiverProc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hInstance = _pr_hInstance;
|
||||
wc.hIcon = NULL;
|
||||
wc.hCursor = NULL;
|
||||
wc.hbrBackground = (HBRUSH) NULL;
|
||||
wc.lpszMenuName = (LPCSTR) NULL;
|
||||
wc.lpszClassName = _pr_eventWindowClass;
|
||||
RegisterClass(&wc);
|
||||
}
|
||||
|
||||
/* Create the event receiver window */
|
||||
_pr_eventReceiverWindow = CreateWindow(_pr_eventWindowClass,
|
||||
"NSPR:EventReceiver",
|
||||
0, 0, 0, 10, 10,
|
||||
NULL, NULL, _pr_hInstance,
|
||||
NULL);
|
||||
PR_ASSERT(_pr_eventReceiverWindow);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32) || defined(WIN16)
|
||||
PR_IMPLEMENT(HWND)
|
||||
PR_GetEventReceiverWindow()
|
||||
{
|
||||
if(_pr_eventReceiverWindow != NULL)
|
||||
{
|
||||
return _pr_eventReceiverWindow;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
403
mozilla/nsprpub/lib/ds/plevent.h
Normal file
403
mozilla/nsprpub/lib/ds/plevent.h
Normal file
@@ -0,0 +1,403 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/**********************************************************************
|
||||
NSPL Events
|
||||
|
||||
Defining Events
|
||||
---------------
|
||||
|
||||
Events are essentially structures that represent argument lists for a
|
||||
function that will run on another thread. All event structures you
|
||||
define must include a PLEvent struct as their first field:
|
||||
|
||||
typedef struct MyEventType {
|
||||
PLEvent e;
|
||||
// arguments follow...
|
||||
int x;
|
||||
char* y;
|
||||
} MyEventType;
|
||||
|
||||
It is also essential that you establish a model of ownership for each
|
||||
argument passed in an event record, i.e. whether particular arguments
|
||||
will be deleted by the event destruction callback, or whether they
|
||||
only loaned to the event handler callback, and guaranteed to persist
|
||||
until the time at which the handler is called.
|
||||
|
||||
Sending Events
|
||||
--------------
|
||||
|
||||
Events are initialized by PL_InitEvent and can be sent via
|
||||
PL_PostEvent or PL_PostSynchronousEvent. Events can also have an
|
||||
owner. The owner of an event can revoke all the events in a given
|
||||
event-queue by calling PL_RevokeEvents. An owner might want
|
||||
to do this if, for instance, it is being destroyed, and handling the
|
||||
events after the owner's destruction would cause an error (e.g. an
|
||||
MWContext).
|
||||
|
||||
Since the act of initializing and posting an event must be coordinated
|
||||
with it's possible revocation, it is essential that the event-queue's
|
||||
monitor be entered surrounding the code that constructs, initializes
|
||||
and posts the event:
|
||||
|
||||
void postMyEvent(MyOwner* owner, int x, char* y)
|
||||
{
|
||||
MyEventType* event;
|
||||
|
||||
PL_ENTER_EVENT_QUEUE_MONITOR(myQueue);
|
||||
|
||||
// construct
|
||||
event = PR_NEW(MyEventType);
|
||||
if (event == NULL) goto done;
|
||||
|
||||
// initialize
|
||||
PL_InitEvent(event, owner,
|
||||
(PLHandleEventProc)handleMyEvent,
|
||||
(PLDestroyEventProc)destroyMyEvent);
|
||||
event->x = x;
|
||||
event->y = strdup(y);
|
||||
|
||||
// post
|
||||
PL_PostEvent(myQueue, &event->e);
|
||||
|
||||
done:
|
||||
PL_EXIT_EVENT_QUEUE_MONITOR(myQueue);
|
||||
}
|
||||
|
||||
If you don't call PL_InitEvent and PL_PostEvent within the
|
||||
event-queue's monitor, you'll get a big red assert.
|
||||
|
||||
Handling Events
|
||||
---------------
|
||||
|
||||
To handle an event you must write a callback that is passed the event
|
||||
record you defined containing the event's arguments:
|
||||
|
||||
void* handleMyEvent(MyEventType* event)
|
||||
{
|
||||
doit(event->x, event->y);
|
||||
return NULL; // you could return a value for a sync event
|
||||
}
|
||||
|
||||
Similarly for the destruction callback:
|
||||
|
||||
void destroyMyEvent(MyEventType* event)
|
||||
{
|
||||
free(event->y); // created by strdup
|
||||
free(event);
|
||||
}
|
||||
|
||||
Processing Events in Your Event Loop
|
||||
------------------------------------
|
||||
|
||||
If your main loop only processes events delivered to the event queue,
|
||||
things are rather simple. You just get the next event (which may
|
||||
block), and then handle it:
|
||||
|
||||
while (1) {
|
||||
event = PL_GetEvent(myQueue);
|
||||
PL_HandleEvent(event);
|
||||
}
|
||||
|
||||
However, if other things must be waited on, you'll need to obtain a
|
||||
file-descriptor that represents your event queue, and hand it to select:
|
||||
|
||||
fd = PL_GetEventQueueSelectFD(myQueue);
|
||||
...add fd to select set...
|
||||
while (select(...)) {
|
||||
if (...fd...) {
|
||||
PL_ProcessPendingEvents(myQueue);
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
Of course, with Motif and Windows it's more complicated than that, and
|
||||
on Mac it's completely different, but you get the picture.
|
||||
|
||||
Revoking Events
|
||||
---------------
|
||||
If at any time an owner of events is about to be destroyed, you must
|
||||
take steps to ensure that no one tries to use the event queue after
|
||||
the owner is gone (or a crash may result). You can do this by either
|
||||
processing all the events in the queue before destroying the owner:
|
||||
|
||||
{
|
||||
...
|
||||
PL_ENTER_EVENT_QUEUE_MONITOR(myQueue);
|
||||
PL_ProcessPendingEvents(myQueue);
|
||||
DestroyMyOwner(owner);
|
||||
PL_EXIT_EVENT_QUEUE_MONITOR(myQueue);
|
||||
...
|
||||
}
|
||||
|
||||
or by revoking the events that are in the queue for that owner. This
|
||||
removes them from the queue and calls their destruction callback:
|
||||
|
||||
{
|
||||
...
|
||||
PL_ENTER_EVENT_QUEUE_MONITOR(myQueue);
|
||||
PL_RevokeEvents(myQueue, owner);
|
||||
DestroyMyOwner(owner);
|
||||
PL_EXIT_EVENT_QUEUE_MONITOR(myQueue);
|
||||
...
|
||||
}
|
||||
|
||||
In either case it is essential that you be in the event-queue's monitor
|
||||
to ensure that all events are removed from the queue for that owner,
|
||||
and to ensure that no more events will be delivered for that owner.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef prevent_h___
|
||||
#define prevent_h___
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "prclist.h"
|
||||
#include "prthread.h"
|
||||
#include "prmon.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
/* Typedefs */
|
||||
|
||||
typedef struct PLEvent PLEvent;
|
||||
typedef struct PLEventQueue PLEventQueue;
|
||||
|
||||
/*******************************************************************************
|
||||
* Event Queue Operations
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
** Creates a new event queue. Returns NULL on failure.
|
||||
*/
|
||||
PR_EXTERN(PLEventQueue*)
|
||||
PL_CreateEventQueue(char* name, PRThread* handlerThread);
|
||||
|
||||
/*
|
||||
** Destroys an event queue.
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_DestroyEventQueue(PLEventQueue* self);
|
||||
|
||||
/*
|
||||
** Returns the monitor associated with an event queue. This monitor is
|
||||
** selectable. The monitor should be entered to protect against anyone
|
||||
** calling PL_RevokeEvents while the event is trying to be constructed
|
||||
** and delivered.
|
||||
*/
|
||||
PR_EXTERN(PRMonitor*)
|
||||
PL_GetEventQueueMonitor(PLEventQueue* self);
|
||||
|
||||
#define PL_ENTER_EVENT_QUEUE_MONITOR(queue) \
|
||||
PR_EnterMonitor(PL_GetEventQueueMonitor(queue))
|
||||
|
||||
#define PL_EXIT_EVENT_QUEUE_MONITOR(queue) \
|
||||
PR_ExitMonitor(PL_GetEventQueueMonitor(queue))
|
||||
|
||||
/*
|
||||
** Posts an event to an event queue, waking up any threads waiting for an
|
||||
** event. If event is NULL, notification still occurs, but no event will
|
||||
** be available.
|
||||
**
|
||||
** Any events delivered by this routine will be destroyed by PL_HandleEvent
|
||||
** when it is called (by the event-handling thread).
|
||||
*/
|
||||
PR_EXTERN(PRStatus)
|
||||
PL_PostEvent(PLEventQueue* self, PLEvent* event);
|
||||
|
||||
/*
|
||||
** Like PL_PostEvent, this routine posts an event to the event handling
|
||||
** thread, but does so synchronously, waiting for the result. The result
|
||||
** which is the value of the handler routine is returned.
|
||||
**
|
||||
** Any events delivered by this routine will be not be destroyed by
|
||||
** PL_HandleEvent, but instead will be destroyed just before the result is
|
||||
** returned (by the current thread).
|
||||
*/
|
||||
PR_EXTERN(void*)
|
||||
PL_PostSynchronousEvent(PLEventQueue* self, PLEvent* event);
|
||||
|
||||
/*
|
||||
** Gets an event from an event queue. Returns NULL if no event is
|
||||
** available.
|
||||
*/
|
||||
PR_EXTERN(PLEvent*)
|
||||
PL_GetEvent(PLEventQueue* self);
|
||||
|
||||
/*
|
||||
** Returns true if there is an event available for PL_GetEvent.
|
||||
*/
|
||||
PR_EXTERN(PRBool)
|
||||
PL_EventAvailable(PLEventQueue* self);
|
||||
|
||||
/*
|
||||
** This is the type of the function that must be passed to PL_MapEvents
|
||||
** (see description below).
|
||||
*/
|
||||
typedef void
|
||||
(PR_CALLBACK *PLEventFunProc)(PLEvent* event, void* data, PLEventQueue* queue);
|
||||
|
||||
/*
|
||||
** Applies a function to every event in the event queue. This can be used
|
||||
** to selectively handle, filter, or remove events. The data pointer is
|
||||
** passed to each invocation of the function fun.
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_MapEvents(PLEventQueue* self, PLEventFunProc fun, void* data);
|
||||
|
||||
/*
|
||||
** This routine walks an event queue and destroys any event whose owner is
|
||||
** the owner specified. The == operation is used to compare owners.
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_RevokeEvents(PLEventQueue* self, void* owner);
|
||||
|
||||
/*
|
||||
** This routine processes all pending events in the event queue. It can be
|
||||
** called from the thread's main event-processing loop whenever the event
|
||||
** queue's selectFD is ready (returned by PL_GetEventQueueSelectFD).
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_ProcessPendingEvents(PLEventQueue* self);
|
||||
|
||||
/*******************************************************************************
|
||||
* Pure Event Queues
|
||||
*
|
||||
* For when you're only processing PLEvents and there is no native
|
||||
* select, thread messages, or AppleEvents.
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
** Blocks until an event can be returned from the event queue. This routine
|
||||
** may return NULL if the current thread is interrupted.
|
||||
*/
|
||||
PR_EXTERN(PLEvent*)
|
||||
PL_WaitForEvent(PLEventQueue* self);
|
||||
|
||||
/*
|
||||
** One stop shopping if all you're going to do is process PLEvents. Just
|
||||
** call this and it loops forever processing events as they arrive. It will
|
||||
** terminate when your thread is interrupted or dies.
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_EventLoop(PLEventQueue* self);
|
||||
|
||||
/*******************************************************************************
|
||||
* Native Event Queues
|
||||
*
|
||||
* For when you need to call select, or WaitNextEvent, and yet also want
|
||||
* to handle PLEvents.
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
** This routine allows you to grab the file descriptor associated with an
|
||||
** event queue and use it in the readFD set of select. Useful for platforms
|
||||
** that support select, and must wait on other things besides just PLEvents.
|
||||
*/
|
||||
PR_EXTERN(PRInt32)
|
||||
PL_GetEventQueueSelectFD(PLEventQueue* self);
|
||||
|
||||
/*******************************************************************************
|
||||
* Event Operations
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
** The type of an event handler function. This function is passed as an
|
||||
** initialization argument to PL_InitEvent, and called by
|
||||
** PL_HandleEvent. If the event is called synchronously, a void* result
|
||||
** may be returned (otherwise any result will be ignored).
|
||||
*/
|
||||
typedef void*
|
||||
(PR_CALLBACK *PLHandleEventProc)(PLEvent* self);
|
||||
|
||||
/*
|
||||
** The type of an event destructor function. This function is passed as
|
||||
** an initialization argument to PL_InitEvent, and called by
|
||||
** PL_DestroyEvent.
|
||||
*/
|
||||
typedef void
|
||||
(PR_CALLBACK *PLDestroyEventProc)(PLEvent* self);
|
||||
|
||||
/*
|
||||
** Initializes an event. Usually events are embedded in a larger event
|
||||
** structure which holds event-specific data, so this is an initializer
|
||||
** for that embedded part of the structure.
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_InitEvent(PLEvent* self, void* owner,
|
||||
PLHandleEventProc handler,
|
||||
PLDestroyEventProc destructor);
|
||||
|
||||
/*
|
||||
** Returns the owner of an event.
|
||||
*/
|
||||
PR_EXTERN(void*)
|
||||
PL_GetEventOwner(PLEvent* self);
|
||||
|
||||
/*
|
||||
** Handles an event, calling the event's handler routine.
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_HandleEvent(PLEvent* self);
|
||||
|
||||
/*
|
||||
** Destroys an event, calling the event's destructor.
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_DestroyEvent(PLEvent* self);
|
||||
|
||||
/*
|
||||
** Removes an event from an event queue.
|
||||
*/
|
||||
PR_EXTERN(void)
|
||||
PL_DequeueEvent(PLEvent* self, PLEventQueue* queue);
|
||||
|
||||
#if defined(_WIN32) || defined(WIN16)
|
||||
PR_EXTERN(HWND)
|
||||
PR_GetEventReceiverWindow();
|
||||
#endif
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Private Stuff
|
||||
******************************************************************************/
|
||||
|
||||
struct PLEvent {
|
||||
PRCList link;
|
||||
PLHandleEventProc handler;
|
||||
PLDestroyEventProc destructor;
|
||||
void* owner;
|
||||
void* synchronousResult;
|
||||
/* other fields follow... */
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/*
|
||||
** Returns the event queue associated with the main thread. Note that
|
||||
** the event queue is now created by NSPR.
|
||||
*/
|
||||
#ifdef XP_PC
|
||||
PR_EXTERN(PLEventQueue *)
|
||||
PL_GetMainEventQueue(void);
|
||||
PR_EXTERN(void)
|
||||
PL_InitializeEventsLib(char *name);
|
||||
#endif /* XP_PC */
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* prevent_h___ */
|
||||
477
mozilla/nsprpub/lib/ds/plhash.c
Normal file
477
mozilla/nsprpub/lib/ds/plhash.c
Normal file
@@ -0,0 +1,477 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* PL hash table package.
|
||||
*/
|
||||
#include "plhash.h"
|
||||
#include "prbit.h"
|
||||
#include "prlog.h"
|
||||
#include "prmem.h"
|
||||
#include "prtypes.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Compute the number of buckets in ht */
|
||||
#define NBUCKETS(ht) (1 << (PL_HASH_BITS - (ht)->shift))
|
||||
|
||||
/* The smallest table has 16 buckets */
|
||||
#define MINBUCKETSLOG2 4
|
||||
#define MINBUCKETS (1 << MINBUCKETSLOG2)
|
||||
|
||||
/* Compute the maximum entries given n buckets that we will tolerate, ~90% */
|
||||
#define OVERLOADED(n) ((n) - ((n) >> 3))
|
||||
|
||||
/* Compute the number of entries below which we shrink the table by half */
|
||||
#define UNDERLOADED(n) (((n) > MINBUCKETS) ? ((n) >> 2) : 0)
|
||||
|
||||
/*
|
||||
** Stubs for default hash allocator ops.
|
||||
*/
|
||||
static void * PR_CALLBACK
|
||||
DefaultAllocTable(void *pool, PRSize size)
|
||||
{
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (pool)
|
||||
#endif
|
||||
|
||||
return PR_MALLOC(size);
|
||||
}
|
||||
|
||||
static void PR_CALLBACK
|
||||
DefaultFreeTable(void *pool, void *item)
|
||||
{
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (pool)
|
||||
#endif
|
||||
|
||||
PR_DELETE(item);
|
||||
}
|
||||
|
||||
static PLHashEntry * PR_CALLBACK
|
||||
DefaultAllocEntry(void *pool, const void *key)
|
||||
{
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (pool,key)
|
||||
#endif
|
||||
|
||||
return PR_NEW(PLHashEntry);
|
||||
}
|
||||
|
||||
static void PR_CALLBACK
|
||||
DefaultFreeEntry(void *pool, PLHashEntry *he, PRUintn flag)
|
||||
{
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (pool)
|
||||
#endif
|
||||
|
||||
if (flag == HT_FREE_ENTRY)
|
||||
PR_DELETE(he);
|
||||
}
|
||||
|
||||
static PLHashAllocOps defaultHashAllocOps = {
|
||||
DefaultAllocTable, DefaultFreeTable,
|
||||
DefaultAllocEntry, DefaultFreeEntry
|
||||
};
|
||||
|
||||
PR_IMPLEMENT(PLHashTable *)
|
||||
PL_NewHashTable(PRUint32 n, PLHashFunction keyHash,
|
||||
PLHashComparator keyCompare, PLHashComparator valueCompare,
|
||||
PLHashAllocOps *allocOps, void *allocPriv)
|
||||
{
|
||||
PLHashTable *ht;
|
||||
PRUint32 nb;
|
||||
|
||||
if (n <= MINBUCKETS) {
|
||||
n = MINBUCKETSLOG2;
|
||||
} else {
|
||||
n = PR_CeilingLog2(n);
|
||||
if ((PRInt32)n < 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!allocOps) allocOps = &defaultHashAllocOps;
|
||||
|
||||
ht = (PLHashTable*)((*allocOps->allocTable)(allocPriv, sizeof *ht));
|
||||
if (!ht)
|
||||
return 0;
|
||||
memset(ht, 0, sizeof *ht);
|
||||
ht->shift = PL_HASH_BITS - n;
|
||||
n = 1 << n;
|
||||
#if defined(XP_PC) && !defined(_WIN32)
|
||||
if (n > 16000) {
|
||||
(*allocOps->freeTable)(allocPriv, ht);
|
||||
return 0;
|
||||
}
|
||||
#endif /* WIN16 */
|
||||
nb = n * sizeof(PLHashEntry *);
|
||||
ht->buckets = (PLHashEntry**)((*allocOps->allocTable)(allocPriv, nb));
|
||||
if (!ht->buckets) {
|
||||
(*allocOps->freeTable)(allocPriv, ht);
|
||||
return 0;
|
||||
}
|
||||
memset(ht->buckets, 0, nb);
|
||||
|
||||
ht->keyHash = keyHash;
|
||||
ht->keyCompare = keyCompare;
|
||||
ht->valueCompare = valueCompare;
|
||||
ht->allocOps = allocOps;
|
||||
ht->allocPriv = allocPriv;
|
||||
return ht;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_HashTableDestroy(PLHashTable *ht)
|
||||
{
|
||||
PRUint32 i, n;
|
||||
PLHashEntry *he, *next;
|
||||
PLHashAllocOps *allocOps = ht->allocOps;
|
||||
void *allocPriv = ht->allocPriv;
|
||||
|
||||
n = NBUCKETS(ht);
|
||||
for (i = 0; i < n; i++) {
|
||||
for (he = ht->buckets[i]; he; he = next) {
|
||||
next = he->next;
|
||||
(*allocOps->freeEntry)(allocPriv, he, HT_FREE_ENTRY);
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
memset(ht->buckets, 0xDB, n * sizeof ht->buckets[0]);
|
||||
#endif
|
||||
(*allocOps->freeTable)(allocPriv, ht->buckets);
|
||||
#ifdef DEBUG
|
||||
memset(ht, 0xDB, sizeof *ht);
|
||||
#endif
|
||||
(*allocOps->freeTable)(allocPriv, ht);
|
||||
}
|
||||
|
||||
/*
|
||||
** Multiplicative hash, from Knuth 6.4.
|
||||
*/
|
||||
#define GOLDEN_RATIO 0x9E3779B9U
|
||||
|
||||
PR_IMPLEMENT(PLHashEntry **)
|
||||
PL_HashTableRawLookup(PLHashTable *ht, PLHashNumber keyHash, const void *key)
|
||||
{
|
||||
PLHashEntry *he, **hep, **hep0;
|
||||
PLHashNumber h;
|
||||
|
||||
#ifdef HASHMETER
|
||||
ht->nlookups++;
|
||||
#endif
|
||||
h = keyHash * GOLDEN_RATIO;
|
||||
h >>= ht->shift;
|
||||
hep = hep0 = &ht->buckets[h];
|
||||
while ((he = *hep) != 0) {
|
||||
if (he->keyHash == keyHash && (*ht->keyCompare)(key, he->key)) {
|
||||
/* Move to front of chain if not already there */
|
||||
if (hep != hep0) {
|
||||
*hep = he->next;
|
||||
he->next = *hep0;
|
||||
*hep0 = he;
|
||||
}
|
||||
return hep0;
|
||||
}
|
||||
hep = &he->next;
|
||||
#ifdef HASHMETER
|
||||
ht->nsteps++;
|
||||
#endif
|
||||
}
|
||||
return hep;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PLHashEntry *)
|
||||
PL_HashTableRawAdd(PLHashTable *ht, PLHashEntry **hep,
|
||||
PLHashNumber keyHash, const void *key, void *value)
|
||||
{
|
||||
PRUint32 i, n;
|
||||
PLHashEntry *he, *next, **oldbuckets;
|
||||
PRUint32 nb;
|
||||
|
||||
/* Grow the table if it is overloaded */
|
||||
n = NBUCKETS(ht);
|
||||
if (ht->nentries >= OVERLOADED(n)) {
|
||||
#ifdef HASHMETER
|
||||
ht->ngrows++;
|
||||
#endif
|
||||
ht->shift--;
|
||||
oldbuckets = ht->buckets;
|
||||
#if defined(XP_PC) && !defined(_WIN32)
|
||||
if (2 * n > 16000)
|
||||
return 0;
|
||||
#endif /* WIN16 */
|
||||
nb = 2 * n * sizeof(PLHashEntry *);
|
||||
ht->buckets = (PLHashEntry**)
|
||||
((*ht->allocOps->allocTable)(ht->allocPriv, nb));
|
||||
if (!ht->buckets) {
|
||||
ht->buckets = oldbuckets;
|
||||
return 0;
|
||||
}
|
||||
memset(ht->buckets, 0, nb);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
for (he = oldbuckets[i]; he; he = next) {
|
||||
next = he->next;
|
||||
hep = PL_HashTableRawLookup(ht, he->keyHash, he->key);
|
||||
PR_ASSERT(*hep == 0);
|
||||
he->next = 0;
|
||||
*hep = he;
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
memset(oldbuckets, 0xDB, n * sizeof oldbuckets[0]);
|
||||
#endif
|
||||
(*ht->allocOps->freeTable)(ht->allocPriv, oldbuckets);
|
||||
hep = PL_HashTableRawLookup(ht, keyHash, key);
|
||||
}
|
||||
|
||||
/* Make a new key value entry */
|
||||
he = (*ht->allocOps->allocEntry)(ht->allocPriv, key);
|
||||
if (!he)
|
||||
return 0;
|
||||
he->keyHash = keyHash;
|
||||
he->key = key;
|
||||
he->value = value;
|
||||
he->next = *hep;
|
||||
*hep = he;
|
||||
ht->nentries++;
|
||||
return he;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PLHashEntry *)
|
||||
PL_HashTableAdd(PLHashTable *ht, const void *key, void *value)
|
||||
{
|
||||
PLHashNumber keyHash;
|
||||
PLHashEntry *he, **hep;
|
||||
|
||||
keyHash = (*ht->keyHash)(key);
|
||||
hep = PL_HashTableRawLookup(ht, keyHash, key);
|
||||
if ((he = *hep) != 0) {
|
||||
/* Hit; see if values match */
|
||||
if ((*ht->valueCompare)(he->value, value)) {
|
||||
/* key,value pair is already present in table */
|
||||
return he;
|
||||
}
|
||||
if (he->value)
|
||||
(*ht->allocOps->freeEntry)(ht->allocPriv, he, HT_FREE_VALUE);
|
||||
he->value = value;
|
||||
return he;
|
||||
}
|
||||
return PL_HashTableRawAdd(ht, hep, keyHash, key, value);
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_HashTableRawRemove(PLHashTable *ht, PLHashEntry **hep, PLHashEntry *he)
|
||||
{
|
||||
PRUint32 i, n;
|
||||
PLHashEntry *next, **oldbuckets;
|
||||
PRUint32 nb;
|
||||
|
||||
*hep = he->next;
|
||||
(*ht->allocOps->freeEntry)(ht->allocPriv, he, HT_FREE_ENTRY);
|
||||
|
||||
/* Shrink table if it's underloaded */
|
||||
n = NBUCKETS(ht);
|
||||
if (--ht->nentries < UNDERLOADED(n)) {
|
||||
#ifdef HASHMETER
|
||||
ht->nshrinks++;
|
||||
#endif
|
||||
ht->shift++;
|
||||
oldbuckets = ht->buckets;
|
||||
nb = n * sizeof(PLHashEntry*) / 2;
|
||||
ht->buckets = (PLHashEntry**)(
|
||||
(*ht->allocOps->allocTable)(ht->allocPriv, nb));
|
||||
if (!ht->buckets) {
|
||||
ht->buckets = oldbuckets;
|
||||
return;
|
||||
}
|
||||
memset(ht->buckets, 0, nb);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
for (he = oldbuckets[i]; he; he = next) {
|
||||
next = he->next;
|
||||
hep = PL_HashTableRawLookup(ht, he->keyHash, he->key);
|
||||
PR_ASSERT(*hep == 0);
|
||||
he->next = 0;
|
||||
*hep = he;
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
memset(oldbuckets, 0xDB, n * sizeof oldbuckets[0]);
|
||||
#endif
|
||||
(*ht->allocOps->freeTable)(ht->allocPriv, oldbuckets);
|
||||
}
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRBool)
|
||||
PL_HashTableRemove(PLHashTable *ht, const void *key)
|
||||
{
|
||||
PLHashNumber keyHash;
|
||||
PLHashEntry *he, **hep;
|
||||
|
||||
keyHash = (*ht->keyHash)(key);
|
||||
hep = PL_HashTableRawLookup(ht, keyHash, key);
|
||||
if ((he = *hep) == 0)
|
||||
return PR_FALSE;
|
||||
|
||||
/* Hit; remove element */
|
||||
PL_HashTableRawRemove(ht, hep, he);
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void *)
|
||||
PL_HashTableLookup(PLHashTable *ht, const void *key)
|
||||
{
|
||||
PLHashNumber keyHash;
|
||||
PLHashEntry *he, **hep;
|
||||
|
||||
keyHash = (*ht->keyHash)(key);
|
||||
hep = PL_HashTableRawLookup(ht, keyHash, key);
|
||||
if ((he = *hep) != 0) {
|
||||
return he->value;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** Iterate over the entries in the hash table calling func for each
|
||||
** entry found. Stop if "f" says to (return value & PR_ENUMERATE_STOP).
|
||||
** Return a count of the number of elements scanned.
|
||||
*/
|
||||
PR_IMPLEMENT(int)
|
||||
PL_HashTableEnumerateEntries(PLHashTable *ht, PLHashEnumerator f, void *arg)
|
||||
{
|
||||
PLHashEntry *he, **hep;
|
||||
PRUint32 i, nbuckets;
|
||||
int rv, n = 0;
|
||||
PLHashEntry *todo = 0;
|
||||
|
||||
nbuckets = NBUCKETS(ht);
|
||||
for (i = 0; i < nbuckets; i++) {
|
||||
hep = &ht->buckets[i];
|
||||
while ((he = *hep) != 0) {
|
||||
rv = (*f)(he, n, arg);
|
||||
n++;
|
||||
if (rv & (HT_ENUMERATE_REMOVE | HT_ENUMERATE_UNHASH)) {
|
||||
*hep = he->next;
|
||||
if (rv & HT_ENUMERATE_REMOVE) {
|
||||
he->next = todo;
|
||||
todo = he;
|
||||
}
|
||||
} else {
|
||||
hep = &he->next;
|
||||
}
|
||||
if (rv & HT_ENUMERATE_STOP) {
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
hep = &todo;
|
||||
while ((he = *hep) != 0) {
|
||||
PL_HashTableRawRemove(ht, hep, he);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
#ifdef HASHMETER
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_HashTableDumpMeter(PLHashTable *ht, PLHashEnumerator dump, FILE *fp)
|
||||
{
|
||||
double mean, variance;
|
||||
PRUint32 nchains, nbuckets;
|
||||
PRUint32 i, n, maxChain, maxChainLen;
|
||||
PLHashEntry *he;
|
||||
|
||||
variance = 0;
|
||||
nchains = 0;
|
||||
maxChainLen = 0;
|
||||
nbuckets = NBUCKETS(ht);
|
||||
for (i = 0; i < nbuckets; i++) {
|
||||
he = ht->buckets[i];
|
||||
if (!he)
|
||||
continue;
|
||||
nchains++;
|
||||
for (n = 0; he; he = he->next)
|
||||
n++;
|
||||
variance += n * n;
|
||||
if (n > maxChainLen) {
|
||||
maxChainLen = n;
|
||||
maxChain = i;
|
||||
}
|
||||
}
|
||||
mean = (double)ht->nentries / nchains;
|
||||
variance = fabs(variance / nchains - mean * mean);
|
||||
|
||||
fprintf(fp, "\nHash table statistics:\n");
|
||||
fprintf(fp, " number of lookups: %u\n", ht->nlookups);
|
||||
fprintf(fp, " number of entries: %u\n", ht->nentries);
|
||||
fprintf(fp, " number of grows: %u\n", ht->ngrows);
|
||||
fprintf(fp, " number of shrinks: %u\n", ht->nshrinks);
|
||||
fprintf(fp, " mean steps per hash: %g\n", (double)ht->nsteps
|
||||
/ ht->nlookups);
|
||||
fprintf(fp, "mean hash chain length: %g\n", mean);
|
||||
fprintf(fp, " standard deviation: %g\n", sqrt(variance));
|
||||
fprintf(fp, " max hash chain length: %u\n", maxChainLen);
|
||||
fprintf(fp, " max hash chain: [%u]\n", maxChain);
|
||||
|
||||
for (he = ht->buckets[maxChain], i = 0; he; he = he->next, i++)
|
||||
if ((*dump)(he, i, fp) != HT_ENUMERATE_NEXT)
|
||||
break;
|
||||
}
|
||||
#endif /* HASHMETER */
|
||||
|
||||
PR_IMPLEMENT(int)
|
||||
PL_HashTableDump(PLHashTable *ht, PLHashEnumerator dump, FILE *fp)
|
||||
{
|
||||
int count;
|
||||
|
||||
count = PL_HashTableEnumerateEntries(ht, dump, fp);
|
||||
#ifdef HASHMETER
|
||||
PL_HashTableDumpMeter(ht, dump, fp);
|
||||
#endif
|
||||
return count;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PLHashNumber)
|
||||
PL_HashString(const void *key)
|
||||
{
|
||||
PLHashNumber h;
|
||||
const PRUint8 *s;
|
||||
|
||||
h = 0;
|
||||
for (s = (const PRUint8*)key; *s; s++)
|
||||
h = (h >> 28) ^ (h << 4) ^ *s;
|
||||
return h;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(int)
|
||||
PL_CompareStrings(const void *v1, const void *v2)
|
||||
{
|
||||
return strcmp((const char*)v1, (const char*)v2) == 0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(int)
|
||||
PL_CompareValues(const void *v1, const void *v2)
|
||||
{
|
||||
return v1 == v2;
|
||||
}
|
||||
131
mozilla/nsprpub/lib/ds/plhash.h
Normal file
131
mozilla/nsprpub/lib/ds/plhash.h
Normal file
@@ -0,0 +1,131 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef plhash_h___
|
||||
#define plhash_h___
|
||||
/*
|
||||
* API to portable hash table code.
|
||||
*/
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include "prtypes.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
typedef struct PLHashEntry PLHashEntry;
|
||||
typedef struct PLHashTable PLHashTable;
|
||||
typedef PRUint32 PLHashNumber;
|
||||
#define PL_HASH_BITS 32
|
||||
typedef PLHashNumber (PR_CALLBACK *PLHashFunction)(const void *key);
|
||||
typedef PRIntn (PR_CALLBACK *PLHashComparator)(const void *v1, const void *v2);
|
||||
typedef PRIntn (PR_CALLBACK *PLHashEnumerator)(PLHashEntry *he, PRIntn i, void *arg);
|
||||
|
||||
/* Flag bits in PLHashEnumerator's return value */
|
||||
#define HT_ENUMERATE_NEXT 0 /* continue enumerating entries */
|
||||
#define HT_ENUMERATE_STOP 1 /* stop enumerating entries */
|
||||
#define HT_ENUMERATE_REMOVE 2 /* remove and free the current entry */
|
||||
#define HT_ENUMERATE_UNHASH 4 /* just unhash the current entry */
|
||||
|
||||
typedef struct PLHashAllocOps {
|
||||
void * (PR_CALLBACK *allocTable)(void *pool, PRSize size);
|
||||
void (PR_CALLBACK *freeTable)(void *pool, void *item);
|
||||
PLHashEntry * (PR_CALLBACK *allocEntry)(void *pool, const void *key);
|
||||
void (PR_CALLBACK *freeEntry)(void *pool, PLHashEntry *he, PRUintn flag);
|
||||
} PLHashAllocOps;
|
||||
|
||||
#define HT_FREE_VALUE 0 /* just free the entry's value */
|
||||
#define HT_FREE_ENTRY 1 /* free value and entire entry */
|
||||
|
||||
struct PLHashEntry {
|
||||
PLHashEntry *next; /* hash chain linkage */
|
||||
PLHashNumber keyHash; /* key hash function result */
|
||||
const void *key; /* ptr to opaque key */
|
||||
void *value; /* ptr to opaque value */
|
||||
};
|
||||
|
||||
struct PLHashTable {
|
||||
PLHashEntry **buckets; /* vector of hash buckets */
|
||||
PRUint32 nentries; /* number of entries in table */
|
||||
PRUint32 shift; /* multiplicative hash shift */
|
||||
PLHashFunction keyHash; /* key hash function */
|
||||
PLHashComparator keyCompare; /* key comparison function */
|
||||
PLHashComparator valueCompare; /* value comparison function */
|
||||
PLHashAllocOps *allocOps; /* allocation operations */
|
||||
void *allocPriv; /* allocation private data */
|
||||
#ifdef HASHMETER
|
||||
PRUint32 nlookups; /* total number of lookups */
|
||||
PRUint32 nsteps; /* number of hash chains traversed */
|
||||
PRUint32 ngrows; /* number of table expansions */
|
||||
PRUint32 nshrinks; /* number of table contractions */
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* Create a new hash table.
|
||||
* If allocOps is null, use default allocator ops built on top of malloc().
|
||||
*/
|
||||
PR_EXTERN(PLHashTable *)
|
||||
PL_NewHashTable(PRUint32 n, PLHashFunction keyHash,
|
||||
PLHashComparator keyCompare, PLHashComparator valueCompare,
|
||||
PLHashAllocOps *allocOps, void *allocPriv);
|
||||
|
||||
PR_EXTERN(void)
|
||||
PL_HashTableDestroy(PLHashTable *ht);
|
||||
|
||||
/* Low level access methods */
|
||||
PR_EXTERN(PLHashEntry **)
|
||||
PL_HashTableRawLookup(PLHashTable *ht, PLHashNumber keyHash, const void *key);
|
||||
|
||||
PR_EXTERN(PLHashEntry *)
|
||||
PL_HashTableRawAdd(PLHashTable *ht, PLHashEntry **hep, PLHashNumber keyHash,
|
||||
const void *key, void *value);
|
||||
|
||||
PR_EXTERN(void)
|
||||
PL_HashTableRawRemove(PLHashTable *ht, PLHashEntry **hep, PLHashEntry *he);
|
||||
|
||||
/* Higher level access methods */
|
||||
PR_EXTERN(PLHashEntry *)
|
||||
PL_HashTableAdd(PLHashTable *ht, const void *key, void *value);
|
||||
|
||||
PR_EXTERN(PRBool)
|
||||
PL_HashTableRemove(PLHashTable *ht, const void *key);
|
||||
|
||||
PR_EXTERN(PRIntn)
|
||||
PL_HashTableEnumerateEntries(PLHashTable *ht, PLHashEnumerator f, void *arg);
|
||||
|
||||
PR_EXTERN(void *)
|
||||
PL_HashTableLookup(PLHashTable *ht, const void *key);
|
||||
|
||||
PR_EXTERN(PRIntn)
|
||||
PL_HashTableDump(PLHashTable *ht, PLHashEnumerator dump, FILE *fp);
|
||||
|
||||
/* General-purpose C string hash function. */
|
||||
PR_EXTERN(PLHashNumber)
|
||||
PL_HashString(const void *key);
|
||||
|
||||
/* Compare strings using strcmp(), return true if equal. */
|
||||
PR_EXTERN(int)
|
||||
PL_CompareStrings(const void *v1, const void *v2);
|
||||
|
||||
/* Stub function just returns v1 == v2 */
|
||||
PR_EXTERN(PRIntn)
|
||||
PL_CompareValues(const void *v1, const void *v2);
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* plhash_h___ */
|
||||
32
mozilla/nsprpub/lib/libc/Makefile
Normal file
32
mozilla/nsprpub/lib/libc/Makefile
Normal file
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../..
|
||||
|
||||
export NSPR20=1
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
DIRS = include src
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
export:: $(TARGETS)
|
||||
|
||||
install:: export
|
||||
20
mozilla/nsprpub/lib/libc/README
Normal file
20
mozilla/nsprpub/lib/libc/README
Normal file
@@ -0,0 +1,20 @@
|
||||
NSPR 2.0 libc functions
|
||||
-----------------------
|
||||
|
||||
Last edited: AOF 04 March 1997
|
||||
|
||||
This directory contains various libc-types of functions. All functions in
|
||||
this directory are platform independent, thread friendly (both safe and
|
||||
efficient). They are contributed from various sources, though the contri-
|
||||
butions are monitored by the NSPR group (mailto:freier).
|
||||
|
||||
All API items exported by these functions will contain the same three
|
||||
character prefix, "PL_" (Portable Library). Internal function names
|
||||
that are not exported (static) are of little concern, though some caution
|
||||
must be used on those elements that are 'extern' but not really intended
|
||||
to be part of the API. Those should all have a prefix of "_PL_" (is that
|
||||
legal?).
|
||||
|
||||
The responsibility for contributions in this area are distributed among
|
||||
all interested parties.
|
||||
|
||||
37
mozilla/nsprpub/lib/libc/include/Makefile
Normal file
37
mozilla/nsprpub/lib/libc/include/Makefile
Normal file
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../../..
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
HEADERS = $(wildcard *.h)
|
||||
|
||||
RELEASE_HEADERS = $(HEADERS)
|
||||
RELEASE_HEADERS_DEST = $(RELEASE_INCLUDE_DIR)
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
export:: $(HEADERS)
|
||||
$(INSTALL) -m 444 $(HEADERS) $(DIST)/include
|
||||
ifeq ($(MOZ_BITS),16)
|
||||
$(INSTALL) -m 444 $(HEADERS) $(MOZ_INCL)
|
||||
endif
|
||||
|
||||
install:: export
|
||||
|
||||
7
mozilla/nsprpub/lib/libc/include/README
Normal file
7
mozilla/nsprpub/lib/libc/include/README
Normal file
@@ -0,0 +1,7 @@
|
||||
NSPR 2.0 libc functions
|
||||
-----------------------
|
||||
|
||||
Last edited: AOF 04 March 1997
|
||||
|
||||
This directory contains the API for various libc-types of functions.
|
||||
|
||||
79
mozilla/nsprpub/lib/libc/include/plbase64.h
Normal file
79
mozilla/nsprpub/lib/libc/include/plbase64.h
Normal file
@@ -0,0 +1,79 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef _plbase64_h
|
||||
#define _plbase64_h
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
/*
|
||||
* PL_Base64Encode
|
||||
*
|
||||
* This routine encodes the data pointed to by the "src" parameter using the
|
||||
* base64 algorithm, and returns a pointer to the result. If the "srclen"
|
||||
* parameter is not zero, it specifies the length of the source data. If it
|
||||
* is zero, the source data is assumed to be null-terminated, and PL_strlen
|
||||
* is used to determine the source length. If the "dest" parameter is not
|
||||
* null, it is assumed to point to a buffer of sufficient size (which may be
|
||||
* calculated: ((srclen + 2)/3)*4) into which the encoded data is placed
|
||||
* (without any termination). If the "dest" parameter is null, a buffer is
|
||||
* allocated from the heap to hold the encoded data, and the result *will*
|
||||
* be terminated with an extra null character. It is the caller's
|
||||
* responsibility to free the result when it is allocated. A null is returned
|
||||
* if the allocation fails.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_Base64Encode
|
||||
(
|
||||
const char *src,
|
||||
PRUint32 srclen,
|
||||
char *dest
|
||||
);
|
||||
|
||||
/*
|
||||
* PL_Base64Decode
|
||||
*
|
||||
* This routine decodes the data pointed to by the "src" parameter using
|
||||
* the base64 algorithm, and returns a pointer to the result. The source
|
||||
* may either include or exclude any trailing '=' characters. If the
|
||||
* "srclen" parameter is not zero, it specifies the length of the source
|
||||
* data. If it is zero, PL_strlen will be used to determine the source
|
||||
* length. If the "dest" parameter is not null, it is assumed to point to
|
||||
* a buffer of sufficient size (which may be calculated: (srclen * 3)/4
|
||||
* when srclen includes the '=' characters) into which the decoded data
|
||||
* is placed (without any termination). If the "dest" parameter is null,
|
||||
* a buffer is allocated from the heap to hold the decoded data, and the
|
||||
* result *will* be terminated with an extra null character. It is the
|
||||
* caller's responsibility to free the result when it is allocated. A null
|
||||
* is retuned if the allocation fails, or if the source is not well-coded.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_Base64Decode
|
||||
(
|
||||
const char *src,
|
||||
PRUint32 srclen,
|
||||
char *dest
|
||||
);
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* _plbase64_h */
|
||||
47
mozilla/nsprpub/lib/libc/include/plerror.h
Normal file
47
mozilla/nsprpub/lib/libc/include/plerror.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
** File: plerror.h
|
||||
** Description: Simple routine to print translate the calling thread's
|
||||
** error numbers and print them.
|
||||
*/
|
||||
|
||||
#if defined(PLERROR_H)
|
||||
#else
|
||||
#define PLERROR_H
|
||||
|
||||
#include "prio.h"
|
||||
#include "prtypes.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
/*
|
||||
** Print the messages to "syserr" prepending 'msg' if not NULL.
|
||||
*/
|
||||
PR_EXTERN(void) PL_PrintError(const char *msg);
|
||||
|
||||
/*
|
||||
** Print the messages to specified output file prepending 'msg' if not NULL.
|
||||
*/
|
||||
PR_EXTERN(void) PL_FPrintError(PRFileDesc *output, const char *msg);
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* defined(PLERROR_H) */
|
||||
|
||||
/* plerror.h */
|
||||
62
mozilla/nsprpub/lib/libc/include/plgetopt.h
Normal file
62
mozilla/nsprpub/lib/libc/include/plgetopt.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
** File: plgetopt.h
|
||||
** Description: utilities to parse argc/argv
|
||||
*/
|
||||
|
||||
#if defined(PLGETOPT_H_)
|
||||
#else
|
||||
#define PLGETOPT_H_
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
typedef struct PLOptionInternal PLOptionInternal;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
PL_OPT_OK, /* all's well with the option */
|
||||
PL_OPT_EOL, /* end of options list */
|
||||
PL_OPT_BAD /* invalid option (and value) */
|
||||
} PLOptStatus;
|
||||
|
||||
typedef struct PLOptState
|
||||
{
|
||||
char option; /* the name of the option */
|
||||
const char *value; /* the value of that option | NULL */
|
||||
|
||||
PLOptionInternal *internal; /* private processing state */
|
||||
|
||||
} PLOptState;
|
||||
|
||||
PR_EXTERN(PLOptState*) PL_CreateOptState(
|
||||
PRIntn argc, char **argv, const char *options);
|
||||
|
||||
PR_EXTERN(void) PL_DestroyOptState(PLOptState *opt);
|
||||
|
||||
PR_EXTERN(PLOptStatus) PL_GetNextOpt(PLOptState *opt);
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* defined(PLGETOPT_H_) */
|
||||
|
||||
/* plgetopt.h */
|
||||
|
||||
89
mozilla/nsprpub/lib/libc/include/plresolv.h
Normal file
89
mozilla/nsprpub/lib/libc/include/plresolv.h
Normal file
@@ -0,0 +1,89 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* plresolv.h - asynchronous name resolution using DNS
|
||||
*/
|
||||
|
||||
#ifndef _PLRESOLV_H_
|
||||
#define _PLRESOLV_H_
|
||||
|
||||
/*
|
||||
** THIS IS WORK IN PROGRESS. DO NOT ATTEMPT TO USE ANY PORTION OF THIS
|
||||
** API UNTIL THIS MESSAGE NO LONGER EXISTS. IF YOU DO, THEN YOU SURRENDER
|
||||
** THE RIGHT TO COMPLAIN ABOUT ANY CONTENT.
|
||||
*/
|
||||
|
||||
#if defined(XP_UNIX)
|
||||
|
||||
#include <prtypes.h>
|
||||
#include <prnetdb.h>
|
||||
|
||||
NSPR_BEGIN_EXTERN_C
|
||||
|
||||
#define PL_RESOLVE_MAXHOSTENTBUF 1024
|
||||
#define PL_RESOLVE_DEFAULT_TIMEOUT 0
|
||||
|
||||
/* Error return codes */
|
||||
#define PL_RESOLVE_OK 0
|
||||
#define PL_RESOLVE_EWINIT 1 /* Failed to initialize window */
|
||||
#define PL_RESOLVE_EMAKE 2 /* Failed to create request */
|
||||
#define PL_RESOLVE_ELAUNCH 3 /* Error launching Async request */
|
||||
#define PL_RESOLVE_ETIMEDOUT 4 /* Request timed-out */
|
||||
#define PL_RESOLVE_EINVAL 5 /* Invalid argument */
|
||||
#define PL_RESOLVE_EOVERFLOW 6 /* Buffer Overflow */
|
||||
#define PL_RESOLVE_EUNKNOWN 7 /* berzerk error */
|
||||
|
||||
/* ----------- Function Prototypes ----------------*/
|
||||
|
||||
PR_EXTERN(PRStatus) PL_ResolveName(
|
||||
const char *name, unsigned char *buf,
|
||||
PRIntn bufsize, PRIntervalTime timeout,
|
||||
PRHostEnt *hostentry, PRIntervalTime *ttl);
|
||||
|
||||
PR_EXTERN(PRStatus) PL_ResolveAddr(
|
||||
const PRNetAddr *address, unsigned char *buf,
|
||||
PRIntn bufsize, PRIntervalTime timeout,
|
||||
PRHostEnt *hostentry, PRIntervalTime *ttl);
|
||||
|
||||
typedef struct PLResolveStats {
|
||||
int re_errors;
|
||||
int re_nu_look;
|
||||
int re_na_look;
|
||||
int re_replies;
|
||||
int re_requests;
|
||||
int re_resends;
|
||||
int re_sent;
|
||||
int re_timeouts;
|
||||
} PLResolveStats;
|
||||
|
||||
typedef struct PLResoveInfo {
|
||||
PRBool enabled;
|
||||
PRUint32 numNameLookups;
|
||||
PRUint32 numAddrLookups;
|
||||
PRUint32 numLookupsInProgress;
|
||||
PLResolveStats stats;
|
||||
} PLResoveInfo;
|
||||
|
||||
PR_EXTERN(void) PL_ResolveInfo(PLResoveInfo *info);
|
||||
|
||||
NSPR_END_EXTERN_C
|
||||
|
||||
#endif /* defined(XP_UNIX) */
|
||||
|
||||
#endif /* _PLRESOLV_H_ */
|
||||
428
mozilla/nsprpub/lib/libc/include/plstr.h
Normal file
428
mozilla/nsprpub/lib/libc/include/plstr.h
Normal file
@@ -0,0 +1,428 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef _plstr_h
|
||||
#define _plstr_h
|
||||
|
||||
/*
|
||||
* plstr.h
|
||||
*
|
||||
* This header file exports the API to the NSPR portable library or string-
|
||||
* handling functions.
|
||||
*
|
||||
* This API was not designed as an "optimal" or "ideal" string library; it
|
||||
* was based on the good ol' unix string.3 functions, and was written to
|
||||
*
|
||||
* 1) replace the libc functions, for cross-platform consistancy,
|
||||
* 2) complete the API on platforms lacking common functions (e.g.,
|
||||
* strcase*), and
|
||||
* 3) to implement some obvious "closure" functions that I've seen
|
||||
* people hacking around in our code.
|
||||
*
|
||||
* Point number three largely means that most functions have an "strn"
|
||||
* limited-length version, and all comparison routines have a non-case-
|
||||
* sensitive version available.
|
||||
*/
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
/*
|
||||
* PL_strlen
|
||||
*
|
||||
* Returns the length of the provided string, not including the trailing '\0'.
|
||||
*/
|
||||
|
||||
PR_EXTERN(PRUint32)
|
||||
PL_strlen(const char *str);
|
||||
|
||||
/*
|
||||
* PL_strnlen
|
||||
*
|
||||
* Returns the length of the provided string, not including the trailing '\0',
|
||||
* up to the indicated maximum. The string will not be examined beyond the
|
||||
* maximum; if no terminating '\0' is found, the maximum will be returned.
|
||||
*/
|
||||
|
||||
PR_EXTERN(PRUint32)
|
||||
PL_strnlen(const char *str, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strcpy
|
||||
*
|
||||
* Copies the source string, up to and including the trailing '\0', into the
|
||||
* destination buffer. It does not (can not) verify that the destination
|
||||
* buffer is large enough. It returns the "dest" argument.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strcpy(char *dest, const char *src);
|
||||
|
||||
/*
|
||||
* PL_strncpy
|
||||
*
|
||||
* Copies the source string into the destination buffer, up to and including
|
||||
* the trailing '\0' or up to and including the max'th character, whichever
|
||||
* comes first. It does not (can not) verify that the destination buffer is
|
||||
* large enough. If the source string is longer than the maximum length,
|
||||
* the result will *not* be null-terminated (JLRU).
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strncpy(char *dest, const char *src, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strncpyz
|
||||
*
|
||||
* Copies the source string into the destination buffer, up to and including
|
||||
* the trailing '\0' or up but not including the max'th character, whichever
|
||||
* comes first. It does not (can not) verify that the destination buffer is
|
||||
* large enough. The destination string is always terminated with a '\0',
|
||||
* unlike the traditional libc implementation. It returns the "dest" argument.
|
||||
*
|
||||
* NOTE: If you call this with a source "abcdefg" and a max of 5, the
|
||||
* destination will end up with "abcd\0" (i.e., it's strlen length will be 4)!
|
||||
*
|
||||
* This means you can do this:
|
||||
*
|
||||
* char buffer[ SOME_SIZE ];
|
||||
* PL_strncpyz(buffer, src, sizeof(buffer));
|
||||
*
|
||||
* and the result will be properly terminated.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strncpyz(char *dest, const char *src, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strdup
|
||||
*
|
||||
* Returns a pointer to a malloc'd extent of memory containing a duplicate
|
||||
* of the argument string. The size of the allocated extent is one greater
|
||||
* than the length of the argument string, because of the terminator. A
|
||||
* null argument, like a zero-length argument, will result in a pointer to
|
||||
* a one-byte extent containing the null value. This routine returns null
|
||||
* upon malloc failure.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strdup(const char *s);
|
||||
|
||||
/*
|
||||
* PL_strfree
|
||||
*
|
||||
* Free memory allocated by PL_strdup
|
||||
*/
|
||||
|
||||
PR_EXTERN(void)
|
||||
PL_strfree(char *s);
|
||||
|
||||
/*
|
||||
* PL_strndup
|
||||
*
|
||||
* Returns a pointer to a malloc'd extent of memory containing a duplicate
|
||||
* of the argument string, up to the maximum specified. If the argument
|
||||
* string has a length greater than the value of the specified maximum, the
|
||||
* return value will be a pointer to an extent of memory of length one
|
||||
* greater than the maximum specified. A null string, a zero-length string,
|
||||
* or a zero maximum will all result in a pointer to a one-byte extent
|
||||
* containing the null value. This routine returns null upon malloc failure.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strndup(const char *s, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strcat
|
||||
*
|
||||
* Appends a copy of the string pointed to by the second argument to the
|
||||
* end of the string pointed to by the first. The destination buffer is
|
||||
* not (can not be) checked for sufficient size. A null destination
|
||||
* argument returns null; otherwise, the first argument is returned.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strcat(char *dst, const char *src);
|
||||
|
||||
/*
|
||||
* PL_strncat
|
||||
*
|
||||
* Appends a copy of the string pointed to by the second argument, up to
|
||||
* the maximum size specified, to the end of the string pointed to by the
|
||||
* first. The destination buffer is not (can not be) checked for sufficient
|
||||
* size. A null destination argument returns null; otherwise, the first
|
||||
* argument is returned. If the maximum size limits the copy, then the
|
||||
* result will *not* be null-terminated (JLRU). A null destination
|
||||
* returns null; otherwise, the destination argument is returned.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strncat(char *dst, const char *src, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strcatn
|
||||
*
|
||||
* Appends a copy of the string pointed to by the third argument, to the
|
||||
* end of the string pointed to by the first. The second argument specifies
|
||||
* the maximum size of the destination buffer, including the null termination.
|
||||
* If the existing string in dst is longer than the max, no action is taken.
|
||||
* The resulting string will be null-terminated. A null destination returns
|
||||
* null; otherwise, the destination argument is returned.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strcatn(char *dst, PRUint32 max, const char *src);
|
||||
|
||||
/*
|
||||
* PL_strcmp
|
||||
*
|
||||
* Returns an integer, the sign of which -- positive, zero, or negative --
|
||||
* reflects the lexical sorting order of the two strings indicated. The
|
||||
* result is positive if the first string comes after the second. The
|
||||
* NSPR implementation is not i18n.
|
||||
*/
|
||||
|
||||
PR_EXTERN(PRIntn)
|
||||
PL_strcmp(const char *a, const char *b);
|
||||
|
||||
/*
|
||||
* PL_strncmp
|
||||
*
|
||||
* Returns an integer, the sign of which -- positive, zero, or negative --
|
||||
* reflects the lexical sorting order of the two strings indicated, up to
|
||||
* the maximum specified. The result is positive if the first string comes
|
||||
* after the second. The NSPR implementation is not i18n. If the maximum
|
||||
* is zero, only the existance or non-existance (pointer is null) of the
|
||||
* strings is compared.
|
||||
*/
|
||||
|
||||
PR_EXTERN(PRIntn)
|
||||
PL_strncmp(const char *a, const char *b, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strcasecmp
|
||||
*
|
||||
* Returns an integer, the sign of which -- positive, zero or negative --
|
||||
* reflects the case-insensitive lexical sorting order of the two strings
|
||||
* indicated. The result is positive if the first string comes after the
|
||||
* second. The NSPR implementation is not i18n.
|
||||
*/
|
||||
|
||||
PR_EXTERN(PRIntn)
|
||||
PL_strcasecmp(const char *a, const char *b);
|
||||
|
||||
/*
|
||||
* PL_strncasecmp
|
||||
*
|
||||
* Returns an integer, the sign of which -- positive, zero or negative --
|
||||
* reflects the case-insensitive lexical sorting order of the first n characters
|
||||
* of the two strings indicated. The result is positive if the first string comes
|
||||
* after the second. The NSPR implementation is not i18n.
|
||||
*/
|
||||
|
||||
PR_EXTERN(PRIntn)
|
||||
PL_strncasecmp(const char *a, const char *b, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strchr
|
||||
*
|
||||
* Returns a pointer to the first instance of the specified character in the
|
||||
* provided string. It returns null if the character is not found, or if the
|
||||
* provided string is null. The character may be the null character.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strchr(const char *s, char c);
|
||||
|
||||
/*
|
||||
* PL_strrchr
|
||||
*
|
||||
* Returns a pointer to the last instance of the specified character in the
|
||||
* provided string. It returns null if the character is not found, or if the
|
||||
* provided string is null. The character may be the null character.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strrchr(const char *s, char c);
|
||||
|
||||
/*
|
||||
* PL_strnchr
|
||||
*
|
||||
* Returns a pointer to the first instance of the specified character within the
|
||||
* first n characters of the provided string. It returns null if the character
|
||||
* is not found, or if the provided string is null. The character may be the
|
||||
* null character.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strnchr(const char *s, char c, PRUint32 n);
|
||||
|
||||
/*
|
||||
* PL_strnrchr
|
||||
*
|
||||
* Returns a pointer to the last instance of the specified character within the
|
||||
* first n characters of the provided string. It returns null if the character is
|
||||
* not found, or if the provided string is null. The character may be the null
|
||||
* character.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strnrchr(const char *s, char c, PRUint32 n);
|
||||
|
||||
/*
|
||||
* NOTE: Looking for strcasechr, strcaserchr, strncasechr, or strncaserchr?
|
||||
* Use strpbrk, strprbrk, strnpbrk or strnprbrk.
|
||||
*/
|
||||
|
||||
/*
|
||||
* PL_strpbrk
|
||||
*
|
||||
* Returns a pointer to the first instance in the first string of any character
|
||||
* (not including the terminating null character) of the second string. It returns
|
||||
* null if either string is null.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strpbrk(const char *s, const char *list);
|
||||
|
||||
/*
|
||||
* PL_strprbrk
|
||||
*
|
||||
* Returns a pointer to the last instance in the first string of any character
|
||||
* (not including the terminating null character) of the second string. It returns
|
||||
* null if either string is null.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strprbrk(const char *s, const char *list);
|
||||
|
||||
/*
|
||||
* PL_strnpbrk
|
||||
*
|
||||
* Returns a pointer to the first instance (within the first n characters) of any
|
||||
* character (not including the terminating null character) of the second string.
|
||||
* It returns null if either string is null.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strnpbrk(const char *s, const char *list, PRUint32 n);
|
||||
|
||||
/*
|
||||
* PL_strnprbrk
|
||||
*
|
||||
* Returns a pointer to the last instance (within the first n characters) of any
|
||||
* character (not including the terminating null character) of the second string.
|
||||
* It returns null if either string is null.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strnprbrk(const char *s, const char *list, PRUint32 n);
|
||||
|
||||
/*
|
||||
* PL_strstr
|
||||
*
|
||||
* Returns a pointer to the first instance of the little string within the
|
||||
* big one. It returns null if either string is null.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strstr(const char *big, const char *little);
|
||||
|
||||
/*
|
||||
* PL_strrstr
|
||||
*
|
||||
* Returns a pointer to the last instance of the little string within the big one.
|
||||
* It returns null if either string is null.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strrstr(const char *big, const char *little);
|
||||
|
||||
/*
|
||||
* PL_strnstr
|
||||
*
|
||||
* Returns a pointer to the first instance of the little string within the first
|
||||
* n characters of the big one. It returns null if either string is null. It
|
||||
* returns null if the length of the little string is greater than n.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strnstr(const char *big, const char *little, PRUint32 n);
|
||||
|
||||
/*
|
||||
* PL_strnrstr
|
||||
*
|
||||
* Returns a pointer to the last instance of the little string within the first
|
||||
* n characters of the big one. It returns null if either string is null. It
|
||||
* returns null if the length of the little string is greater than n.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strnrstr(const char *big, const char *little, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strcasestr
|
||||
*
|
||||
* Returns a pointer to the first instance of the little string within the big one,
|
||||
* ignoring case. It returns null if either string is null.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strcasestr(const char *big, const char *little);
|
||||
|
||||
/*
|
||||
* PL_strcaserstr
|
||||
*
|
||||
* Returns a pointer to the last instance of the little string within the big one,
|
||||
* ignoring case. It returns null if either string is null.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strcaserstr(const char *big, const char *little);
|
||||
|
||||
/*
|
||||
* PL_strncasestr
|
||||
*
|
||||
* Returns a pointer to the first instance of the listtle string within the first
|
||||
* n characters of the big one, ignoring case. It returns null if either string is
|
||||
* null. It returns null if the length of the little string is greater than n.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strncasestr(const char *big, const char *little, PRUint32 max);
|
||||
|
||||
/*
|
||||
* PL_strncaserstr
|
||||
*
|
||||
* Returns a pointer to the last instance of the little string within the first
|
||||
* n characters of the big one, ignoring case. It returns null if either string is
|
||||
* null. It returns null if the length of the little string is greater than n.
|
||||
*/
|
||||
|
||||
PR_EXTERN(char *)
|
||||
PL_strncaserstr(const char *big, const char *little, PRUint32 max);
|
||||
|
||||
/*
|
||||
* Things not (yet?) included: strspn/strcspn, strtok/strtok_r, strsep.
|
||||
* memchr, memcmp, memcpy, memccpy, index, rindex, bcmp, bcopy, bzero.
|
||||
* Any and all i18n/l10n stuff.
|
||||
*/
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* _plstr_h */
|
||||
105
mozilla/nsprpub/lib/libc/src/Makefile
Normal file
105
mozilla/nsprpub/lib/libc/src/Makefile
Normal file
@@ -0,0 +1,105 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../../..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
# Disable optimization of the nspr on SunOS4.1.3
|
||||
ifeq ($(OS_ARCH),SunOS)
|
||||
ifeq ($(OS_RELEASE),4.1.3_U1)
|
||||
OPTIMIZER =
|
||||
endif
|
||||
endif
|
||||
|
||||
INCLUDES = -I$(DIST)/include
|
||||
|
||||
CSRCS =\
|
||||
strlen.c \
|
||||
strcpy.c \
|
||||
strdup.c \
|
||||
strcat.c \
|
||||
strcmp.c \
|
||||
strccmp.c \
|
||||
strchr.c \
|
||||
strpbrk.c \
|
||||
strstr.c \
|
||||
strcstr.c \
|
||||
base64.c \
|
||||
plerror.c \
|
||||
plgetopt.c \
|
||||
$(NULL)
|
||||
|
||||
LIBRARY_NAME = plc
|
||||
LIBRARY_VERSION = $(MOD_VERSION)
|
||||
|
||||
RELEASE_LIBS = $(TARGETS)
|
||||
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
ifeq (,$(filter-out WIN16 OS2,$(OS_TARGET)))
|
||||
EXTRA_LIBS = $(DIST)/lib/nspr$(MOD_VERSION).lib
|
||||
else
|
||||
DLLBASE=/BASE:0x30000000
|
||||
RES=$(OBJDIR)/plc.res
|
||||
RESNAME=$(MOD_DEPTH)/pr/src/nspr.rc
|
||||
EXTRA_LIBS = $(DIST)/lib/libnspr$(MOD_VERSION).lib
|
||||
endif
|
||||
else
|
||||
ifeq ($(OS_ARCH), AIX)
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
OS_LIBS += -lc
|
||||
else
|
||||
OS_LIBS += -lc_r
|
||||
endif
|
||||
endif
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
|
||||
EXTRA_LIBS = -L$(DIST)/lib -lnspr$(MOD_VERSION)_shr
|
||||
else
|
||||
EXTRA_LIBS = -L$(DIST)/lib -lnspr$(MOD_VERSION)
|
||||
endif
|
||||
endif
|
||||
|
||||
# On NCR and SCO_SV, we can't link with extra libraries when
|
||||
# we build a shared library. If we do so, the linker doesn't
|
||||
# complain, but we would run into weird problems at run-time.
|
||||
# Therefore on these platforms, we link just the .o files.
|
||||
ifeq ($(OS_ARCH),NCR)
|
||||
EXTRA_LIBS =
|
||||
endif
|
||||
ifeq ($(OS_ARCH),SCO_SV)
|
||||
EXTRA_LIBS =
|
||||
endif
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
#
|
||||
# The Client build wants the shared libraries in $(DIST)/bin,
|
||||
# so we also install them there.
|
||||
#
|
||||
|
||||
export:: $(TARGETS)
|
||||
$(INSTALL) -m 444 $(TARGETS) $(DIST)/lib
|
||||
$(INSTALL) -m 444 $(SHARED_LIBRARY) $(DIST)/bin
|
||||
ifeq ($(MOZ_BITS),16)
|
||||
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/lib
|
||||
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/bin
|
||||
endif
|
||||
|
||||
install:: export
|
||||
|
||||
20
mozilla/nsprpub/lib/libc/src/README
Normal file
20
mozilla/nsprpub/lib/libc/src/README
Normal file
@@ -0,0 +1,20 @@
|
||||
NSPR 2.0 libc functions
|
||||
-----------------------
|
||||
|
||||
Last edited: AOF 04 March 1997
|
||||
|
||||
This directory contains various libc-types of functions. All functions in
|
||||
this directory are platform independent, thread friendly (both safe and
|
||||
efficient). They are contributed from various sources, though the contri-
|
||||
butions are monitored by the NSPR group (mailto:freier).
|
||||
|
||||
All API items exported by these functions will contain the same three
|
||||
character prefix, "PL_" (Portable Library). Internal function names
|
||||
that are not exported (static) are of little concern, though some caution
|
||||
must be used on those elements that are 'extern' but not really intended
|
||||
to be part of the API. Those should all have a prefix of "_PL_" (is that
|
||||
legal?).
|
||||
|
||||
The responsibility for contributions in this area are distributed among
|
||||
all interested parties.
|
||||
|
||||
403
mozilla/nsprpub/lib/libc/src/base64.c
Normal file
403
mozilla/nsprpub/lib/libc/src/base64.c
Normal file
@@ -0,0 +1,403 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plbase64.h"
|
||||
#include "prlog.h" /* For PR_NOT_REACHED */
|
||||
#include "prmem.h" /* for malloc / PR_MALLOC */
|
||||
#include "plstr.h" /* for PL_strlen */
|
||||
|
||||
static unsigned char *base = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
|
||||
static void
|
||||
encode3to4
|
||||
(
|
||||
const unsigned char *src,
|
||||
unsigned char *dest
|
||||
)
|
||||
{
|
||||
PRUint32 b32 = (PRUint32)0;
|
||||
PRIntn i, j = 18;
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
{
|
||||
b32 <<= 8;
|
||||
b32 |= (PRUint32)src[i];
|
||||
}
|
||||
|
||||
for( i = 0; i < 4; i++ )
|
||||
{
|
||||
dest[i] = base[ (PRUint32)((b32>>j) & 0x3F) ];
|
||||
j -= 6;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
encode2to4
|
||||
(
|
||||
const unsigned char *src,
|
||||
unsigned char *dest
|
||||
)
|
||||
{
|
||||
dest[0] = base[ (PRUint32)((src[0]>>2) & 0x3F) ];
|
||||
dest[1] = base[ (PRUint32)(((src[0] & 0x03) << 4) | ((src[1] >> 4) & 0x0F)) ];
|
||||
dest[2] = base[ (PRUint32)((src[1] & 0x0F) << 2) ];
|
||||
dest[3] = (unsigned char)'=';
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
encode1to4
|
||||
(
|
||||
const unsigned char *src,
|
||||
unsigned char *dest
|
||||
)
|
||||
{
|
||||
dest[0] = base[ (PRUint32)((src[0]>>2) & 0x3F) ];
|
||||
dest[1] = base[ (PRUint32)((src[0] & 0x03) << 4) ];
|
||||
dest[2] = (unsigned char)'=';
|
||||
dest[3] = (unsigned char)'=';
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
encode
|
||||
(
|
||||
const unsigned char *src,
|
||||
PRUint32 srclen,
|
||||
unsigned char *dest
|
||||
)
|
||||
{
|
||||
while( srclen >= 3 )
|
||||
{
|
||||
encode3to4(src, dest);
|
||||
src += 3;
|
||||
dest += 4;
|
||||
srclen -= 3;
|
||||
}
|
||||
|
||||
switch( srclen )
|
||||
{
|
||||
case 2:
|
||||
encode2to4(src, dest);
|
||||
break;
|
||||
case 1:
|
||||
encode1to4(src, dest);
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
PR_NOT_REACHED("coding error");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* PL_Base64Encode
|
||||
*
|
||||
* If the destination argument is NULL, a return buffer is
|
||||
* allocated, and the data therein will be null-terminated.
|
||||
* If the destination argument is not NULL, it is assumed to
|
||||
* be of sufficient size, and the contents will not be null-
|
||||
* terminated by this routine.
|
||||
*
|
||||
* Returns null if the allocation fails.
|
||||
*/
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_Base64Encode
|
||||
(
|
||||
const char *src,
|
||||
PRUint32 srclen,
|
||||
char *dest
|
||||
)
|
||||
{
|
||||
if( 0 == srclen )
|
||||
{
|
||||
srclen = PL_strlen(src);
|
||||
}
|
||||
|
||||
if( (char *)0 == dest )
|
||||
{
|
||||
PRUint32 destlen = ((srclen + 2)/3) * 4;
|
||||
dest = (char *)PR_MALLOC(destlen + 1);
|
||||
if( (char *)0 == dest )
|
||||
{
|
||||
return (char *)0;
|
||||
}
|
||||
dest[ destlen ] = (char)0; /* null terminate */
|
||||
}
|
||||
|
||||
encode((const unsigned char *)src, srclen, (unsigned char *)dest);
|
||||
return dest;
|
||||
}
|
||||
|
||||
static PRInt32
|
||||
codetovalue
|
||||
(
|
||||
unsigned char c
|
||||
)
|
||||
{
|
||||
if( (c >= (unsigned char)'A') && (c <= (unsigned char)'Z') )
|
||||
{
|
||||
return (PRInt32)(c - (unsigned char)'A');
|
||||
}
|
||||
else if( (c >= (unsigned char)'a') && (c <= (unsigned char)'z') )
|
||||
{
|
||||
return ((PRInt32)(c - (unsigned char)'a') +26);
|
||||
}
|
||||
else if( (c >= (unsigned char)'0') && (c <= (unsigned char)'9') )
|
||||
{
|
||||
return ((PRInt32)(c - (unsigned char)'0') +52);
|
||||
}
|
||||
else if( (unsigned char)'+' == c )
|
||||
{
|
||||
return (PRInt32)62;
|
||||
}
|
||||
else if( (unsigned char)'/' == c )
|
||||
{
|
||||
return (PRInt32)63;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static PRStatus
|
||||
decode4to3
|
||||
(
|
||||
const unsigned char *src,
|
||||
unsigned char *dest
|
||||
)
|
||||
{
|
||||
PRUint32 b32 = (PRUint32)0;
|
||||
PRInt32 bits;
|
||||
PRIntn i;
|
||||
|
||||
for( i = 0; i < 4; i++ )
|
||||
{
|
||||
bits = codetovalue(src[i]);
|
||||
if( bits < 0 )
|
||||
{
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
b32 <<= 6;
|
||||
b32 |= bits;
|
||||
}
|
||||
|
||||
dest[0] = (unsigned char)((b32 >> 16) & 0xFF);
|
||||
dest[1] = (unsigned char)((b32 >> 8) & 0xFF);
|
||||
dest[2] = (unsigned char)((b32 ) & 0xFF);
|
||||
|
||||
return PR_SUCCESS;
|
||||
}
|
||||
|
||||
static PRStatus
|
||||
decode3to2
|
||||
(
|
||||
const unsigned char *src,
|
||||
unsigned char *dest
|
||||
)
|
||||
{
|
||||
PRUint32 b32 = (PRUint32)0;
|
||||
PRInt32 bits;
|
||||
PRUint32 ubits;
|
||||
|
||||
bits = codetovalue(src[0]);
|
||||
if( bits < 0 )
|
||||
{
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
b32 = (PRUint32)bits;
|
||||
b32 <<= 6;
|
||||
|
||||
bits = codetovalue(src[1]);
|
||||
if( bits < 0 )
|
||||
{
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
b32 |= (PRUint32)bits;
|
||||
b32 <<= 4;
|
||||
|
||||
bits = codetovalue(src[2]);
|
||||
if( bits < 0 )
|
||||
{
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
ubits = (PRUint32)bits;
|
||||
b32 |= (ubits >> 2);
|
||||
|
||||
dest[0] = (unsigned char)((b32 >> 8) & 0xFF);
|
||||
dest[1] = (unsigned char)((b32 ) & 0xFF);
|
||||
|
||||
return PR_SUCCESS;
|
||||
}
|
||||
|
||||
static PRStatus
|
||||
decode2to1
|
||||
(
|
||||
const unsigned char *src,
|
||||
unsigned char *dest
|
||||
)
|
||||
{
|
||||
PRUint32 b32;
|
||||
PRUint32 ubits;
|
||||
PRInt32 bits;
|
||||
|
||||
bits = codetovalue(src[0]);
|
||||
if( bits < 0 )
|
||||
{
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
ubits = (PRUint32)bits;
|
||||
b32 = (ubits << 2);
|
||||
|
||||
bits = codetovalue(src[1]);
|
||||
if( bits < 0 )
|
||||
{
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
ubits = (PRUint32)bits;
|
||||
b32 |= (ubits >> 4);
|
||||
|
||||
dest[0] = (unsigned char)b32;
|
||||
|
||||
return PR_SUCCESS;
|
||||
}
|
||||
|
||||
static PRStatus
|
||||
decode
|
||||
(
|
||||
const unsigned char *src,
|
||||
PRUint32 srclen,
|
||||
unsigned char *dest
|
||||
)
|
||||
{
|
||||
PRStatus rv;
|
||||
|
||||
while( srclen >= 4 )
|
||||
{
|
||||
rv = decode4to3(src, dest);
|
||||
if( PR_SUCCESS != rv )
|
||||
{
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
src += 4;
|
||||
dest += 3;
|
||||
srclen -= 4;
|
||||
}
|
||||
|
||||
switch( srclen )
|
||||
{
|
||||
case 3:
|
||||
rv = decode3to2(src, dest);
|
||||
break;
|
||||
case 2:
|
||||
rv = decode2to1(src, dest);
|
||||
break;
|
||||
case 1:
|
||||
rv = PR_FAILURE;
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
PR_NOT_REACHED("coding error");
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*
|
||||
* PL_Base64Decode
|
||||
*
|
||||
* If the destination argument is NULL, a return buffer is
|
||||
* allocated and the data therein will be null-terminated.
|
||||
* If the destination argument is not null, it is assumed
|
||||
* to be of sufficient size, and the data will not be null-
|
||||
* terminated by this routine.
|
||||
*
|
||||
* Returns null if the allocation fails, or if the source string is
|
||||
* not well-formed.
|
||||
*/
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_Base64Decode
|
||||
(
|
||||
const char *src,
|
||||
PRUint32 srclen,
|
||||
char *dest
|
||||
)
|
||||
{
|
||||
PRStatus status;
|
||||
PRBool allocated = PR_FALSE;
|
||||
|
||||
if( 0 == srclen )
|
||||
{
|
||||
srclen = PL_strlen(src);
|
||||
}
|
||||
|
||||
if( 0 == (srclen & 3) )
|
||||
{
|
||||
if( (char)'=' == src[ srclen-1 ] )
|
||||
{
|
||||
if( (char)'=' == src[ srclen-2 ] )
|
||||
{
|
||||
srclen -= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
srclen -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( (char *)0 == dest )
|
||||
{
|
||||
PRUint32 destlen = ((srclen * 3) / 4);
|
||||
dest = (char *)PR_MALLOC(destlen + 1);
|
||||
if( (char *)0 == dest )
|
||||
{
|
||||
return (char *)0;
|
||||
}
|
||||
dest[ destlen ] = (char)0; /* null terminate */
|
||||
allocated = PR_TRUE;
|
||||
}
|
||||
|
||||
status = decode((const unsigned char *)src, srclen, (unsigned char *)dest);
|
||||
if( PR_SUCCESS != status )
|
||||
{
|
||||
if( PR_TRUE == allocated )
|
||||
{
|
||||
PR_DELETE(dest);
|
||||
}
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
||||
144
mozilla/nsprpub/lib/libc/src/plerror.c
Normal file
144
mozilla/nsprpub/lib/libc/src/plerror.c
Normal file
@@ -0,0 +1,144 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
** File:plerror.c
|
||||
** Description: Simple routine to print translate the calling thread's
|
||||
** error numbers and print them to "syserr".
|
||||
*/
|
||||
|
||||
#include "plerror.h"
|
||||
|
||||
#include "prprf.h"
|
||||
#include "prerror.h"
|
||||
|
||||
PR_IMPLEMENT(void) PL_FPrintError(PRFileDesc *fd, const char *msg)
|
||||
{
|
||||
static const char *tags[] =
|
||||
{
|
||||
"PR_OUT_OF_MEMORY_ERROR",
|
||||
"PR_BAD_DESCRIPTOR_ERROR",
|
||||
"PR_WOULD_BLOCK_ERROR",
|
||||
"PR_ACCESS_FAULT_ERROR",
|
||||
"PR_INVALID_METHOD_ERROR",
|
||||
"PR_ILLEGAL_ACCESS_ERROR",
|
||||
"PR_UNKNOWN_ERROR",
|
||||
"PR_PENDING_INTERRUPT_ERROR",
|
||||
"PR_NOT_IMPLEMENTED_ERROR",
|
||||
"PR_IO_ERROR",
|
||||
"PR_IO_TIMEOUT_ERROR",
|
||||
"PR_IO_PENDING_ERROR",
|
||||
"PR_DIRECTORY_OPEN_ERROR",
|
||||
"PR_INVALID_ARGUMENT_ERROR",
|
||||
"PR_ADDRESS_NOT_AVAILABLE_ERROR",
|
||||
"PR_ADDRESS_NOT_SUPPORTED_ERROR",
|
||||
"PR_IS_CONNECTED_ERROR",
|
||||
"PR_BAD_ADDRESS_ERROR",
|
||||
"PR_ADDRESS_IN_USE_ERROR",
|
||||
"PR_CONNECT_REFUSED_ERROR",
|
||||
"PR_NETWORK_UNREACHABLE_ERROR",
|
||||
"PR_CONNECT_TIMEOUT_ERROR",
|
||||
"PR_NOT_CONNECTED_ERROR",
|
||||
"PR_LOAD_LIBRARY_ERROR",
|
||||
"PR_UNLOAD_LIBRARY_ERROR",
|
||||
"PR_FIND_SYMBOL_ERROR",
|
||||
"PR_INSUFFICIENT_RESOURCES_ERROR",
|
||||
"PR_DIRECTORY_LOOKUP_ERROR",
|
||||
"PR_TPD_RANGE_ERROR",
|
||||
"PR_PROC_DESC_TABLE_FULL_ERROR",
|
||||
"PR_SYS_DESC_TABLE_FULL_ERROR",
|
||||
"PR_NOT_SOCKET_ERROR",
|
||||
"PR_NOT_TCP_SOCKET_ERROR",
|
||||
"PR_SOCKET_ADDRESS_IS_BOUND_ERROR",
|
||||
"PR_NO_ACCESS_RIGHTS_ERROR",
|
||||
"PR_OPERATION_NOT_SUPPORTED_ERROR",
|
||||
"PR_PROTOCOL_NOT_SUPPORTED_ERROR",
|
||||
"PR_REMOTE_FILE_ERROR",
|
||||
"PR_BUFFER_OVERFLOW_ERROR",
|
||||
"PR_CONNECT_RESET_ERROR",
|
||||
"PR_RANGE_ERROR",
|
||||
"PR_DEADLOCK_ERROR",
|
||||
"PR_FILE_IS_LOCKED_ERROR",
|
||||
"PR_FILE_TOO_BIG_ERROR",
|
||||
"PR_NO_DEVICE_SPACE_ERROR",
|
||||
"PR_PIPE_ERROR",
|
||||
"PR_NO_SEEK_DEVICE_ERROR",
|
||||
"PR_IS_DIRECTORY_ERROR",
|
||||
"PR_LOOP_ERROR",
|
||||
"PR_NAME_TOO_LONG_ERROR",
|
||||
"PR_FILE_NOT_FOUND_ERROR",
|
||||
"PR_NOT_DIRECTORY_ERROR",
|
||||
"PR_READ_ONLY_FILESYSTEM_ERROR",
|
||||
"PR_DIRECTORY_NOT_EMPTY_ERROR",
|
||||
"PR_FILESYSTEM_MOUNTED_ERROR",
|
||||
"PR_NOT_SAME_DEVICE_ERROR",
|
||||
"PR_DIRECTORY_CORRUPTED_ERROR",
|
||||
"PR_FILE_EXISTS_ERROR",
|
||||
"PR_MAX_DIRECTORY_ENTRIES_ERROR",
|
||||
"PR_INVALID_DEVICE_STATE_ERROR",
|
||||
"PR_DEVICE_IS_LOCKED_ERROR",
|
||||
"PR_NO_MORE_FILES_ERROR",
|
||||
"PR_END_OF_FILE_ERROR",
|
||||
"PR_FILE_SEEK_ERROR",
|
||||
"PR_FILE_IS_BUSY_ERROR",
|
||||
"PR_IN_PROGRESS_ERROR",
|
||||
"PR_ALREADY_INITIATED_ERROR",
|
||||
"PR_GROUP_EMPTY_ERROR",
|
||||
"PR_INVALID_STATE_ERROR",
|
||||
"PR_MAX_ERROR"
|
||||
};
|
||||
|
||||
PRErrorCode error = PR_GetError();
|
||||
PRInt32 oserror = PR_GetOSError();
|
||||
PRIntn thoseIKnowAbout = sizeof(tags) / sizeof(char*);
|
||||
PRIntn lastError = PR_NSPR_ERROR_BASE + thoseIKnowAbout;
|
||||
|
||||
if (NULL != msg) PR_fprintf(fd, "%s: ", msg);
|
||||
if ((error < PR_NSPR_ERROR_BASE) || (error > lastError))
|
||||
PR_fprintf(
|
||||
fd, " (%d)OUT OF RANGE, oserror = %d\n", error, oserror);
|
||||
else
|
||||
PR_fprintf(
|
||||
fd, "%s(%d), oserror = %d\n",
|
||||
tags[error - PR_NSPR_ERROR_BASE], error, oserror);
|
||||
} /* PL_FPrintError */
|
||||
|
||||
PR_IMPLEMENT(void) PL_PrintError(const char *msg)
|
||||
{
|
||||
static PRFileDesc *fd = NULL;
|
||||
if (NULL == fd) fd = PR_GetSpecialFD(PR_StandardError);
|
||||
PL_FPrintError(fd, msg);
|
||||
} /* PL_PrintError */
|
||||
|
||||
#if defined(WIN16)
|
||||
/*
|
||||
** libmain() is a required function for win16
|
||||
**
|
||||
*/
|
||||
int CALLBACK LibMain( HINSTANCE hInst, WORD wDataSeg,
|
||||
WORD cbHeapSize, LPSTR lpszCmdLine )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
#endif /* WIN16 */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* plerror.c */
|
||||
165
mozilla/nsprpub/lib/libc/src/plgetopt.c
Normal file
165
mozilla/nsprpub/lib/libc/src/plgetopt.c
Normal file
@@ -0,0 +1,165 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
** File: plgetopt.c
|
||||
** Description: utilities to parse argc/argv
|
||||
*/
|
||||
|
||||
#include "prmem.h"
|
||||
#include "prlog.h"
|
||||
#include "prerror.h"
|
||||
#include "plstr.h"
|
||||
#include "plgetopt.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
static char static_Nul = 0;
|
||||
|
||||
struct PLOptionInternal
|
||||
{
|
||||
const char *options; /* client options list specification */
|
||||
PRIntn argc; /* original number of arguments */
|
||||
char **argv; /* vector of pointers to arguments */
|
||||
PRIntn xargc; /* which one we're processing now */
|
||||
const char *xargv; /* where within *argv[xargc] */
|
||||
PRBool minus; /* do we already have the '-'? */
|
||||
};
|
||||
|
||||
/*
|
||||
** Create the state in which to parse the tokens.
|
||||
**
|
||||
** argc the sum of the number of options and their values
|
||||
** argv the options and their values
|
||||
** options vector of single character options w/ | w/o ':
|
||||
*/
|
||||
PR_IMPLEMENT(PLOptState*) PL_CreateOptState(
|
||||
PRIntn argc, char **argv, const char *options)
|
||||
{
|
||||
PLOptState *opt = NULL;
|
||||
if (NULL == options)
|
||||
PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
|
||||
else
|
||||
{
|
||||
opt = PR_NEWZAP(PLOptState);
|
||||
if (NULL == opt)
|
||||
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
|
||||
else
|
||||
{
|
||||
PLOptionInternal *internal = PR_NEW(PLOptionInternal);
|
||||
if (NULL == internal)
|
||||
{
|
||||
PR_DELETE(opt);
|
||||
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
opt->option = 0;
|
||||
opt->value = NULL;
|
||||
opt->internal = internal;
|
||||
|
||||
internal->argc = argc;
|
||||
internal->argv = argv;
|
||||
internal->xargc = 0;
|
||||
internal->xargv = &static_Nul;
|
||||
internal->minus = PR_FALSE;
|
||||
internal->options = options;
|
||||
}
|
||||
}
|
||||
}
|
||||
return opt;
|
||||
} /* PL_CreateOptState */
|
||||
|
||||
/*
|
||||
** Destroy object created by CreateOptState()
|
||||
*/
|
||||
PR_IMPLEMENT(void) PL_DestroyOptState(PLOptState *opt)
|
||||
{
|
||||
PR_DELETE(opt->internal);
|
||||
PR_DELETE(opt);
|
||||
} /* PL_DestroyOptState */
|
||||
|
||||
PR_IMPLEMENT(PLOptStatus) PL_GetNextOpt(PLOptState *opt)
|
||||
{
|
||||
PLOptionInternal *internal = opt->internal;
|
||||
PRIntn cop, eoo = PL_strlen(internal->options);
|
||||
|
||||
/*
|
||||
** If the current xarg points to nul, advance to the next
|
||||
** element of the argv vector. If the vector index is equal
|
||||
** to argc, we're out of arguments, so return an EOL.
|
||||
** Note whether the first character of the new argument is
|
||||
** a '-' and skip by it if it is.
|
||||
*/
|
||||
while (0 == *internal->xargv)
|
||||
{
|
||||
internal->xargc += 1;
|
||||
if (internal->xargc >= internal->argc)
|
||||
{
|
||||
opt->option = 0;
|
||||
opt->value = NULL;
|
||||
return PL_OPT_EOL;
|
||||
}
|
||||
internal->xargv = internal->argv[internal->xargc];
|
||||
internal->minus = ('-' == *internal->xargv ? PR_TRUE : PR_FALSE); /* not it */
|
||||
if (internal->minus) internal->xargv += 1; /* and consume */
|
||||
}
|
||||
|
||||
/*
|
||||
** If we already have a '-' in hand, xargv points to the next
|
||||
** option. See if we can find a match in the list of possible
|
||||
** options supplied.
|
||||
*/
|
||||
|
||||
if (internal->minus)
|
||||
{
|
||||
for (cop = 0; cop < eoo; ++cop)
|
||||
{
|
||||
if (internal->options[cop] == *internal->xargv)
|
||||
{
|
||||
opt->option = *internal->xargv;
|
||||
internal->xargv += 1;
|
||||
/*
|
||||
** if options indicates that there's an associated
|
||||
** value, this argv is finished and the next is the
|
||||
** option's value.
|
||||
*/
|
||||
if (':' == internal->options[cop + 1])
|
||||
{
|
||||
PR_ASSERT(0 == *internal->xargv);
|
||||
opt->value = internal->argv[++(internal->xargc)];
|
||||
internal->xargv = &static_Nul;
|
||||
internal->minus = PR_FALSE;
|
||||
}
|
||||
else opt->value = NULL;
|
||||
return PL_OPT_OK;
|
||||
}
|
||||
}
|
||||
internal->xargv += 1; /* consume that option */
|
||||
return PL_OPT_BAD;
|
||||
}
|
||||
/*
|
||||
** No '-', so it must be a standalone value. The option is nul.
|
||||
*/
|
||||
opt->value = internal->argv[(internal->xargc)++];
|
||||
internal->xargv = &static_Nul;
|
||||
opt->option = 0;
|
||||
return PL_OPT_OK;
|
||||
} /* PL_GetNextOpt */
|
||||
|
||||
/* plgetopt.c */
|
||||
70
mozilla/nsprpub/lib/libc/src/strcat.c
Normal file
70
mozilla/nsprpub/lib/libc/src/strcat.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strcat(char *dest, const char *src)
|
||||
{
|
||||
char *rv;
|
||||
|
||||
if( (char *)0 == dest ) return (char *)0;
|
||||
if( (const char *)0 == src ) return dest;
|
||||
|
||||
for( rv = dest; *dest; dest++ )
|
||||
;
|
||||
|
||||
for( ; ((*dest = *src) != 0); dest++, src++ )
|
||||
;
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strncat(char *dest, const char *src, PRUint32 max)
|
||||
{
|
||||
char *rv;
|
||||
|
||||
if( (char *)0 == dest ) return (char *)0;
|
||||
if( (const char *)0 == src ) return dest;
|
||||
if( 0 == max ) return dest;
|
||||
|
||||
for( rv = dest; *dest; dest++ )
|
||||
;
|
||||
|
||||
(void)PL_strncpy(dest, src, max);
|
||||
return rv;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strcatn(char *dest, PRUint32 max, const char *src)
|
||||
{
|
||||
char *rv;
|
||||
PRUint32 dl;
|
||||
|
||||
if( (char *)0 == dest ) return (char *)0;
|
||||
if( (const char *)0 == src ) return dest;
|
||||
|
||||
for( rv = dest, dl = 0; *dest; dest++, dl++ )
|
||||
;
|
||||
|
||||
if( max <= dl ) return rv;
|
||||
(void)PL_strncpyz(dest, src, max-dl);
|
||||
|
||||
return rv;
|
||||
}
|
||||
80
mozilla/nsprpub/lib/libc/src/strccmp.c
Normal file
80
mozilla/nsprpub/lib/libc/src/strccmp.c
Normal file
@@ -0,0 +1,80 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
static const unsigned char uc[] =
|
||||
{
|
||||
'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
|
||||
'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
|
||||
'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
|
||||
'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
|
||||
' ', '!', '"', '#', '$', '%', '&', '\'',
|
||||
'(', ')', '*', '+', ',', '-', '.', '/',
|
||||
'0', '1', '2', '3', '4', '5', '6', '7',
|
||||
'8', '9', ':', ';', '<', '=', '>', '?',
|
||||
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
|
||||
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
|
||||
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
|
||||
'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
|
||||
'`', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
|
||||
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
|
||||
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
|
||||
'X', 'Y', 'Z', '{', '|', '}', '~', '\177'
|
||||
};
|
||||
|
||||
PR_IMPLEMENT(PRIntn)
|
||||
PL_strcasecmp(const char *a, const char *b)
|
||||
{
|
||||
const unsigned char *ua = (const unsigned char *)a;
|
||||
const unsigned char *ub = (const unsigned char *)b;
|
||||
|
||||
if( ((const char *)0 == a) || (const char *)0 == b )
|
||||
return (PRIntn)(a-b);
|
||||
|
||||
while( (uc[*ua] == uc[*ub]) && ('\0' != *a) )
|
||||
{
|
||||
a++;
|
||||
ua++;
|
||||
ub++;
|
||||
}
|
||||
|
||||
return (PRIntn)(uc[*ua] - uc[*ub]);
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRIntn)
|
||||
PL_strncasecmp(const char *a, const char *b, PRUint32 max)
|
||||
{
|
||||
const unsigned char *ua = (const unsigned char *)a;
|
||||
const unsigned char *ub = (const unsigned char *)b;
|
||||
|
||||
if( ((const char *)0 == a) || (const char *)0 == b )
|
||||
return (PRIntn)(a-b);
|
||||
|
||||
while( max && (uc[*ua] == uc[*ub]) && ('\0' != *a) )
|
||||
{
|
||||
a++;
|
||||
ua++;
|
||||
ub++;
|
||||
max--;
|
||||
}
|
||||
|
||||
if( 0 == max ) return (PRIntn)0;
|
||||
|
||||
return (PRIntn)(uc[*ua] - uc[*ub]);
|
||||
}
|
||||
83
mozilla/nsprpub/lib/libc/src/strchr.c
Normal file
83
mozilla/nsprpub/lib/libc/src/strchr.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strchr(const char *s, char c)
|
||||
{
|
||||
if( (const char *)0 == s ) return (char *)0;
|
||||
|
||||
for( ; *s; s++ )
|
||||
if( *s == c )
|
||||
return (char *)s;
|
||||
|
||||
if( (char)0 == c ) return (char *)s;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strrchr(const char *s, char c)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
if( (const char *)0 == s ) return (char *)0;
|
||||
|
||||
for( p = s; *p; p++ )
|
||||
;
|
||||
|
||||
for( ; p >= s; p-- )
|
||||
if( *p == c )
|
||||
return (char *)p;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strnchr(const char *s, char c, PRUint32 n)
|
||||
{
|
||||
if( (const char *)0 == s ) return (char *)0;
|
||||
|
||||
for( ; *s && n; s++, n-- )
|
||||
if( *s == c )
|
||||
return (char *)s;
|
||||
|
||||
if( ((char)0 == c) && ((char)0 == *s) && (n > 0)) return (char *)s;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strnrchr(const char *s, char c, PRUint32 n)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
if( (const char *)0 == s ) return (char *)0;
|
||||
|
||||
for( p = s; *p && n; p++, n-- )
|
||||
;
|
||||
|
||||
if( ((char)0 == c) && ((char)0 == *p) && (n > 0) ) return (char *)p;
|
||||
|
||||
for( p--; p >= s; p-- )
|
||||
if( *p == c )
|
||||
return (char *)p;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
52
mozilla/nsprpub/lib/libc/src/strcmp.c
Normal file
52
mozilla/nsprpub/lib/libc/src/strcmp.c
Normal file
@@ -0,0 +1,52 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
PR_IMPLEMENT(PRIntn)
|
||||
PL_strcmp(const char *a, const char *b)
|
||||
{
|
||||
if( ((const char *)0 == a) || (const char *)0 == b )
|
||||
return (PRIntn)(a-b);
|
||||
|
||||
while( (*a == *b) && ('\0' != *a) )
|
||||
{
|
||||
a++;
|
||||
b++;
|
||||
}
|
||||
|
||||
return (PRIntn)(*((const unsigned char *)a) - *((const unsigned char *)b));
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRIntn)
|
||||
PL_strncmp(const char *a, const char *b, PRUint32 max)
|
||||
{
|
||||
if( ((const char *)0 == a) || (const char *)0 == b )
|
||||
return (PRIntn)(a-b);
|
||||
|
||||
while( max && (*a == *b) && ('\0' != *a) )
|
||||
{
|
||||
a++;
|
||||
b++;
|
||||
max--;
|
||||
}
|
||||
|
||||
if( 0 == max ) return (PRIntn)0;
|
||||
|
||||
return (PRIntn)(*((const unsigned char *)a) - *((const unsigned char *)b));
|
||||
}
|
||||
69
mozilla/nsprpub/lib/libc/src/strcpy.c
Normal file
69
mozilla/nsprpub/lib/libc/src/strcpy.c
Normal file
@@ -0,0 +1,69 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strcpy(char *dest, const char *src)
|
||||
{
|
||||
char *rv;
|
||||
|
||||
if( (char *)0 == dest ) return (char *)0;
|
||||
if( (const char *)0 == src ) return (char *)0;
|
||||
|
||||
for( rv = dest; ((*dest = *src) != 0); dest++, src++ )
|
||||
;
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strncpy(char *dest, const char *src, PRUint32 max)
|
||||
{
|
||||
char *rv;
|
||||
|
||||
if( (char *)0 == dest ) return (char *)0;
|
||||
if( (const char *)0 == src ) return (char *)0;
|
||||
|
||||
for( rv = dest; max && ((*dest = *src) != 0); dest++, src++, max-- )
|
||||
;
|
||||
|
||||
#ifdef JLRU
|
||||
while( --max )
|
||||
*++dest = '\0';
|
||||
#endif /* JLRU */
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strncpyz(char *dest, const char *src, PRUint32 max)
|
||||
{
|
||||
char *rv;
|
||||
|
||||
if( (char *)0 == dest ) return (char *)0;
|
||||
if( (const char *)0 == src ) return (char *)0;
|
||||
if( 0 == max ) return (char *)0;
|
||||
|
||||
for( rv = dest, max--; max && ((*dest = *src) != 0); dest++, src++, max-- )
|
||||
;
|
||||
|
||||
*dest = '\0';
|
||||
|
||||
return rv;
|
||||
}
|
||||
104
mozilla/nsprpub/lib/libc/src/strcstr.c
Normal file
104
mozilla/nsprpub/lib/libc/src/strcstr.c
Normal file
@@ -0,0 +1,104 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strcasestr(const char *big, const char *little)
|
||||
{
|
||||
PRUint32 ll;
|
||||
|
||||
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);
|
||||
|
||||
for( ; *big; big++ )
|
||||
/* obvious improvement available here */
|
||||
if( 0 == PL_strncasecmp(big, little, ll) )
|
||||
return (char *)big;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strcaserstr(const char *big, const char *little)
|
||||
{
|
||||
const char *p;
|
||||
PRUint32 ll;
|
||||
|
||||
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;
|
||||
|
||||
for( ; p >= big; p-- )
|
||||
/* obvious improvement available here */
|
||||
if( 0 == PL_strncasecmp(p, little, ll) )
|
||||
return (char *)p;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strncasestr(const char *big, const char *little, PRUint32 max)
|
||||
{
|
||||
PRUint32 ll;
|
||||
|
||||
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);
|
||||
if( ll > max ) return (char *)0;
|
||||
max -= ll;
|
||||
max++;
|
||||
|
||||
for( ; *big && max; big++, max-- )
|
||||
/* obvious improvement available here */
|
||||
if( 0 == PL_strncasecmp(big, little, ll) )
|
||||
return (char *)big;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strncaserstr(const char *big, const char *little, PRUint32 max)
|
||||
{
|
||||
const char *p;
|
||||
PRUint32 ll;
|
||||
|
||||
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);
|
||||
|
||||
for( p = big; *p && max; p++, max-- )
|
||||
;
|
||||
|
||||
p -= ll;
|
||||
if( p < big ) return (char *)0;
|
||||
|
||||
for( ; p >= big; p-- )
|
||||
/* obvious improvement available here */
|
||||
if( 0 == PL_strncasecmp(p, little, ll) )
|
||||
return (char *)p;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
64
mozilla/nsprpub/lib/libc/src/strdup.c
Normal file
64
mozilla/nsprpub/lib/libc/src/strdup.c
Normal file
@@ -0,0 +1,64 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
#include "prmem.h"
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strdup(const char *s)
|
||||
{
|
||||
char *rv;
|
||||
PRUint32 l;
|
||||
|
||||
l = PL_strlen(s);
|
||||
|
||||
rv = (char *)malloc(l+1);
|
||||
if( (char *)0 == rv ) return rv;
|
||||
|
||||
if( (const char *)0 == s )
|
||||
*rv = '\0';
|
||||
else
|
||||
(void)PL_strcpy(rv, s);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PL_strfree(char *s)
|
||||
{
|
||||
free(s);
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strndup(const char *s, PRUint32 max)
|
||||
{
|
||||
char *rv;
|
||||
PRUint32 l;
|
||||
|
||||
l = PL_strnlen(s, max);
|
||||
|
||||
rv = (char *)malloc(l+1);
|
||||
if( (char *)0 == rv ) return rv;
|
||||
|
||||
if( (const char *)0 == s )
|
||||
*rv = '\0';
|
||||
else
|
||||
(void)PL_strncpyz(rv, s, l+1);
|
||||
|
||||
return rv;
|
||||
}
|
||||
50
mozilla/nsprpub/lib/libc/src/strlen.c
Normal file
50
mozilla/nsprpub/lib/libc/src/strlen.c
Normal file
@@ -0,0 +1,50 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
#include "prtypes.h"
|
||||
#include "prlog.h"
|
||||
|
||||
PR_IMPLEMENT(PRUint32)
|
||||
PL_strlen(const char *str)
|
||||
{
|
||||
register const char *s;
|
||||
|
||||
if( (const char *)0 == str ) return 0;
|
||||
for( s = str; *s; s++ )
|
||||
;
|
||||
/* error checking in case we have a 64-bit platform -- make sure we dont
|
||||
* have ultra long strings that overflow a int32
|
||||
*/
|
||||
if (sizeof(PRUint32) < sizeof(PRUptrdiff))
|
||||
PR_ASSERT((s-str) < 2147483647);
|
||||
|
||||
return (PRUint32)(s - str);
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRUint32)
|
||||
PL_strnlen(const char *str, PRUint32 max)
|
||||
{
|
||||
register const char *s;
|
||||
|
||||
if( (const char *)0 == str ) return 0;
|
||||
for( s = str; *s && max; s++, max-- )
|
||||
;
|
||||
|
||||
return (PRUint32)(s - str);
|
||||
}
|
||||
87
mozilla/nsprpub/lib/libc/src/strpbrk.c
Normal file
87
mozilla/nsprpub/lib/libc/src/strpbrk.c
Normal file
@@ -0,0 +1,87 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strpbrk(const char *s, const char *list)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
if( ((const char *)0 == s) || ((const char *)0 == list) ) return (char *)0;
|
||||
|
||||
for( ; *s; s++ )
|
||||
for( p = list; *p; p++ )
|
||||
if( *s == *p )
|
||||
return (char *)s;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strprbrk(const char *s, const char *list)
|
||||
{
|
||||
const char *p;
|
||||
const char *r;
|
||||
|
||||
if( ((const char *)0 == s) || ((const char *)0 == list) ) return (char *)0;
|
||||
|
||||
for( r = s; *r; r++ )
|
||||
;
|
||||
|
||||
for( r--; r >= s; r-- )
|
||||
for( p = list; *p; p++ )
|
||||
if( *r == *p )
|
||||
return (char *)r;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strnpbrk(const char *s, const char *list, PRUint32 max)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
if( ((const char *)0 == s) || ((const char *)0 == list) ) return (char *)0;
|
||||
|
||||
for( ; *s && max; s++, max-- )
|
||||
for( p = list; *p; p++ )
|
||||
if( *s == *p )
|
||||
return (char *)s;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strnprbrk(const char *s, const char *list, PRUint32 max)
|
||||
{
|
||||
const char *p;
|
||||
const char *r;
|
||||
|
||||
if( ((const char *)0 == s) || ((const char *)0 == list) ) return (char *)0;
|
||||
|
||||
for( r = s; *r && max; r++, max-- )
|
||||
;
|
||||
|
||||
for( r--; r >= s; r-- )
|
||||
for( p = list; *p; p++ )
|
||||
if( *r == *p )
|
||||
return (char *)r;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
104
mozilla/nsprpub/lib/libc/src/strstr.c
Normal file
104
mozilla/nsprpub/lib/libc/src/strstr.c
Normal file
@@ -0,0 +1,104 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strstr(const char *big, const char *little)
|
||||
{
|
||||
PRUint32 ll;
|
||||
|
||||
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);
|
||||
|
||||
for( ; *big; big++ )
|
||||
if( *little == *big )
|
||||
if( 0 == PL_strncmp(big, little, ll) )
|
||||
return (char *)big;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strrstr(const char *big, const char *little)
|
||||
{
|
||||
const char *p;
|
||||
PRUint32 ll;
|
||||
|
||||
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;
|
||||
|
||||
for( ; p >= big; p-- )
|
||||
if( *little == *p )
|
||||
if( 0 == PL_strncmp(p, little, ll) )
|
||||
return (char *)p;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strnstr(const char *big, const char *little, PRUint32 max)
|
||||
{
|
||||
PRUint32 ll;
|
||||
|
||||
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);
|
||||
if( ll > max ) return (char *)0;
|
||||
max -= ll;
|
||||
max++;
|
||||
|
||||
for( ; *big && max; big++, max-- )
|
||||
if( *little == *big )
|
||||
if( 0 == PL_strncmp(big, little, ll) )
|
||||
return (char *)big;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(char *)
|
||||
PL_strnrstr(const char *big, const char *little, PRUint32 max)
|
||||
{
|
||||
const char *p;
|
||||
PRUint32 ll;
|
||||
|
||||
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);
|
||||
|
||||
for( p = big; *p && max; p++, max-- )
|
||||
;
|
||||
|
||||
p -= ll;
|
||||
if( p < big ) return (char *)0;
|
||||
|
||||
for( ; p >= big; p-- )
|
||||
if( *little == *p )
|
||||
if( 0 == PL_strncmp(p, little, ll) )
|
||||
return (char *)p;
|
||||
|
||||
return (char *)0;
|
||||
}
|
||||
28
mozilla/nsprpub/lib/msgc/Makefile
Normal file
28
mozilla/nsprpub/lib/msgc/Makefile
Normal file
@@ -0,0 +1,28 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
MOD_DEPTH = ../..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
DIRS = include src tests
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
export:: $(TARGETS)
|
||||
|
||||
install:: export
|
||||
37
mozilla/nsprpub/lib/msgc/include/Makefile
Normal file
37
mozilla/nsprpub/lib/msgc/include/Makefile
Normal file
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../../..
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
EXPORT_HEADERS = prgc.h
|
||||
HEADERS = $(EXPORT_HEADERS) gcint.h
|
||||
|
||||
RELEASE_HEADERS = $(EXPORT_HEADERS)
|
||||
RELEASE_HEADERS_DEST = $(RELEASE_INCLUDE_DIR)
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
export:: $(EXPORT_HEADERS)
|
||||
$(INSTALL) -m 444 $(EXPORT_HEADERS) $(DIST)/include
|
||||
ifeq ($(MOZ_BITS),16)
|
||||
$(INSTALL) -m 444 $(EXPORT_HEADERS) $(MOZ_INCL)
|
||||
endif
|
||||
|
||||
install:: export
|
||||
110
mozilla/nsprpub/lib/msgc/include/gcint.h
Normal file
110
mozilla/nsprpub/lib/msgc/include/gcint.h
Normal file
@@ -0,0 +1,110 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef gcint_h___
|
||||
#define gcint_h___
|
||||
|
||||
#include "prmon.h"
|
||||
#include "prgc.h"
|
||||
|
||||
extern PRLogModuleInfo *_pr_msgc_lm;
|
||||
extern GCInfo _pr_gcData;
|
||||
|
||||
#if defined(_WIN32) && !defined(DEBUG)
|
||||
#undef INLINE_LOCK
|
||||
#endif
|
||||
|
||||
#ifdef INLINE_LOCK
|
||||
#define LOCK_GC() EnterCriticalSection(&_pr_gcData.lock->mutexHandle)
|
||||
#define UNLOCK_GC() LeaveCriticalSection(&_pr_gcData.lock->mutexHandle)
|
||||
#else
|
||||
#define LOCK_GC() PR_EnterMonitor(_pr_gcData.lock)
|
||||
#define UNLOCK_GC() PR_ExitMonitor (_pr_gcData.lock)
|
||||
#define GC_IS_LOCKED() (PR_GetMonitorEntryCount(_pr_gcData.lock)!=0)
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define _GCTRACE(x, y) if (_pr_gcData.flags & x) GCTrace y
|
||||
#else
|
||||
#define _GCTRACE(x, y)
|
||||
#endif
|
||||
|
||||
extern GCBeginGCHook *_pr_beginGCHook;
|
||||
extern void *_pr_beginGCHookArg;
|
||||
extern GCBeginGCHook *_pr_endGCHook;
|
||||
extern void *_pr_endGCHookArg;
|
||||
|
||||
extern GCBeginFinalizeHook *_pr_beginFinalizeHook;
|
||||
extern void *_pr_beginFinalizeHookArg;
|
||||
extern GCBeginFinalizeHook *_pr_endFinalizeHook;
|
||||
extern void *_pr_endFinalizeHookArg;
|
||||
|
||||
extern int _pr_do_a_dump;
|
||||
extern FILE *_pr_dump_file;
|
||||
|
||||
extern PRLogModuleInfo *_pr_gc_lm;
|
||||
|
||||
/*
|
||||
** Root finders. Root finders are used by the GC to find pointers into
|
||||
** the GC heap that are not contained in the GC heap.
|
||||
*/
|
||||
typedef struct RootFinderStr RootFinder;
|
||||
|
||||
struct RootFinderStr {
|
||||
RootFinder *next;
|
||||
GCRootFinder *func;
|
||||
char *name;
|
||||
void *arg;
|
||||
};
|
||||
extern RootFinder *_pr_rootFinders;
|
||||
|
||||
typedef struct CollectorTypeStr {
|
||||
GCType gctype;
|
||||
uint32 flags;
|
||||
} CollectorType;
|
||||
|
||||
#define GC_MAX_TYPES 256
|
||||
extern CollectorType *_pr_collectorTypes;
|
||||
|
||||
#define _GC_TYPE_BUSY 0x1
|
||||
#define _GC_TYPE_FINAL 0x2
|
||||
#define _GC_TYPE_WEAK 0x4
|
||||
|
||||
/* Slot in _pr_gcTypes used for free memory */
|
||||
#define FREE_MEMORY_TYPEIX 255
|
||||
|
||||
extern void _PR_InitGC(PRWord flags);
|
||||
extern void _MD_InitGC(void);
|
||||
extern void PR_CALLBACK _PR_ScanFinalQueue(void *notused);
|
||||
|
||||
/*
|
||||
** Grow the GC Heap.
|
||||
*/
|
||||
extern void *_MD_GrowGCHeap(PRUint32 *sizep);
|
||||
|
||||
/*
|
||||
** Extend the GC Heap.
|
||||
*/
|
||||
extern PRBool _MD_ExtendGCHeap(char *base, PRInt32 oldSize, PRInt32 newSize);
|
||||
|
||||
/*
|
||||
** Free a GC segment.
|
||||
*/
|
||||
extern void _MD_FreeGCSegment(void *base, PRInt32 len);
|
||||
|
||||
#endif /* gcint_h___ */
|
||||
400
mozilla/nsprpub/lib/msgc/include/prgc.h
Normal file
400
mozilla/nsprpub/lib/msgc/include/prgc.h
Normal file
@@ -0,0 +1,400 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef prgc_h___
|
||||
#define prgc_h___
|
||||
|
||||
/*
|
||||
** API to NSPR gc memory system.
|
||||
*/
|
||||
#include "prtypes.h"
|
||||
#include "prmon.h"
|
||||
#include "prthread.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(WIN16)
|
||||
#define GCPTR __far
|
||||
#else
|
||||
#define GCPTR
|
||||
#endif
|
||||
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
/*
|
||||
** Initialize the garbage collector.
|
||||
** "flags" is the trace flags (see below).
|
||||
** "initialHeapSize" is the initial size of the heap and may be zero
|
||||
** if the default is desired.
|
||||
** "segmentSize" is the size of each segment of memory added to the
|
||||
** heap when the heap is grown.
|
||||
*/
|
||||
PR_EXTERN(void) PR_InitGC(
|
||||
PRWord flags, PRInt32 initialHeapSize, PRInt32 segmentSize, PRThreadScope scope);
|
||||
|
||||
/*
|
||||
** Shuts down gc and frees up all memory associated with it.
|
||||
*/
|
||||
PR_EXTERN(void) PR_ShutdownGC(PRBool finalizeOnExit);
|
||||
|
||||
/*
|
||||
** This walk function will be called for every gc object in the
|
||||
** heap as it is walked. If it returns non-zero, the walk is terminated.
|
||||
*/
|
||||
typedef PRInt32 (*PRWalkFun)(void GCPTR* obj, void* data);
|
||||
|
||||
/*
|
||||
** GC Type record. This defines all of the GC operations used on a
|
||||
** particular object type. These structures are passed to
|
||||
** PR_RegisterType.
|
||||
*/
|
||||
typedef struct GCType {
|
||||
/*
|
||||
** Scan an object that is in the GC heap and call PR_LiveObject on
|
||||
** all of the pointers in it. If this slot is null then the object
|
||||
** won't be scanned (i.e. it has no embedded pointers).
|
||||
*/
|
||||
void (PR_CALLBACK *scan)(void GCPTR *obj);
|
||||
|
||||
/*
|
||||
** Finalize an object that has no references. This is called by the
|
||||
** GC after it has determined where the object debris is but before
|
||||
** it has moved the debris to the logical "free list". The object is
|
||||
** marked alive for this call and removed from the list of objects
|
||||
** that need finalization (finalization only happens once for an
|
||||
** object). If this slot is null then the object doesn't need
|
||||
** finalization.
|
||||
*/
|
||||
void (PR_CALLBACK *finalize)(void GCPTR *obj);
|
||||
|
||||
/*
|
||||
** Dump out an object during a PR_DumpGCHeap(). This is used as a
|
||||
** debugging tool.
|
||||
*/
|
||||
void (PR_CALLBACK *dump)(FILE *out, void GCPTR *obj, PRBool detailed, PRIntn indentLevel);
|
||||
|
||||
/*
|
||||
** Add object to summary table.
|
||||
*/
|
||||
void (PR_CALLBACK *summarize)(void GCPTR *obj, PRUint32 bytes);
|
||||
|
||||
/*
|
||||
** Free hook called by GC when the object is being freed.
|
||||
*/
|
||||
void (PR_CALLBACK *free)(void *obj);
|
||||
|
||||
/* Weak pointer support: If the object has a weak pointer (Note:
|
||||
at most one), this function is used to get the weak link's
|
||||
offset from the start of the body of a gc object */
|
||||
PRUint32 (PR_CALLBACK *getWeakLinkOffset)(void *obj);
|
||||
|
||||
/* Descriptive character for dumping this GCType */
|
||||
char kindChar;
|
||||
|
||||
/*
|
||||
** Walker routine. This routine should apply fun(obj->ptr, data)
|
||||
** for every gc pointer within the object.
|
||||
*/
|
||||
PRInt32 (PR_CALLBACK *walk)(void GCPTR *obj, PRWalkFun fun, void* data);
|
||||
} GCType;
|
||||
|
||||
/*
|
||||
** This data structure must be added as the hash table passed to
|
||||
** the summarize method of GCType.
|
||||
*/
|
||||
typedef struct PRSummaryEntry {
|
||||
void* clazz;
|
||||
PRInt32 instancesCount;
|
||||
PRInt32 totalSize;
|
||||
} PRSummaryEntry;
|
||||
|
||||
/*
|
||||
** This function pointer must be registered by users of nspr
|
||||
** to produce the finally summary after all object in the
|
||||
** heap have been visited.
|
||||
*/
|
||||
typedef void (PR_CALLBACK *PRSummaryPrinter)(FILE *out, void* closure);
|
||||
|
||||
PR_EXTERN(void) PR_CALLBACK PR_RegisterSummaryPrinter(PRSummaryPrinter fun, void* closure);
|
||||
|
||||
typedef void PR_CALLBACK GCRootFinder(void *arg);
|
||||
typedef void PR_CALLBACK GCBeginFinalizeHook(void *arg);
|
||||
typedef void PR_CALLBACK GCEndFinalizeHook(void *arg);
|
||||
typedef void PR_CALLBACK GCBeginGCHook(void *arg);
|
||||
typedef void PR_CALLBACK GCEndGCHook(void *arg);
|
||||
|
||||
typedef enum { PR_GCBEGIN, PR_GCEND } GCLockHookArg;
|
||||
|
||||
typedef void PR_CALLBACK GCLockHookFunc(GCLockHookArg arg1, void *arg2);
|
||||
|
||||
typedef struct GCLockHook GCLockHook;
|
||||
|
||||
struct GCLockHook {
|
||||
GCLockHookFunc* func;
|
||||
void* arg;
|
||||
GCLockHook* next;
|
||||
GCLockHook* prev;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
** Hooks which are called at the beginning and end of the GC process.
|
||||
** The begin hooks are called before the root finding step. The hooks are
|
||||
** called with threading disabled, so it is now allowed to re-enter the
|
||||
** kernel. The end hooks are called after the gc has finished but before
|
||||
** the finalizer has run.
|
||||
*/
|
||||
PR_EXTERN(void) PR_CALLBACK PR_SetBeginGCHook(GCBeginGCHook *hook, void *arg);
|
||||
PR_EXTERN(void) PR_CALLBACK PR_GetBeginGCHook(GCBeginGCHook **hook, void **arg);
|
||||
PR_EXTERN(void) PR_CALLBACK PR_SetEndGCHook(GCBeginGCHook *hook, void *arg);
|
||||
PR_EXTERN(void) PR_CALLBACK PR_GetEndGCHook(GCEndGCHook **hook, void **arg);
|
||||
|
||||
/*
|
||||
** Called before SuspendAll is called by dogc, so that GC thread can hold
|
||||
** all the locks before hand to avoid any deadlocks
|
||||
*/
|
||||
|
||||
/*
|
||||
PR_EXTERN(void) PR_SetGCLockHook(GCLockHook *hook, void *arg);
|
||||
PR_EXTERN(void) PR_GetGCLockHook(GCLockHook **hook, void **arg);
|
||||
*/
|
||||
|
||||
PR_EXTERN(int) PR_RegisterGCLockHook(GCLockHookFunc *hook, void *arg);
|
||||
|
||||
/*
|
||||
** Hooks which are called at the beginning and end of the GC finalization
|
||||
** process. After the GC has identified all of the dead objects in the
|
||||
** heap, it looks for objects that need finalization. Before it calls the
|
||||
** first finalization proc (see the GCType structure above) it calls the
|
||||
** begin hook. When it has finalized the last object it calls the end
|
||||
** hook.
|
||||
*/
|
||||
PR_EXTERN(void) PR_SetBeginFinalizeHook(GCBeginFinalizeHook *hook, void *arg);
|
||||
PR_EXTERN(void) PR_GetBeginFinalizeHook(GCBeginFinalizeHook **hook, void **arg);
|
||||
PR_EXTERN(void) PR_SetEndFinalizeHook(GCBeginFinalizeHook *hook, void *arg);
|
||||
PR_EXTERN(void) PR_GetEndFinalizeHook(GCEndFinalizeHook **hook, void **arg);
|
||||
|
||||
/*
|
||||
** Register a GC type. Return's the index into the GC internal type
|
||||
** table. The returned value is passed to PR_AllocMemory. After the call,
|
||||
** the "type" memory belongs to the GC (the caller must not free it or
|
||||
** change it).
|
||||
*/
|
||||
PR_EXTERN(PRInt32) PR_RegisterType(GCType *type);
|
||||
|
||||
/*
|
||||
** Register a root finder with the collector. The collector will call
|
||||
** these functions to identify all of the roots before collection
|
||||
** proceeds. "arg" is passed to the function when it is called.
|
||||
*/
|
||||
PR_EXTERN(PRStatus) PR_RegisterRootFinder(GCRootFinder func, char *name, void *arg);
|
||||
|
||||
/*
|
||||
** Allocate some GC'able memory. The object must be at least bytes in
|
||||
** size. The type index function for the object is specified. "flags"
|
||||
** specifies some control flags. If PR_ALLOC_CLEAN is set then the memory
|
||||
** is zero'd before being returned. If PR_ALLOC_DOUBLE is set then the
|
||||
** allocated memory is double aligned.
|
||||
**
|
||||
** Any memory cell that you store a pointer to something allocated by
|
||||
** this call must be findable by the GC. Use the PR_RegisterRootFinder to
|
||||
** register new places where the GC will look for pointers into the heap.
|
||||
** The GC already knows how to scan any NSPR threads or monitors.
|
||||
*/
|
||||
PR_EXTERN(PRWord GCPTR *)PR_AllocMemory(
|
||||
PRWord bytes, PRInt32 typeIndex, PRWord flags);
|
||||
PR_EXTERN(PRWord GCPTR *)PR_AllocSimpleMemory(
|
||||
PRWord bytes, PRInt32 typeIndex);
|
||||
|
||||
/*
|
||||
** This function can be used to cause PR_AllocMemory to always return
|
||||
** NULL. This may be useful in low memory situations when we're trying to
|
||||
** shutdown applets.
|
||||
*/
|
||||
PR_EXTERN(void) PR_EnableAllocation(PRBool yesOrNo);
|
||||
|
||||
/* flags bits */
|
||||
#define PR_ALLOC_CLEAN 0x1
|
||||
#define PR_ALLOC_DOUBLE 0x2
|
||||
#define PR_ALLOC_ZERO_HANDLE 0x4 /* XXX yes, it's a hack */
|
||||
|
||||
/*
|
||||
** Force a garbage collection right now. Return when it completes.
|
||||
*/
|
||||
PR_EXTERN(void) PR_GC(void);
|
||||
|
||||
/*
|
||||
** Force a finalization right now. Return when finalization has
|
||||
** completed. Finalization completes when there are no more objects
|
||||
** pending finalization. This does not mean there are no objects in the
|
||||
** gc heap that will need finalization should a collection be done after
|
||||
** this call.
|
||||
*/
|
||||
PR_EXTERN(void) PR_ForceFinalize(void);
|
||||
|
||||
/*
|
||||
** Dump the GC heap out to the given file. This will stop the system dead
|
||||
** in its tracks while it is occuring.
|
||||
*/
|
||||
PR_EXTERN(void) PR_DumpGCHeap(FILE *out, PRBool detailed);
|
||||
|
||||
/*
|
||||
** Wrapper for PR_DumpGCHeap
|
||||
*/
|
||||
PR_EXTERN(void) PR_DumpMemory(PRBool detailed);
|
||||
|
||||
/*
|
||||
** Dump summary of objects allocated.
|
||||
*/
|
||||
PR_EXTERN(void) PR_DumpMemorySummary(void);
|
||||
|
||||
/*
|
||||
** Dump the application heaps.
|
||||
*/
|
||||
PR_EXTERN(void) PR_DumpApplicationHeaps(void);
|
||||
|
||||
/*
|
||||
** Helper function used by dump routines to do the indentation in a
|
||||
** consistent fashion.
|
||||
*/
|
||||
PR_EXTERN(void) PR_DumpIndent(FILE *out, PRIntn indent);
|
||||
|
||||
/*
|
||||
** The GCInfo structure contains all of the GC state...
|
||||
**
|
||||
** busyMemory:
|
||||
** The amount of GC heap memory that is busy at this instant. Busy
|
||||
** doesn't mean alive, it just means that it has been
|
||||
** allocated. Immediately after a collection busy means how much is
|
||||
** alive.
|
||||
**
|
||||
** freeMemory:
|
||||
** The amount of GC heap memory that is as yet unallocated.
|
||||
**
|
||||
** allocMemory:
|
||||
** The sum of free and busy memory in the GC heap.
|
||||
**
|
||||
** maxMemory:
|
||||
** The maximum size that the GC heap is allowed to grow.
|
||||
**
|
||||
** lowSeg:
|
||||
** The lowest segment currently used in the GC heap.
|
||||
**
|
||||
** highSeg:
|
||||
** The highest segment currently used in the GC heap.
|
||||
** The lowSeg and highSeg members are used for a "quick test" of whether
|
||||
** a pointer falls within the GC heap. [ see GC_IN_HEAP(...) ]
|
||||
**
|
||||
** lock:
|
||||
** Monitor used for syncronization within the GC.
|
||||
**
|
||||
** finalizer:
|
||||
** Thread in which the GC finalizer is running.
|
||||
**
|
||||
** liveBlock:
|
||||
** Object scanning functions call through this function pointer to
|
||||
** register a potential block of pointers with the collector. (This is
|
||||
** currently not at all different than processRoot.)
|
||||
**
|
||||
** livePointer:
|
||||
** Object scanning functions call through this function pointer to
|
||||
** register a single pointer with the collector.
|
||||
**
|
||||
** processRootBlock:
|
||||
** When a root finder identifies a root it should call through this
|
||||
** function pointer so that the GC can process the root. The call takes
|
||||
** a base address and count which the gc will examine for valid heap
|
||||
** pointers.
|
||||
**
|
||||
** processRootPointer:
|
||||
** When a root finder identifies a root it should call through this
|
||||
** function pointer so that the GC can process the root. The call takes
|
||||
** a single pointer value.
|
||||
*/
|
||||
typedef struct GCInfoStr {
|
||||
PRWord flags; /* trace flags (see below) */
|
||||
PRWord busyMemory; /* memory in use right now */
|
||||
PRWord freeMemory; /* memory free right now */
|
||||
PRWord allocMemory; /* sum of busy & free memory */
|
||||
PRWord maxMemory; /* max memory we are allowed to allocate */
|
||||
PRWord *lowSeg; /* lowest segment in the GC heap */
|
||||
PRWord *highSeg; /* higest segment in the GC heap */
|
||||
|
||||
PRMonitor *lock;
|
||||
PRThread *finalizer;
|
||||
|
||||
void (PR_CALLBACK *liveBlock)(void **base, PRInt32 count);
|
||||
void (PR_CALLBACK *livePointer)(void *ptr);
|
||||
void (PR_CALLBACK *processRootBlock)(void **base, PRInt32 count);
|
||||
void (PR_CALLBACK *processRootPointer)(void *ptr);
|
||||
FILE* dumpOutput;
|
||||
#ifdef GCTIMINGHOOK
|
||||
void (*gcTimingHook)(int32 gcTime);
|
||||
#endif
|
||||
} GCInfo;
|
||||
|
||||
PR_EXTERN(GCInfo *) PR_GetGCInfo(void);
|
||||
PR_EXTERN(PRBool) PR_GC_In_Heap(void GCPTR *object);
|
||||
|
||||
/*
|
||||
** Simple bounds check to see if a pointer is anywhere near the GC heap.
|
||||
** Used to avoid calls to PR_ProcessRoot and PR_LiveObject by object
|
||||
** scanning code.
|
||||
*/
|
||||
#if !defined(XP_PC) || defined(_WIN32)
|
||||
#define GC_IN_HEAP(_info, _p) (((PRWord*)(_p) >= (_info)->lowSeg) && \
|
||||
((PRWord*)(_p) < (_info)->highSeg))
|
||||
#else
|
||||
/*
|
||||
** The simple bounds check, above, doesn't work in Win16, because we don't
|
||||
** maintain: lowSeg == MIN(all segments) and highSeg == MAX(all segments).
|
||||
** So we have to do a little better.
|
||||
*/
|
||||
#define GC_IN_HEAP(_info, _p) PR_GC_In_Heap(_p)
|
||||
#endif
|
||||
|
||||
PR_EXTERN(PRWord) PR_GetObjectHeader(void *ptr);
|
||||
|
||||
PR_EXTERN(PRWord) PR_SetObjectHeader(void *ptr, PRWord newUserBits);
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
/* Trace flags (passed to PR_InitGC or in environment GCLOG) */
|
||||
#define GC_TRACE 0x0001
|
||||
#define GC_ROOTS 0x0002
|
||||
#define GC_LIVE 0x0004
|
||||
#define GC_ALLOC 0x0008
|
||||
#define GC_MARK 0x0010
|
||||
#define GC_SWEEP 0x0020
|
||||
#define GC_DEBUG 0x0040
|
||||
#define GC_FINAL 0x0080
|
||||
|
||||
#if defined(DEBUG_kipp) || defined(DEBUG_warren)
|
||||
#define GC_CHECK 0x0100
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define GCTRACE(x, y) if (PR_GetGCInfo()->flags & x) GCTrace y
|
||||
PR_EXTERN(void) GCTrace(char *fmt, ...);
|
||||
#else
|
||||
#define GCTRACE(x, y)
|
||||
#endif
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* prgc_h___ */
|
||||
107
mozilla/nsprpub/lib/msgc/src/Makefile
Normal file
107
mozilla/nsprpub/lib/msgc/src/Makefile
Normal file
@@ -0,0 +1,107 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../../..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
# Disable optimization of the nspr on SunOS4.1.3
|
||||
ifeq ($(OS_ARCH),SunOS)
|
||||
ifeq ($(OS_RELEASE),4.1.3_U1)
|
||||
OPTIMIZER =
|
||||
endif
|
||||
endif
|
||||
|
||||
INCLUDES = -I$(DIST)/include -I../include
|
||||
|
||||
CSRCS = prgcapi.c prmsgc.c
|
||||
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
ifeq ($(OS_TARGET),WIN16)
|
||||
CSRCS += win16gc.c
|
||||
else
|
||||
ifeq ($(OS_TARGET),OS2)
|
||||
CSRCS += os2gc.c
|
||||
else
|
||||
CSRCS += win32gc.c
|
||||
endif
|
||||
endif
|
||||
else
|
||||
CSRCS += unixgc.c
|
||||
endif
|
||||
|
||||
NSPR_VERSION = $(MOD_VERSION)
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq (,$(filter-out WIN16 OS2,$(OS_TARGET)))
|
||||
EXTRA_LIBS = $(DIST)/lib/nspr$(NSPR_VERSION).lib
|
||||
else
|
||||
DLLBASE=/BASE:0x30000000
|
||||
#RES=$(OBJDIR)/ds.res
|
||||
#RESNAME=$(MOD_DEPTH)/pr/src/nspr.rc
|
||||
#OS_LIBS = user32.lib
|
||||
EXTRA_LIBS = $(DIST)/lib/libnspr$(NSPR_VERSION).lib
|
||||
endif
|
||||
else
|
||||
ifeq ($(OS_ARCH), AIX)
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
OS_LIBS += -lc
|
||||
else
|
||||
OS_LIBS += -lc_r
|
||||
endif
|
||||
endif
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
|
||||
EXTRA_LIBS = -L$(DIST)/lib -lnspr$(NSPR_VERSION)_shr
|
||||
else
|
||||
EXTRA_LIBS = -L$(DIST)/lib -lnspr$(NSPR_VERSION)
|
||||
endif
|
||||
endif
|
||||
|
||||
# On NCR and SCO_SV, we can't link with extra libraries when
|
||||
# we build a shared library. If we do so, the linker doesn't
|
||||
# complain, but we would run into weird problems at run-time.
|
||||
# Therefore on these platforms, we link just the .o files.
|
||||
ifeq ($(OS_ARCH),NCR)
|
||||
EXTRA_LIBS =
|
||||
endif
|
||||
ifeq ($(OS_ARCH),SCO_SV)
|
||||
EXTRA_LIBS =
|
||||
endif
|
||||
|
||||
LIBRARY_NAME = msgc
|
||||
LIBRARY_VERSION = $(MOD_VERSION)
|
||||
|
||||
RELEASE_LIBS = $(TARGETS)
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
#
|
||||
# The Client build wants the shared libraries in $(DIST)/bin,
|
||||
# so we also install them there.
|
||||
#
|
||||
|
||||
export:: $(TARGETS)
|
||||
$(INSTALL) -m 444 $(TARGETS) $(DIST)/lib
|
||||
$(INSTALL) -m 444 $(SHARED_LIBRARY) $(DIST)/bin
|
||||
ifeq ($(MOZ_BITS),16)
|
||||
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/lib
|
||||
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/bin
|
||||
endif
|
||||
|
||||
install:: export
|
||||
56
mozilla/nsprpub/lib/msgc/src/macgc.c
Normal file
56
mozilla/nsprpub/lib/msgc/src/macgc.c
Normal file
@@ -0,0 +1,56 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "primpl.h"
|
||||
#include "MacMemAllocator.h"
|
||||
|
||||
void _MD_InitGC() {}
|
||||
|
||||
void *_MD_GrowGCHeap(size_t *sizep)
|
||||
{
|
||||
void *heapPtr = NULL;
|
||||
size_t heapSize = *sizep;
|
||||
|
||||
// In previous versions of this code we tried to allocate GC heaps from the application
|
||||
// heap. In the 4.0 application, we try to keep our app heap allications to a minimum
|
||||
// and instead go through our own memory allocation routines.
|
||||
heapPtr = malloc(heapSize);
|
||||
|
||||
if (heapPtr == NULL) {
|
||||
FreeMemoryStats stats;
|
||||
|
||||
memtotal(heapSize, &stats); // How much can we allcoate?
|
||||
|
||||
if (stats.maxBlockSize < heapSize)
|
||||
heapSize = stats.maxBlockSize;
|
||||
|
||||
heapPtr = malloc(heapSize);
|
||||
|
||||
if (heapPtr == NULL) // Now we're hurting
|
||||
heapSize = 0;
|
||||
}
|
||||
|
||||
*sizep = heapSize;
|
||||
return heapPtr;
|
||||
}
|
||||
|
||||
|
||||
void _MD_FreeGCSegment(void *base, int32 /* len */)
|
||||
{
|
||||
free(base);
|
||||
}
|
||||
64
mozilla/nsprpub/lib/msgc/src/os2gc.c
Normal file
64
mozilla/nsprpub/lib/msgc/src/os2gc.c
Normal file
@@ -0,0 +1,64 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GC related routines
|
||||
*
|
||||
*/
|
||||
#include "prlog.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Leave a bit of room for any malloc header bytes... */
|
||||
#define MAX_SEGMENT_SIZE (65536L - 4096L)
|
||||
|
||||
/************************************************************************/
|
||||
/*
|
||||
** Machine dependent GC Heap management routines:
|
||||
** _MD_GrowGCHeap
|
||||
*/
|
||||
/************************************************************************/
|
||||
void _MD_InitGC() {}
|
||||
|
||||
void *_MD_GrowGCHeap(PRUint32 *sizep)
|
||||
{
|
||||
void *addr;
|
||||
|
||||
if ( *sizep > MAX_SEGMENT_SIZE )
|
||||
{
|
||||
*sizep = MAX_SEGMENT_SIZE;
|
||||
}
|
||||
|
||||
addr = malloc((size_t)*sizep);
|
||||
return addr;
|
||||
}
|
||||
|
||||
|
||||
PRBool _MD_ExtendGCHeap(char *base, PRInt32 oldSize, PRInt32 newSize) {
|
||||
/* Not sure about this. Todd? */
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
|
||||
void _MD_FreeGCSegment(void *base, PRInt32 len)
|
||||
{
|
||||
if (base)
|
||||
{
|
||||
free(base);
|
||||
}
|
||||
}
|
||||
332
mozilla/nsprpub/lib/msgc/src/prgcapi.c
Normal file
332
mozilla/nsprpub/lib/msgc/src/prgcapi.c
Normal file
@@ -0,0 +1,332 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include "prenv.h"
|
||||
#include "prmem.h"
|
||||
#include "prmon.h"
|
||||
#include "prlog.h"
|
||||
#include "prthread.h"
|
||||
#if defined(XP_MAC)
|
||||
#include "pprthred.h"
|
||||
#else
|
||||
#include "private/pprthred.h"
|
||||
#endif
|
||||
#include "gcint.h"
|
||||
|
||||
/*
|
||||
** Generic GC implementation independent code for the NSPR GC
|
||||
*/
|
||||
|
||||
RootFinder *_pr_rootFinders;
|
||||
|
||||
CollectorType *_pr_collectorTypes;
|
||||
|
||||
/* GC State information */
|
||||
GCInfo _pr_gcData;
|
||||
|
||||
GCBeginGCHook *_pr_beginGCHook;
|
||||
void *_pr_beginGCHookArg;
|
||||
GCBeginGCHook *_pr_endGCHook;
|
||||
void *_pr_endGCHookArg;
|
||||
|
||||
GCBeginFinalizeHook *_pr_beginFinalizeHook;
|
||||
void *_pr_beginFinalizeHookArg;
|
||||
GCBeginFinalizeHook *_pr_endFinalizeHook;
|
||||
void *_pr_endFinalizeHookArg;
|
||||
|
||||
FILE *_pr_dump_file;
|
||||
int _pr_do_a_dump;
|
||||
GCLockHook *_pr_GCLockHook;
|
||||
|
||||
extern PRLogModuleInfo *_pr_msgc_lm;
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
static PRStatus PR_CALLBACK
|
||||
pr_ScanOneThread(PRThread* t, void** addr, PRUword count, void* closure)
|
||||
{
|
||||
#if defined(XP_MAC)
|
||||
#pragma unused (t, closure)
|
||||
#endif
|
||||
|
||||
_pr_gcData.processRootBlock(addr, count);
|
||||
return PR_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
** Scan all of the threads C stack's and registers, looking for "root"
|
||||
** pointers into the GC heap. These are the objects that the GC cannot
|
||||
** move and are considered "live" by the GC. Caller has stopped all of
|
||||
** the threads from running.
|
||||
*/
|
||||
static void PR_CALLBACK ScanThreads(void *arg)
|
||||
{
|
||||
PR_ScanStackPointers(pr_ScanOneThread, arg);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
PR_IMPLEMENT(GCInfo *) PR_GetGCInfo(void)
|
||||
{
|
||||
return &_pr_gcData;
|
||||
}
|
||||
|
||||
|
||||
PR_IMPLEMENT(PRInt32) PR_RegisterType(GCType *t)
|
||||
{
|
||||
CollectorType *ct, *ect;
|
||||
int rv = -1;
|
||||
|
||||
LOCK_GC();
|
||||
ct = &_pr_collectorTypes[0];
|
||||
ect = &_pr_collectorTypes[FREE_MEMORY_TYPEIX];
|
||||
for (; ct < ect; ct++) {
|
||||
if (ct->flags == 0) {
|
||||
ct->gctype = *t;
|
||||
ct->flags = _GC_TYPE_BUSY;
|
||||
if (0 != ct->gctype.finalize) {
|
||||
ct->flags |= _GC_TYPE_FINAL;
|
||||
}
|
||||
if (0 != ct->gctype.getWeakLinkOffset) {
|
||||
ct->flags |= _GC_TYPE_WEAK;
|
||||
}
|
||||
rv = ct - &_pr_collectorTypes[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
UNLOCK_GC();
|
||||
return rv;
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(PRStatus) PR_RegisterRootFinder(
|
||||
GCRootFinder f, char *name, void *arg)
|
||||
{
|
||||
RootFinder *rf = PR_NEWZAP(RootFinder);
|
||||
if (rf) {
|
||||
rf->func = f;
|
||||
rf->name = name;
|
||||
rf->arg = arg;
|
||||
|
||||
LOCK_GC();
|
||||
rf->next = _pr_rootFinders;
|
||||
_pr_rootFinders = rf;
|
||||
UNLOCK_GC();
|
||||
return PR_SUCCESS;
|
||||
}
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
PR_IMPLEMENT(int) PR_RegisterGCLockHook(GCLockHookFunc* f, void *arg)
|
||||
{
|
||||
|
||||
GCLockHook *rf = 0;
|
||||
|
||||
rf = (GCLockHook*) calloc(1, sizeof(GCLockHook));
|
||||
if (rf) {
|
||||
rf->func = f;
|
||||
rf->arg = arg;
|
||||
|
||||
LOCK_GC();
|
||||
/* first dummy node */
|
||||
if (! _pr_GCLockHook) {
|
||||
_pr_GCLockHook = (GCLockHook*) calloc(1, sizeof(GCLockHook));
|
||||
_pr_GCLockHook->next = _pr_GCLockHook;
|
||||
_pr_GCLockHook->prev = _pr_GCLockHook;
|
||||
}
|
||||
|
||||
rf->next = _pr_GCLockHook;
|
||||
rf->prev = _pr_GCLockHook->prev;
|
||||
_pr_GCLockHook->prev->next = rf;
|
||||
_pr_GCLockHook->prev = rf;
|
||||
UNLOCK_GC();
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
PR_IMPLEMENT(void) PR_SetGCLockHook(GCLockHook *hook, void *arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
_pr_GCLockHook = hook;
|
||||
_pr_GCLockHookArg2 = arg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PR_GetGCLockHook(GCLockHook **hook, void **arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
*hook = _pr_GCLockHook;
|
||||
*arg = _pr_GCLockHookArg2;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
PR_IMPLEMENT(void) PR_SetBeginGCHook(GCBeginGCHook *hook, void *arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
_pr_beginGCHook = hook;
|
||||
_pr_beginGCHookArg = arg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PR_GetBeginGCHook(GCBeginGCHook **hook, void **arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
*hook = _pr_beginGCHook;
|
||||
*arg = _pr_beginGCHookArg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PR_SetEndGCHook(GCEndGCHook *hook, void *arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
_pr_endGCHook = hook;
|
||||
_pr_endGCHookArg = arg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PR_GetEndGCHook(GCEndGCHook **hook, void **arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
*hook = _pr_endGCHook;
|
||||
*arg = _pr_endGCHookArg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PR_SetBeginFinalizeHook(GCBeginFinalizeHook *hook, void *arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
_pr_beginFinalizeHook = hook;
|
||||
_pr_beginFinalizeHookArg = arg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PR_GetBeginFinalizeHook(GCBeginFinalizeHook **hook,
|
||||
void **arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
*hook = _pr_beginFinalizeHook;
|
||||
*arg = _pr_beginFinalizeHookArg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PR_SetEndFinalizeHook(GCEndFinalizeHook *hook, void *arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
_pr_endFinalizeHook = hook;
|
||||
_pr_endFinalizeHookArg = arg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
PR_IMPLEMENT(void) PR_GetEndFinalizeHook(GCEndFinalizeHook **hook, void **arg)
|
||||
{
|
||||
LOCK_GC();
|
||||
*hook = _pr_endFinalizeHook;
|
||||
*arg = _pr_endFinalizeHookArg;
|
||||
UNLOCK_GC();
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
#include "prprf.h"
|
||||
|
||||
#if defined(WIN16)
|
||||
static FILE *tracefile = 0;
|
||||
#endif
|
||||
|
||||
PR_IMPLEMENT(void) GCTrace(char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char buf[400];
|
||||
|
||||
va_start(ap, fmt);
|
||||
PR_vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||
va_end(ap);
|
||||
#if defined(WIN16)
|
||||
if ( tracefile == 0 )
|
||||
{
|
||||
tracefile = fopen( "xxxGCtr", "w" );
|
||||
}
|
||||
fprintf(tracefile, "%s\n", buf );
|
||||
fflush(tracefile);
|
||||
#else
|
||||
PR_LOG(_pr_msgc_lm, PR_LOG_ALWAYS, ("%s", buf));
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
void _PR_InitGC(PRWord flags)
|
||||
{
|
||||
static char firstTime = 1;
|
||||
|
||||
if (!firstTime) return;
|
||||
firstTime = 0;
|
||||
|
||||
_MD_InitGC();
|
||||
|
||||
if (flags == 0) {
|
||||
char *ev = PR_GetEnv("GCLOG");
|
||||
if (ev && ev[0]) {
|
||||
flags = atoi(ev);
|
||||
}
|
||||
}
|
||||
_pr_gcData.flags = flags;
|
||||
|
||||
_pr_gcData.lock = PR_NewMonitor();
|
||||
|
||||
_pr_collectorTypes = (CollectorType*) PR_CALLOC(256 * sizeof(CollectorType));
|
||||
|
||||
PR_RegisterRootFinder(ScanThreads, "scan threads", 0);
|
||||
PR_RegisterRootFinder(_PR_ScanFinalQueue, "scan final queue", 0);
|
||||
}
|
||||
|
||||
extern void pr_FinalizeOnExit(void);
|
||||
|
||||
#ifdef DEBUG
|
||||
#ifdef GC_STATS
|
||||
PR_PUBLIC_API(void) PR_PrintGCAllocStats(void);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
PR_IMPLEMENT(void)
|
||||
PR_ShutdownGC(PRBool finalizeOnExit)
|
||||
{
|
||||
/* first finalize all the objects in the heap */
|
||||
if (finalizeOnExit) {
|
||||
pr_FinalizeOnExit();
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
#ifdef GC_STATS
|
||||
PR_PrintGCAllocStats();
|
||||
#endif /* GC_STATS */
|
||||
#endif /* DEBUG */
|
||||
|
||||
/* then the chance for any future allocations */
|
||||
|
||||
/* finally delete the gc heap */
|
||||
|
||||
/* write me */
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
3473
mozilla/nsprpub/lib/msgc/src/prmsgc.c
Normal file
3473
mozilla/nsprpub/lib/msgc/src/prmsgc.c
Normal file
File diff suppressed because it is too large
Load Diff
136
mozilla/nsprpub/lib/msgc/src/unixgc.c
Normal file
136
mozilla/nsprpub/lib/msgc/src/unixgc.c
Normal file
@@ -0,0 +1,136 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "prlock.h"
|
||||
#include "prlog.h"
|
||||
#include "prmem.h"
|
||||
#include "gcint.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#define _PR_GC_VMBASE 0x40000000
|
||||
|
||||
#if defined(SOLARIS)
|
||||
#define _MD_MMAP_FLAGS MAP_SHARED
|
||||
#elif defined(OSF1) || defined(RELIANTUNIX)
|
||||
#define _MD_MMAP_FLAGS MAP_PRIVATE|MAP_FIXED
|
||||
#else
|
||||
#define _MD_MMAP_FLAGS MAP_PRIVATE
|
||||
#endif
|
||||
|
||||
static PRInt32 zero_fd = -1;
|
||||
static PRLock *zero_fd_lock = NULL;
|
||||
|
||||
void _MD_InitGC(void)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
* Disable using mmap(2) if NSPR_NO_MMAP is set
|
||||
*/
|
||||
if (getenv("NSPR_NO_MMAP")) {
|
||||
zero_fd = -2;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
zero_fd = open("/dev/zero",O_RDWR , 0);
|
||||
zero_fd_lock = PR_NewLock();
|
||||
}
|
||||
|
||||
/* This static variable is used by _MD_GrowGCHeap and _MD_ExtendGCHeap */
|
||||
static void *lastaddr = (void*) _PR_GC_VMBASE;
|
||||
|
||||
void *_MD_GrowGCHeap(PRUint32 *sizep)
|
||||
{
|
||||
void *addr;
|
||||
PRUint32 size;
|
||||
|
||||
size = *sizep;
|
||||
|
||||
PR_Lock(zero_fd_lock);
|
||||
if (zero_fd < 0) {
|
||||
goto mmap_loses;
|
||||
}
|
||||
|
||||
/* Extend the mapping */
|
||||
addr = mmap(lastaddr, size, PROT_READ|PROT_WRITE|PROT_EXEC,
|
||||
_MD_MMAP_FLAGS,
|
||||
zero_fd, 0);
|
||||
if (addr == (void*)-1) {
|
||||
zero_fd = -1;
|
||||
goto mmap_loses;
|
||||
}
|
||||
lastaddr = ((char*)addr + size);
|
||||
#ifdef DEBUG
|
||||
PR_LOG(_pr_msgc_lm, PR_LOG_WARNING,
|
||||
("GC: heap extends from %08x to %08x\n",
|
||||
_PR_GC_VMBASE,
|
||||
_PR_GC_VMBASE + (char*)lastaddr - (char*)_PR_GC_VMBASE));
|
||||
#endif
|
||||
PR_Unlock(zero_fd_lock);
|
||||
return addr;
|
||||
|
||||
mmap_loses:
|
||||
PR_Unlock(zero_fd_lock);
|
||||
return PR_MALLOC(size);
|
||||
}
|
||||
|
||||
/* XXX - This is disabled. MAP_FIXED just does not work. */
|
||||
#if 0
|
||||
PRBool _MD_ExtendGCHeap(char *base, PRInt32 oldSize, PRInt32 newSize) {
|
||||
PRBool rv = PR_FALSE;
|
||||
void* addr;
|
||||
PRInt32 allocSize = newSize - oldSize;
|
||||
|
||||
PR_Lock(zero_fd_lock);
|
||||
addr = mmap(base + oldSize, allocSize, PROT_READ|PROT_WRITE|PROT_EXEC,
|
||||
_MD_MMAP_FLAGS | MAP_FIXED, zero_fd, 0);
|
||||
if (addr == (void*)-1) {
|
||||
goto loser;
|
||||
}
|
||||
if (addr != (void*) (base + oldSize)) {
|
||||
munmap(base + oldSize, allocSize);
|
||||
goto loser;
|
||||
}
|
||||
lastaddr = ((char*)base + newSize);
|
||||
PR_LOG(_pr_msgc_lm, PR_LOG_ALWAYS,
|
||||
("GC: heap now extends from %p to %p",
|
||||
base, base + newSize));
|
||||
rv = PR_TRUE;
|
||||
|
||||
loser:
|
||||
PR_Unlock(zero_fd_lock);
|
||||
return rv;
|
||||
}
|
||||
#else
|
||||
PRBool _MD_ExtendGCHeap(char *base, PRInt32 oldSize, PRInt32 newSize) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
void _MD_FreeGCSegment(void *base, PRInt32 len)
|
||||
{
|
||||
if (zero_fd < 0) {
|
||||
PR_DELETE(base);
|
||||
} else {
|
||||
(void) munmap(base, len);
|
||||
}
|
||||
}
|
||||
57
mozilla/nsprpub/lib/msgc/src/win16gc.c
Normal file
57
mozilla/nsprpub/lib/msgc/src/win16gc.c
Normal file
@@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
#if defined(WIN16)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include "prtypes.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MAX_SEGMENT_SIZE (65536l - 4096l)
|
||||
|
||||
/************************************************************************/
|
||||
/*
|
||||
** Machine dependent GC Heap management routines:
|
||||
** _MD_GrowGCHeap
|
||||
*/
|
||||
/************************************************************************/
|
||||
|
||||
void _MD_InitGC(void) {}
|
||||
|
||||
extern void *
|
||||
_MD_GrowGCHeap(PRUint32 *sizep)
|
||||
{
|
||||
void *addr;
|
||||
|
||||
if( *sizep > MAX_SEGMENT_SIZE ) {
|
||||
*sizep = MAX_SEGMENT_SIZE;
|
||||
}
|
||||
|
||||
addr = malloc((size_t)*sizep);
|
||||
return addr;
|
||||
}
|
||||
|
||||
HINSTANCE _pr_hInstance;
|
||||
|
||||
int CALLBACK LibMain( HINSTANCE hInst, WORD wDataSeg,
|
||||
WORD cbHeapSize, LPSTR lpszCmdLine )
|
||||
{
|
||||
_pr_hInstance = hInst;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
110
mozilla/nsprpub/lib/msgc/src/win32gc.c
Normal file
110
mozilla/nsprpub/lib/msgc/src/win32gc.c
Normal file
@@ -0,0 +1,110 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GC related routines
|
||||
*
|
||||
*/
|
||||
#include <windows.h>
|
||||
#include "prlog.h"
|
||||
|
||||
extern PRLogModuleInfo* _pr_msgc_lm;
|
||||
|
||||
#define GC_VMBASE 0x40000000
|
||||
#define GC_VMLIMIT 0x00FFFFFF
|
||||
|
||||
/************************************************************************/
|
||||
/*
|
||||
** Machine dependent GC Heap management routines:
|
||||
** _MD_GrowGCHeap
|
||||
*/
|
||||
/************************************************************************/
|
||||
|
||||
void *baseaddr = (void*) GC_VMBASE;
|
||||
void *lastaddr = (void*) GC_VMBASE;
|
||||
|
||||
void _MD_InitGC() {}
|
||||
|
||||
void *_MD_GrowGCHeap(PRUint32 *sizep)
|
||||
{
|
||||
void *addr;
|
||||
size_t size;
|
||||
|
||||
/* Reserve a block of memory for the GC */
|
||||
if( lastaddr == baseaddr ) {
|
||||
addr = VirtualAlloc( (void *)GC_VMBASE, GC_VMLIMIT, MEM_RESERVE, PAGE_READWRITE );
|
||||
|
||||
/*
|
||||
** If the GC_VMBASE address is already mapped, then let the OS choose a
|
||||
** base address that is available...
|
||||
*/
|
||||
if (addr == NULL) {
|
||||
addr = VirtualAlloc( NULL, GC_VMLIMIT, MEM_RESERVE, PAGE_READWRITE );
|
||||
|
||||
baseaddr = lastaddr = addr;
|
||||
if (addr == NULL) {
|
||||
PR_LOG(_pr_msgc_lm, PR_LOG_ALWAYS, ("GC: unable to allocate heap: LastError=%ld",
|
||||
GetLastError()));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
size = *sizep;
|
||||
|
||||
/* Extend the mapping */
|
||||
addr = VirtualAlloc( lastaddr, size, MEM_COMMIT, PAGE_READWRITE );
|
||||
if (addr == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
lastaddr = ((char*)addr + size);
|
||||
PR_LOG(_pr_msgc_lm, PR_LOG_ALWAYS,
|
||||
("GC: heap extends from %08x to %08x",
|
||||
baseaddr, (long)baseaddr + (char*)lastaddr - (char*)baseaddr));
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
PRBool _MD_ExtendGCHeap(char *base, PRInt32 oldSize, PRInt32 newSize) {
|
||||
void* addr;
|
||||
|
||||
addr = VirtualAlloc( base + oldSize, newSize - oldSize,
|
||||
MEM_COMMIT, PAGE_READWRITE );
|
||||
if (NULL == addr) {
|
||||
PR_LOG(_pr_msgc_lm, PR_LOG_ALWAYS, ("GC: unable to extend heap: LastError=%ld",
|
||||
GetLastError()));
|
||||
return PR_FALSE;
|
||||
}
|
||||
if (base + oldSize != (char*)addr) {
|
||||
PR_LOG(_pr_msgc_lm, PR_LOG_ALWAYS, ("GC: segment extension returned %x instead of %x",
|
||||
addr, base + oldSize));
|
||||
VirtualFree(addr, newSize - oldSize, MEM_DECOMMIT);
|
||||
return PR_FALSE;
|
||||
}
|
||||
lastaddr = base + newSize;
|
||||
PR_LOG(_pr_msgc_lm, PR_LOG_ALWAYS,
|
||||
("GC: heap now extends from %p to %p",
|
||||
base, base + newSize));
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
|
||||
void _MD_FreeGCSegment(void *base, PRInt32 len)
|
||||
{
|
||||
(void)VirtualFree(base, 0, MEM_RELEASE);
|
||||
}
|
||||
283
mozilla/nsprpub/lib/msgc/tests/Makefile
Normal file
283
mozilla/nsprpub/lib/msgc/tests/Makefile
Normal file
@@ -0,0 +1,283 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../../..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
OS_CFLAGS = $(OS_EXE_CFLAGS)
|
||||
W16STDIO = $(MOD_DEPTH)/pr/src/md/windows/$(OBJDIR)/w16stdio.$(OBJ_SUFFIX)
|
||||
endif
|
||||
|
||||
ifeq ($(OS_TARGET), OS2)
|
||||
OS_CFLAGS = $(OS_EXE_CFLAGS)
|
||||
endif
|
||||
|
||||
CSRCS = gc1.c thrashgc.c
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
PROG_SUFFIX = .exe
|
||||
else
|
||||
PROG_SUFFIX =
|
||||
endif
|
||||
|
||||
PROGS = $(addprefix $(OBJDIR)/, $(CSRCS:.c=$(PROG_SUFFIX)))
|
||||
|
||||
TARGETS = $(PROGS) $(OBJS)
|
||||
|
||||
INCLUDES = -I$(DIST)/include
|
||||
|
||||
# Setting the variables LDOPTS and LIBPR. We first initialize
|
||||
# them to the default values, then adjust them for some platforms.
|
||||
LDOPTS = -L$(DIST)/lib
|
||||
NSPR_VERSION = $(MOD_VERSION)
|
||||
GC_VERSION = $(MOD_VERSION)
|
||||
LIBPR = -lnspr$(NSPR_VERSION)
|
||||
LIBPLC = -lplc$(NSPR_VERSION)
|
||||
LIBGC = -lmsgc$(GC_VERSION)
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
LIBPR = $(DIST)/lib/nspr$(NSPR_VERSION).lib
|
||||
LIBPLC = $(DIST)/lib/plc$(NSPR_VERSION).lib
|
||||
LIBGC= $(DIST)/lib/msgc$(GC_VERSION).lib
|
||||
else
|
||||
ifeq ($(OS_TARGET),OS2)
|
||||
LDOPTS = -NOE -DEBUG -nologo -PMTYPE:VIO
|
||||
LIBPR = $(DIST)/lib/nspr$(NSPR_VERSION).lib
|
||||
LIBPLC = $(DIST)/lib/plc$(NSPR_VERSION).lib
|
||||
LIBGC= $(DIST)/lib/msgc$(GC_VERSION).lib
|
||||
else
|
||||
LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO
|
||||
LIBPR = $(DIST)/lib/libnspr$(NSPR_VERSION).$(LIB_SUFFIX)
|
||||
LIBPLC = $(DIST)/lib/libplc$(NSPR_VERSION).$(LIB_SUFFIX)
|
||||
LIBGC= $(DIST)/lib/libmsgc$(GC_VERSION).$(LIB_SUFFIX)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(OS_ARCH), WINNT)
|
||||
PWD = $(shell pwd)
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), IRIX)
|
||||
LDOPTS += -rpath $(PWD)/$(DIST)/lib -rdata_shared
|
||||
|
||||
ifeq ($(USE_N32),1)
|
||||
LDOPTS += -n32
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), OSF1)
|
||||
# I haven't figured out how to pass -rpath to cc on OSF1 V3.2, so
|
||||
# we do static linking.
|
||||
ifeq ($(OS_RELEASE), V3.2)
|
||||
LIBPR = $(DIST)/lib/libnspr$(NSPR_VERSION).a
|
||||
LIBPLC = $(DIST)/lib/libplc$(NSPR_VERSION).a
|
||||
LIBGC = $(DIST)/lib/libmsgc$(GC_VERSION).a
|
||||
EXTRA_LIBS = -lc_r
|
||||
else
|
||||
LDOPTS += -rpath $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), HP-UX)
|
||||
LDOPTS += -Wl,+s,+b,$(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
# AIX
|
||||
ifeq ($(OS_ARCH),AIX)
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
LDOPTS += -blibpath:.:$(PWD)/$(DIST)/lib:/usr/lpp/xlC/lib:/usr/lib:/lib
|
||||
else
|
||||
LDOPTS += -blibpath:.:$(PWD)/$(DIST)/lib:/usr/lib/threads:/usr/lpp/xlC/lib:/usr/lib:/lib
|
||||
endif
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE),AIX4.1)
|
||||
LIBPR = -lnspr$(NSPR_VERSION)_shr
|
||||
LIBPLC = -lplc$(NSPR_VERSION)_shr
|
||||
LIBGC = -lmsgc$(GC_VERSION)_shr
|
||||
else
|
||||
LDOPTS += -brtl
|
||||
EXTRA_LIBS = -ldl
|
||||
endif
|
||||
endif
|
||||
|
||||
# Solaris
|
||||
ifeq ($(OS_ARCH), SunOS)
|
||||
ifneq ($(OS_RELEASE), 4.1.3_U1)
|
||||
ifdef NS_USE_GCC
|
||||
LDOPTS += -Xlinker -R -Xlinker $(PWD)/$(DIST)/lib
|
||||
else
|
||||
LDOPTS += -R $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(LOCAL_THREADS_ONLY),1)
|
||||
# SunOS 5.4 and 5.5 need to link with -lthread or -lpthread,
|
||||
# even though we already linked with these system libraries
|
||||
# when we built libnspr.so.
|
||||
ifeq ($(OS_RELEASE), 5.4)
|
||||
EXTRA_LIBS = -lthread
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE), 5.5)
|
||||
ifdef USE_PTHREADS
|
||||
EXTRA_LIBS = -lpthread
|
||||
else
|
||||
EXTRA_LIBS = -lthread
|
||||
endif
|
||||
endif
|
||||
endif # LOCAL_THREADS_ONLY
|
||||
endif # SunOS
|
||||
|
||||
ifeq ($(OS_ARCH),NEC)
|
||||
EXTRA_LIBS = $(OS_LIBS)
|
||||
# This hardcodes in the executable programs the directory to find
|
||||
# libnspr.so etc. at program startup. Equivalent to the -R or -rpath
|
||||
# option for ld on other platforms.
|
||||
export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), NCR)
|
||||
# XXX: We see some strange problems when we link with libnspr.so.
|
||||
# So for now we use static libraries on NCR. The shared library
|
||||
# stuff below is commented out.
|
||||
LIBPR = $(DIST)/lib/libnspr$(NSPR_VERSION).a
|
||||
LIBPLC = $(DIST)/lib/libplc$(NSPR_VERSION).a
|
||||
LIBGC = $(DIST)/lib/libmsgc$(GC_VERSION).a
|
||||
EXTRA_LIBS = -lsocket -lnsl -ldl
|
||||
|
||||
# NCR needs to link against -lsocket -lnsl (and -lc, which is linked
|
||||
# implicitly by $(CC)) again even though we already linked with these
|
||||
# system libraries when we built libnspr.so.
|
||||
#EXTRA_LIBS = -lsocket -lnsl
|
||||
# This hardcodes in the executable programs the directory to find
|
||||
# libnspr.so etc. at program startup. Equivalent to the -R or -rpath
|
||||
# option for ld on other platforms.
|
||||
#export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), Linux)
|
||||
ifeq ($(OS_RELEASE), 1.2)
|
||||
EXTRA_LIBS = -ldl
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), SCO_SV)
|
||||
# SCO Unix needs to link against -lsocket again even though we
|
||||
# already linked with these system libraries when we built libnspr.so.
|
||||
EXTRA_LIBS = -lsocket
|
||||
# This hardcodes in the executable programs the directory to find
|
||||
# libnspr.so etc. at program startup. Equivalent to the -R or -rpath
|
||||
# option for ld on other platforms.
|
||||
export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH),ReliantUNIX)
|
||||
EXTRA_LIBS = -lsocket -lnsl -lgen -ldl -lresolv /usr/ucblib/libucb.a
|
||||
# This hardcodes in the executable programs the directory to find
|
||||
# libnspr.so etc. at program startup. Equivalent to the -R or -rpath
|
||||
# option for ld on other platforms.
|
||||
export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), UNIXWARE)
|
||||
export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH),BSD_386)
|
||||
EXTRA_LIBS = -ldl
|
||||
endif
|
||||
|
||||
#####################################################
|
||||
#
|
||||
# The rules
|
||||
#
|
||||
#####################################################
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
AIX_PRE_4_2 = 0
|
||||
ifeq ($(OS_ARCH),AIX)
|
||||
ifneq ($(OS_RELEASE),4.2)
|
||||
ifneq ($(USE_PTHREADS), 1)
|
||||
#AIX_PRE_4_2 = 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(AIX_PRE_4_2),1)
|
||||
|
||||
# AIX releases prior to 4.2 need a special two-step linking hack
|
||||
# in order to both override the system select() and be able to
|
||||
# get at the original system select().
|
||||
#
|
||||
# We use a pattern rule in ns/nspr20/config/rules.mk to generate
|
||||
# the .$(OBJ_SUFFIX) file from the .c source file, then do the
|
||||
# two-step linking hack below.
|
||||
|
||||
$(OBJDIR)/%: $(OBJDIR)/%.$(OBJ_SUFFIX)
|
||||
@$(MAKE_OBJDIR)
|
||||
rm -f $@ $(AIX_TMP)
|
||||
$(CC) $(AIX_LINK_OPTS) -o $(AIX_TMP) $< $(DIST)/lib/libnspr$(NSPR_VERSION).a
|
||||
$(CC) -o $@ $(AIX_TMP) $(AIX_WRAP)
|
||||
rm -f $(AIX_TMP)
|
||||
|
||||
else
|
||||
|
||||
# All platforms that are not AIX pre-4.2.
|
||||
|
||||
$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
|
||||
@$(MAKE_OBJDIR)
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq ($(OS_TARGET),WIN16)
|
||||
echo system windows >w16link
|
||||
echo name $@ >>w16link
|
||||
echo option map >>w16link
|
||||
# echo option CASEEXACT >>w16link
|
||||
echo option stack=16K >>w16link
|
||||
echo debug $(DEBUGTYPE) all >>w16link
|
||||
echo file >>w16link
|
||||
echo $< , >>w16link
|
||||
echo $(W16STDIO) >>w16link
|
||||
echo library >>w16link
|
||||
echo $(LIBPR), >>w16link
|
||||
echo $(LIBPLC), >>w16link
|
||||
echo $(LIBGC), >>w16link
|
||||
echo winsock.lib >>w16link
|
||||
wlink @w16link.
|
||||
else
|
||||
ifeq ($(OS_TARGET),OS2)
|
||||
$(LINK) $(LDOPTS) $< $(LIBGC) $(LIBPLC) $(LIBPR) so32dll.lib tcp32dll.lib -MAP:$(@:.exe=.map) -out:$@
|
||||
else
|
||||
link $(LDOPTS) $< $(LIBGC) $(LIBPLC) $(LIBPR) wsock32.lib -out:$@
|
||||
endif
|
||||
endif
|
||||
else
|
||||
$(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBGC) $(LIBPLC) $(LIBPR) $(EXTRA_LIBS) -o $@
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
export:: $(TARGETS)
|
||||
export:: install
|
||||
clean::
|
||||
rm -f $(TARGETS)
|
||||
238
mozilla/nsprpub/lib/msgc/tests/gc1.c
Normal file
238
mozilla/nsprpub/lib/msgc/tests/gc1.c
Normal file
@@ -0,0 +1,238 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/***********************************************************************
|
||||
** Includes
|
||||
***********************************************************************/
|
||||
/* Used to get the command line option */
|
||||
#include "plgetopt.h"
|
||||
|
||||
#include "prgc.h"
|
||||
#include "prinit.h"
|
||||
#include "prmon.h"
|
||||
#include "prinrval.h"
|
||||
#ifndef XP_MAC
|
||||
#include "private/pprthred.h"
|
||||
#else
|
||||
#include "pprthred.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef XP_MAC
|
||||
#include "prlog.h"
|
||||
#define printf PR_LogPrint
|
||||
extern void SetupMacPrintfLog(char *logFile);
|
||||
#endif
|
||||
|
||||
static PRMonitor *mon;
|
||||
static PRInt32 threads, waiting, iterations;
|
||||
static PRInt32 scanCount, finalizeCount, freeCount;
|
||||
|
||||
PRIntn failed_already=0;
|
||||
PRIntn debug_mode;
|
||||
|
||||
|
||||
typedef struct Array {
|
||||
PRUintn size;
|
||||
void *body[1];
|
||||
} Array;
|
||||
|
||||
int arrayTypeIndex;
|
||||
|
||||
static void PR_CALLBACK ScanArray(void *a)
|
||||
{
|
||||
/* printf ("In ScanArray a = %X size = %d \n", a, a->size); */
|
||||
scanCount++;
|
||||
}
|
||||
|
||||
static void PR_CALLBACK FinalizeArray(void *a)
|
||||
{
|
||||
/* printf ("In FinalizeArray a = %X size = %d \n", a, a->size); */
|
||||
finalizeCount++;
|
||||
}
|
||||
|
||||
static void PR_CALLBACK FreeArray(void *a)
|
||||
{
|
||||
/* printf ("In FreeArray\n"); */
|
||||
freeCount++;
|
||||
}
|
||||
|
||||
static Array *NewArray(PRUintn size)
|
||||
{
|
||||
Array *a;
|
||||
|
||||
a = (Array *)PR_AllocMemory(sizeof(Array) + size*sizeof(void*) - 1*sizeof(void*),
|
||||
arrayTypeIndex, PR_ALLOC_CLEAN);
|
||||
|
||||
/* printf ("In NewArray a = %X \n", a); */
|
||||
|
||||
if (a)
|
||||
a->size = size;
|
||||
return a;
|
||||
}
|
||||
|
||||
GCType arrayType = {
|
||||
ScanArray,
|
||||
FinalizeArray,
|
||||
0,
|
||||
0,
|
||||
FreeArray,
|
||||
0
|
||||
};
|
||||
|
||||
static void Initialize(void)
|
||||
{
|
||||
PR_InitGC(0, 0, 0, PR_GLOBAL_THREAD);
|
||||
arrayTypeIndex = PR_RegisterType(&arrayType);
|
||||
}
|
||||
|
||||
static void PR_CALLBACK AllocateLikeMad(void *arg)
|
||||
{
|
||||
Array *prev;
|
||||
PRInt32 i;
|
||||
PRInt32 count;
|
||||
|
||||
count = (PRInt32)arg;
|
||||
prev = 0;
|
||||
for (i = 0; i < count; i++) {
|
||||
Array *leak = NewArray(i & 511);
|
||||
if ((i & 1023) == 0) {
|
||||
prev = 0; /* forget */
|
||||
} else {
|
||||
if (i & 1) {
|
||||
prev = leak; /* remember */
|
||||
}
|
||||
}
|
||||
}
|
||||
PR_EnterMonitor(mon);
|
||||
waiting++;
|
||||
PR_Notify(mon);
|
||||
PR_ExitMonitor(mon);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
PRIntervalTime start, stop, usec;
|
||||
double d;
|
||||
PRIntn i, totalIterations;
|
||||
/* The command line argument: -d is used to determine if the test is being run
|
||||
in debug mode. The regress tool requires only one line output:PASS or FAIL.
|
||||
All of the printfs associated with this test has been handled with a if (debug_mode)
|
||||
test.
|
||||
Usage: test_name -d
|
||||
*/
|
||||
PLOptStatus os;
|
||||
PLOptState *opt = PL_CreateOptState(argc, argv, "dt:c:");
|
||||
|
||||
threads = 10;
|
||||
iterations = 100;
|
||||
|
||||
while (PL_OPT_EOL != (os = PL_GetNextOpt(opt)))
|
||||
{
|
||||
if (PL_OPT_BAD == os) {
|
||||
fprintf(stderr, "Invalid command-line option\n");
|
||||
exit(1);
|
||||
}
|
||||
switch (opt->option)
|
||||
{
|
||||
case 'd': /* debug mode */
|
||||
debug_mode = 1;
|
||||
break;
|
||||
case 't': /* number of threads */
|
||||
threads = atoi(opt->value);
|
||||
break;
|
||||
case 'c': /* iteration count */
|
||||
iterations = atoi(opt->value);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
PL_DestroyOptState(opt);
|
||||
|
||||
fprintf(stderr, "t is %ld, i is %ld\n", (long) threads, (long) iterations);
|
||||
/* main test */
|
||||
|
||||
PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 5);
|
||||
PR_STDIO_INIT();
|
||||
Initialize();
|
||||
|
||||
#ifdef XP_MAC
|
||||
SetupMacPrintfLog("gc1.log");
|
||||
debug_mode = 1;
|
||||
#endif
|
||||
|
||||
/* Spin all of the allocator threads and then wait for them to exit */
|
||||
start = PR_IntervalNow();
|
||||
mon = PR_NewMonitor();
|
||||
PR_EnterMonitor(mon);
|
||||
waiting = 0;
|
||||
for (i = 0; i < threads; i++) {
|
||||
(void) PR_CreateThreadGCAble(PR_USER_THREAD,
|
||||
AllocateLikeMad, (void*)iterations,
|
||||
PR_PRIORITY_NORMAL,
|
||||
PR_LOCAL_THREAD,
|
||||
PR_UNJOINABLE_THREAD,
|
||||
0);
|
||||
}
|
||||
while (waiting != threads) {
|
||||
PR_Wait(mon, PR_INTERVAL_NO_TIMEOUT);
|
||||
}
|
||||
PR_ExitMonitor(mon);
|
||||
|
||||
PR_GC();
|
||||
PR_ForceFinalize();
|
||||
|
||||
totalIterations = iterations * threads;
|
||||
/*
|
||||
if (scanCount != totalIterations)
|
||||
printf ("scanCount discrepancy scanCount = %d totalIterations = %d \n",
|
||||
scanCount, totalIterations);
|
||||
if (freeCount != totalIterations)
|
||||
printf ("freeCount discrepancy freeCount = %d totalIterations = %d \n",
|
||||
freeCount, totalIterations);
|
||||
if ((finalizeCount != totalIterations) && (finalizeCount != (totalIterations-1)))
|
||||
printf ("finalizeCount discrepancy finalizeCount = %d totalIterations = %d \n",
|
||||
finalizeCount,totalIterations);
|
||||
*/
|
||||
|
||||
stop = PR_IntervalNow();
|
||||
|
||||
usec = stop = stop - start;
|
||||
d = (double)usec;
|
||||
|
||||
if (debug_mode) printf("%40s: %6.2f usec\n", "GC allocation", d / (iterations * threads));
|
||||
else {
|
||||
if (d == 0.0) failed_already = PR_TRUE;
|
||||
|
||||
}
|
||||
|
||||
PR_Cleanup();
|
||||
if(failed_already)
|
||||
{
|
||||
printf("FAIL\n");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("PASS\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
255
mozilla/nsprpub/lib/msgc/tests/thrashgc.c
Normal file
255
mozilla/nsprpub/lib/msgc/tests/thrashgc.c
Normal file
@@ -0,0 +1,255 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/***********************************************************************
|
||||
** Name: thrashgc
|
||||
**
|
||||
** Description: test garbace collection functions.
|
||||
**
|
||||
** Modification History:
|
||||
** 19-May-97 AGarcia- Converted the test to accomodate the debug_mode flag.
|
||||
** The debug mode will print all of the printfs associated with this test.
|
||||
** The regress mode will be the default mode. Since the regress tool limits
|
||||
** the output to a one line status:PASS or FAIL,all of the printf statements
|
||||
** have been handled with an if (debug_mode) statement.
|
||||
** 04-June-97 AGarcia removed the Test_Result function. Regress tool has been updated to
|
||||
** recognize the return code from tha main program.
|
||||
***********************************************************************/
|
||||
/***********************************************************************
|
||||
** Includes
|
||||
***********************************************************************/
|
||||
#include "prthread.h"
|
||||
#include "prgc.h"
|
||||
#include "prprf.h"
|
||||
#include "prinrval.h"
|
||||
#include "prlock.h"
|
||||
#include "prinit.h"
|
||||
#include "prcvar.h"
|
||||
|
||||
#ifndef XP_MAC
|
||||
#include "private/pprthred.h"
|
||||
#else
|
||||
#include "pprthred.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <memory.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#ifdef XP_MAC
|
||||
#include "prlog.h"
|
||||
#define printf PR_LogPrint
|
||||
extern void SetupMacPrintfLog(char *logFile);
|
||||
#endif
|
||||
|
||||
PRIntn failed_already=0;
|
||||
PRIntn debug_mode;
|
||||
|
||||
static char* progname;
|
||||
static PRInt32 loops = 1000;
|
||||
static int tix1, tix2, tix3;
|
||||
static GCInfo* gcInfo;
|
||||
static PRLock* stderrLock;
|
||||
|
||||
typedef struct Type1 Type1;
|
||||
typedef struct Type2 Type2;
|
||||
|
||||
struct Type1 {
|
||||
Type2* atwo;
|
||||
Type1* next;
|
||||
};
|
||||
|
||||
struct Type2 {
|
||||
void* buf;
|
||||
};
|
||||
|
||||
static void PR_CALLBACK ScanType1(void *obj) {
|
||||
gcInfo->livePointer(((Type1 *)obj)->atwo);
|
||||
gcInfo->livePointer(((Type1 *)obj)->next);
|
||||
}
|
||||
|
||||
static void PR_CALLBACK ScanType2(void *obj) {
|
||||
gcInfo->livePointer(((Type2 *)obj)->buf);
|
||||
}
|
||||
|
||||
static GCType type1 = {
|
||||
ScanType1
|
||||
};
|
||||
|
||||
static GCType type2 = {
|
||||
ScanType2
|
||||
/* (void (*)(void*)) ScanType2 */
|
||||
};
|
||||
|
||||
static GCType type3 = {
|
||||
0
|
||||
};
|
||||
|
||||
Type1* NewType1(void) {
|
||||
Type1* p = (Type1*) PR_AllocMemory(sizeof(Type1), tix1, PR_ALLOC_DOUBLE);
|
||||
PR_ASSERT(p != NULL);
|
||||
return p;
|
||||
}
|
||||
|
||||
Type2* NewType2(void) {
|
||||
Type2* p = (Type2*) PR_AllocMemory(sizeof(Type2), tix2, PR_ALLOC_DOUBLE);
|
||||
PR_ASSERT(p != NULL);
|
||||
return p;
|
||||
}
|
||||
|
||||
void* NewBuffer(PRInt32 size) {
|
||||
void* p = PR_AllocMemory(size, tix3, PR_ALLOC_DOUBLE);
|
||||
PR_ASSERT(p != NULL);
|
||||
return p;
|
||||
}
|
||||
|
||||
/* Allocate alot of garbage */
|
||||
static void PR_CALLBACK AllocStuff(void *unused) {
|
||||
PRInt32 i;
|
||||
void* danglingRefs[50];
|
||||
PRIntervalTime start, end;
|
||||
char msg[100];
|
||||
|
||||
start = PR_IntervalNow();
|
||||
for (i = 0; i < loops; i++) {
|
||||
void* p;
|
||||
if (i & 1) {
|
||||
Type1* t1 = NewType1();
|
||||
t1->atwo = NewType2();
|
||||
t1->next = NewType1();
|
||||
t1->atwo->buf = NewBuffer(100);
|
||||
p = t1;
|
||||
} else {
|
||||
Type2* t2 = NewType2();
|
||||
t2->buf = NewBuffer(i & 16383);
|
||||
p = t2;
|
||||
}
|
||||
if ((i % 10) == 0) {
|
||||
memmove(&danglingRefs[0], &danglingRefs[1], 49*sizeof(void*));
|
||||
danglingRefs[49] = p;
|
||||
}
|
||||
}
|
||||
end = PR_IntervalNow();
|
||||
if (debug_mode) PR_snprintf(msg, sizeof(msg), "Thread %p: %ld allocations took %ld ms",
|
||||
PR_GetCurrentThread(), loops,
|
||||
PR_IntervalToMilliseconds((PRIntervalTime) (end - start)));
|
||||
PR_Lock(stderrLock);
|
||||
#ifndef XP_MAC
|
||||
fprintf(stderr, "%s\n", msg);
|
||||
#else
|
||||
if (debug_mode) printf("%s\n", msg);
|
||||
#endif
|
||||
PR_Unlock(stderrLock);
|
||||
}
|
||||
|
||||
static void usage(char *progname) {
|
||||
#ifndef XP_MAC
|
||||
fprintf(stderr, "Usage: %s [-t threads] [-l loops]\n", progname);
|
||||
#else
|
||||
printf("Usage: %s [-t threads] [-l loops]\n", progname);
|
||||
#endif
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
static int realMain(int argc, char **argv, char *notused) {
|
||||
int i;
|
||||
int threads = 0;
|
||||
|
||||
#ifndef XP_MAC
|
||||
progname = strrchr(argv[0], '/');
|
||||
if (progname == 0) progname = argv[0];
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-t") == 0) {
|
||||
if (i == argc - 1) {
|
||||
usage(progname);
|
||||
}
|
||||
threads = atoi(argv[++i]);
|
||||
if (threads < 0) threads = 0;
|
||||
if (threads > 10000) threads = 10000;
|
||||
continue;
|
||||
}
|
||||
if (strcmp(argv[i], "-l") == 0) {
|
||||
if (i == argc - 1) {
|
||||
usage(progname);
|
||||
}
|
||||
loops = atoi(argv[++i]);
|
||||
continue;
|
||||
}
|
||||
usage(progname);
|
||||
}
|
||||
#else
|
||||
threads = 50;
|
||||
#endif
|
||||
|
||||
for (i = 0; i < threads; i++) {
|
||||
PRThread* thread;
|
||||
|
||||
/* XXXXX */
|
||||
thread = PR_CreateThreadGCAble(PR_USER_THREAD, /* thread type */
|
||||
AllocStuff, /* start function */
|
||||
NULL, /* arg */
|
||||
PR_PRIORITY_NORMAL, /* priority */
|
||||
PR_LOCAL_THREAD, /* thread scope */
|
||||
PR_UNJOINABLE_THREAD, /* thread state */
|
||||
0); /* stack size */
|
||||
if (thread == 0) {
|
||||
#ifndef XP_MAC
|
||||
fprintf(stderr, "%s: no more threads (only %d were created)\n",
|
||||
progname, i);
|
||||
#else
|
||||
printf("%s: no more threads (only %d were created)\n",
|
||||
progname, i);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
AllocStuff(NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int padMain(int argc, char **argv) {
|
||||
char pad[512];
|
||||
return realMain(argc, argv, pad);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
int rv;
|
||||
|
||||
debug_mode = 1;
|
||||
|
||||
PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
|
||||
PR_SetThreadGCAble();
|
||||
|
||||
#ifdef XP_MAC
|
||||
SetupMacPrintfLog("thrashgc.log");
|
||||
debug_mode = 1;
|
||||
#endif
|
||||
|
||||
PR_InitGC(0, 0, 0, PR_GLOBAL_THREAD);
|
||||
PR_STDIO_INIT();
|
||||
stderrLock = PR_NewLock();
|
||||
tix1 = PR_RegisterType(&type1);
|
||||
tix2 = PR_RegisterType(&type2);
|
||||
tix3 = PR_RegisterType(&type3);
|
||||
gcInfo = PR_GetGCInfo();
|
||||
rv = padMain(argc, argv);
|
||||
printf("PASS\n");
|
||||
PR_Cleanup();
|
||||
return rv;
|
||||
}
|
||||
109
mozilla/nsprpub/lib/prstreams/Makefile
Normal file
109
mozilla/nsprpub/lib/prstreams/Makefile
Normal file
@@ -0,0 +1,109 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
# Disable optimization of the nspr on SunOS4.1.3
|
||||
ifeq ($(OS_ARCH),SunOS)
|
||||
ifeq ($(OS_RELEASE),4.1.3_U1)
|
||||
OPTIMIZER =
|
||||
endif
|
||||
endif
|
||||
ifeq ($(OS_ARCH), IRIX)
|
||||
CFLAGS += -KPIC
|
||||
ifneq ($(OS_RELEASE),5.3)
|
||||
CFLAGS += -exceptions
|
||||
endif
|
||||
endif
|
||||
|
||||
INCLUDES = -I$(DIST)/include -I../../../include
|
||||
|
||||
HEADERS = *.h
|
||||
|
||||
CXXSRCS = \
|
||||
prstrms.cpp \
|
||||
$(NULL)
|
||||
|
||||
OBJS = $(addprefix $(OBJDIR)/,$(CXXSRCS:.cpp=.$(OBJ_SUFFIX)))
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq (,$(filter-out WIN16 OS2,$(OS_TARGET)))
|
||||
EXTRA_LIBS = $(DIST)/lib/nspr$(MOD_VERSION).lib
|
||||
else
|
||||
DLLBASE=/BASE:0x30000000
|
||||
RES=$(OBJDIR)/prstrms.res
|
||||
RESNAME=$(MOD_DEPTH)/pr/src/nspr.rc
|
||||
OS_LIBS = user32.lib
|
||||
EXTRA_LIBS = $(DIST)/lib/libnspr$(MOD_VERSION).lib
|
||||
endif
|
||||
else
|
||||
ifeq ($(OS_ARCH), AIX)
|
||||
ifeq ($(OS_RELEASE), 4.1)
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
OS_LIBS += -lC -lc
|
||||
else
|
||||
OS_LIBS += -lC_r -lc_r
|
||||
endif
|
||||
else
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
MKSHLIB = /usr/lpp/xlC/bin/makeC++SharedLib -p 0
|
||||
else
|
||||
MKSHLIB = /usr/lpp/xlC/bin/makeC++SharedLib_r -p 0
|
||||
endif
|
||||
OS_LIBS += -ldl
|
||||
endif
|
||||
endif
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
|
||||
EXTRA_LIBS = -L$(DIST)/lib -lnspr$(MOD_VERSION)_shr
|
||||
else
|
||||
EXTRA_LIBS = -L$(DIST)/lib -lnspr$(MOD_VERSION)
|
||||
endif
|
||||
endif
|
||||
|
||||
# On NCR and SCO_SV, we can't link with extra libraries when
|
||||
# we build a shared library. If we do so, the linker doesn't
|
||||
# complain, but we would run into weird problems at run-time.
|
||||
# Therefore on these platforms, we link just the object files.
|
||||
ifeq ($(OS_ARCH),NCR)
|
||||
EXTRA_LIBS =
|
||||
endif
|
||||
ifeq ($(OS_ARCH),SCO_SV)
|
||||
EXTRA_LIBS =
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), UNIXWARE)
|
||||
OS_LIBS += -lC
|
||||
endif
|
||||
|
||||
LIBRARY_NAME = prstrms
|
||||
LIBRARY_VERSION = $(MOD_VERSION)
|
||||
|
||||
RELEASE_HEADERS = $(HEADERS)
|
||||
RELEASE_HEADERS_DEST = $(RELEASE_INCLUDE_DIR)
|
||||
RELEASE_LIBS = $(TARGETS)
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
export:: $(TARGETS) $(HEADERS)
|
||||
$(INSTALL) -m 444 $(HEADERS) $(DIST)/include
|
||||
$(INSTALL) -m 444 $(TARGETS) $(DIST)/lib
|
||||
|
||||
install:: export
|
||||
527
mozilla/nsprpub/lib/prstreams/prstrms.cpp
Normal file
527
mozilla/nsprpub/lib/prstreams/prstrms.cpp
Normal file
@@ -0,0 +1,527 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Robin J. Maxwell 11-22-96
|
||||
*/
|
||||
|
||||
#include "prstrms.h"
|
||||
#ifdef SVR4
|
||||
#include <string.h> // memmove
|
||||
#endif
|
||||
|
||||
//
|
||||
// Definition of macros _PRSTR_BP, _PRSTR_DELBUF, and _PRSTR_DELBUF_C.
|
||||
//
|
||||
// _PRSTR_BP is the protected member of class ios that is returned
|
||||
// by the public method rdbuf().
|
||||
//
|
||||
// _PRSTR_DELBUF is the method or data member of class ios, if available,
|
||||
// with which we can ensure that the ios destructor does not delete
|
||||
// the associated streambuf. If such a method or data member does not
|
||||
// exist, define _PRSTR_DELBUF to be empty.
|
||||
//
|
||||
// _PRSTR_DELBUF_C is just _PRSTR_DELBUF qualified by a base class.
|
||||
//
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#define _PRSTR_BP _strbuf
|
||||
#define _PRSTR_DELBUF(x) /* as nothing */
|
||||
#define _PRSTR_DELBUF_C(c, x) /* as nothing */
|
||||
#elif defined(WIN32)
|
||||
#define _PRSTR_BP bp
|
||||
#define _PRSTR_DELBUF(x) delbuf(x)
|
||||
#define _PRSTR_DELBUF_C(c, x) c::_PRSTR_DELBUF(x)
|
||||
#elif defined(OSF1)
|
||||
#define _PRSTR_BP m_psb
|
||||
#define _PRSTR_DELBUF(x) /* as nothing */
|
||||
#define _PRSTR_DELBUF_C(c, x) /* as nothing */
|
||||
#else
|
||||
#define _PRSTR_BP bp
|
||||
// Unix compilers don't believe in encapsulation
|
||||
// At least on Solaris this is also ignored
|
||||
#define _PRSTR_DELBUF(x) delbuf = x
|
||||
#define _PRSTR_DELBUF_C(c, x) c::_PRSTR_DELBUF(x)
|
||||
#endif
|
||||
|
||||
const PRIntn STRM_BUFSIZ = 8192;
|
||||
|
||||
#if !defined (PRFSTREAMS_BROKEN)
|
||||
|
||||
PRfilebuf::PRfilebuf():
|
||||
_fd(0),
|
||||
_opened(PR_FALSE),
|
||||
_allocated(PR_FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
PRfilebuf::PRfilebuf(PRFileDesc *fd):
|
||||
streambuf(),
|
||||
_fd(fd),
|
||||
_opened(PR_FALSE),
|
||||
_allocated(PR_FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
PRfilebuf::PRfilebuf(PRFileDesc *fd, char * buffptr, int bufflen):
|
||||
_fd(fd),
|
||||
_opened(PR_FALSE),
|
||||
_allocated(PR_FALSE)
|
||||
{
|
||||
PRfilebuf::setbuf(buffptr, bufflen);
|
||||
}
|
||||
|
||||
PRfilebuf::~PRfilebuf()
|
||||
{
|
||||
if (_opened){
|
||||
close();
|
||||
}else
|
||||
sync();
|
||||
if (_allocated)
|
||||
delete base();
|
||||
}
|
||||
|
||||
PRfilebuf*
|
||||
PRfilebuf::open(const char *name, int mode, int flags)
|
||||
{
|
||||
if (_fd != 0)
|
||||
return 0; // error if already open
|
||||
PRIntn PRmode = 0;
|
||||
// translate mode argument
|
||||
if (!(mode & ios::nocreate))
|
||||
PRmode |= PR_CREATE_FILE;
|
||||
//if (mode & ios::noreplace)
|
||||
// PRmode |= O_EXCL;
|
||||
if (mode & ios::app){
|
||||
mode |= ios::out;
|
||||
PRmode |= PR_APPEND;
|
||||
}
|
||||
if (mode & ios::trunc){
|
||||
mode |= ios::out; // IMPLIED
|
||||
PRmode |= PR_TRUNCATE;
|
||||
}
|
||||
if (mode & ios::out){
|
||||
if (mode & ios::in)
|
||||
PRmode |= PR_RDWR;
|
||||
else
|
||||
PRmode |= PR_WRONLY;
|
||||
if (!(mode & (ios::in|ios::app|ios::ate|ios::noreplace))){
|
||||
mode |= ios::trunc; // IMPLIED
|
||||
PRmode |= PR_TRUNCATE;
|
||||
}
|
||||
}else if (mode & ios::in)
|
||||
PRmode |= PR_RDONLY;
|
||||
else
|
||||
return 0; // error if not ios:in or ios::out
|
||||
|
||||
|
||||
//
|
||||
// The usual portable across unix crap...
|
||||
// NT gets a hokey piece of junk layer that prevents
|
||||
// access to the API.
|
||||
#ifdef WIN32
|
||||
_fd = PR_Open(name, PRmode, PRmode);
|
||||
#else
|
||||
_fd = PR_Open(name, PRmode, flags);
|
||||
#endif
|
||||
if (_fd == 0)
|
||||
return 0;
|
||||
_opened = PR_TRUE;
|
||||
if ((!unbuffered()) && (!ebuf())){
|
||||
char * sbuf = new char[STRM_BUFSIZ];
|
||||
if (!sbuf)
|
||||
unbuffered(1);
|
||||
else{
|
||||
_allocated = PR_TRUE;
|
||||
streambuf::setb(sbuf,sbuf+STRM_BUFSIZ,0);
|
||||
}
|
||||
}
|
||||
if (mode & ios::ate){
|
||||
if (seekoff(0,ios::end,mode)==EOF){
|
||||
close();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
PRfilebuf*
|
||||
PRfilebuf::attach(PRFileDesc *fd)
|
||||
{
|
||||
_opened = PR_FALSE;
|
||||
_fd = fd;
|
||||
return this;
|
||||
}
|
||||
|
||||
int
|
||||
PRfilebuf::overflow(int c)
|
||||
{
|
||||
if (allocate()==EOF) // make sure there is a reserve area
|
||||
return EOF;
|
||||
if (PRfilebuf::sync()==EOF) // sync before new buffer created below
|
||||
return EOF;
|
||||
|
||||
if (!unbuffered())
|
||||
setp(base(),ebuf());
|
||||
|
||||
if (c!=EOF){
|
||||
if ((!unbuffered()) && (pptr() < epptr())) // guard against recursion
|
||||
sputc(c);
|
||||
else{
|
||||
if (PR_Write(_fd, &c, 1)!=1)
|
||||
return(EOF);
|
||||
}
|
||||
}
|
||||
return(1); // return something other than EOF if successful
|
||||
}
|
||||
|
||||
int
|
||||
PRfilebuf::underflow()
|
||||
{
|
||||
int count;
|
||||
unsigned char tbuf;
|
||||
|
||||
if (in_avail())
|
||||
return (int)(unsigned char) *gptr();
|
||||
|
||||
if (allocate()==EOF) // make sure there is a reserve area
|
||||
return EOF;
|
||||
if (PRfilebuf::sync()==EOF)
|
||||
return EOF;
|
||||
|
||||
if (unbuffered())
|
||||
{
|
||||
if (PR_Read(_fd,(void *)&tbuf,1)<=0)
|
||||
return EOF;
|
||||
return (int)tbuf;
|
||||
}
|
||||
|
||||
if ((count=PR_Read(_fd,(void *)base(),blen())) <= 0)
|
||||
return EOF; // reached EOF
|
||||
setg(base(),base(),base()+count);
|
||||
return (int)(unsigned char) *gptr();
|
||||
}
|
||||
|
||||
streambuf*
|
||||
PRfilebuf::setbuf(char *buffptr, int bufflen)
|
||||
{
|
||||
if (is_open() && (ebuf()))
|
||||
return 0;
|
||||
if ((!buffptr) || (bufflen <= 0))
|
||||
unbuffered(1);
|
||||
else
|
||||
setb(buffptr, buffptr+bufflen, 0);
|
||||
return this;
|
||||
}
|
||||
|
||||
streampos
|
||||
PRfilebuf::seekoff(streamoff offset, ios::seek_dir dir, int /* mode */)
|
||||
{
|
||||
if (PR_GetDescType(_fd) == PR_DESC_FILE){
|
||||
PRSeekWhence fdir;
|
||||
PRInt32 retpos;
|
||||
switch (dir) {
|
||||
case ios::beg :
|
||||
fdir = PR_SEEK_SET;
|
||||
break;
|
||||
case ios::cur :
|
||||
fdir = PR_SEEK_CUR;
|
||||
break;
|
||||
case ios::end :
|
||||
fdir = PR_SEEK_END;
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
return(EOF);
|
||||
}
|
||||
|
||||
if (PRfilebuf::sync()==EOF)
|
||||
return EOF;
|
||||
if ((retpos=PR_Seek(_fd, offset, fdir))==-1L)
|
||||
return (EOF);
|
||||
return((streampos)retpos);
|
||||
}else
|
||||
return (EOF);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
PRfilebuf::sync()
|
||||
{
|
||||
PRInt32 count;
|
||||
|
||||
if (_fd==0)
|
||||
return(EOF);
|
||||
|
||||
if (!unbuffered()){
|
||||
// Sync write area
|
||||
if ((count=out_waiting())!=0){
|
||||
PRInt32 nout;
|
||||
if ((nout =PR_Write(_fd,
|
||||
(void *) pbase(),
|
||||
(unsigned int)count)) != count){
|
||||
if (nout > 0) {
|
||||
// should set _pptr -= nout
|
||||
pbump(-(int)nout);
|
||||
memmove(pbase(), pbase()+nout, (int)(count-nout));
|
||||
}
|
||||
return(EOF);
|
||||
}
|
||||
}
|
||||
setp(0,0); // empty put area
|
||||
|
||||
if (PR_GetDescType(_fd) == PR_DESC_FILE){
|
||||
// Sockets can't seek; don't need this
|
||||
if ((count=in_avail()) > 0){
|
||||
if (PR_Seek(_fd, -count, PR_SEEK_CUR)!=-1L)
|
||||
{
|
||||
return (EOF);
|
||||
}
|
||||
}
|
||||
}
|
||||
setg(0,0,0); // empty get area
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
PRfilebuf *
|
||||
PRfilebuf::close()
|
||||
{
|
||||
int retval;
|
||||
if (_fd==0)
|
||||
return 0;
|
||||
|
||||
retval = sync();
|
||||
|
||||
if ((PR_Close(_fd)==0) || (retval==EOF))
|
||||
return 0;
|
||||
_fd = 0;
|
||||
return this;
|
||||
}
|
||||
|
||||
PRifstream::PRifstream():
|
||||
istream(new PRfilebuf)
|
||||
{
|
||||
_PRSTR_DELBUF(0);
|
||||
}
|
||||
|
||||
PRifstream::PRifstream(PRFileDesc *fd):
|
||||
istream(new PRfilebuf(fd))
|
||||
{
|
||||
_PRSTR_DELBUF(0);
|
||||
}
|
||||
|
||||
PRifstream::PRifstream(PRFileDesc *fd, char *buff, int bufflen):
|
||||
istream(new PRfilebuf(fd, buff, bufflen))
|
||||
{
|
||||
_PRSTR_DELBUF(0);
|
||||
}
|
||||
|
||||
PRifstream::PRifstream(const char * name, int mode, int flags):
|
||||
istream(new PRfilebuf)
|
||||
{
|
||||
_PRSTR_DELBUF(0);
|
||||
if (!rdbuf()->open(name, (mode|ios::in), flags))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
PRifstream::~PRifstream()
|
||||
{
|
||||
sync();
|
||||
|
||||
delete rdbuf();
|
||||
#ifdef _PRSTR_BP
|
||||
_PRSTR_BP = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
streambuf *
|
||||
PRifstream::setbuf(char * ptr, int len)
|
||||
{
|
||||
if ((is_open()) || (!(rdbuf()->setbuf(ptr, len)))){
|
||||
clear(rdstate() | ios::failbit);
|
||||
return 0;
|
||||
}
|
||||
return rdbuf();
|
||||
}
|
||||
|
||||
void
|
||||
PRifstream::attach(PRFileDesc *fd)
|
||||
{
|
||||
if (!(rdbuf()->attach(fd)))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
void
|
||||
PRifstream::open(const char * name, int mode, int flags)
|
||||
{
|
||||
if (is_open() || !(rdbuf()->open(name, (mode|ios::in), flags)))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
void
|
||||
PRifstream::close()
|
||||
{
|
||||
clear((rdbuf()->close()) ? 0 : (rdstate() | ios::failbit));
|
||||
}
|
||||
|
||||
PRofstream::PRofstream():
|
||||
ostream(new PRfilebuf)
|
||||
{
|
||||
_PRSTR_DELBUF(0);
|
||||
}
|
||||
|
||||
PRofstream::PRofstream(PRFileDesc *fd):
|
||||
ostream(new PRfilebuf(fd))
|
||||
{
|
||||
_PRSTR_DELBUF(0);
|
||||
}
|
||||
|
||||
PRofstream::PRofstream(PRFileDesc *fd, char *buff, int bufflen):
|
||||
ostream(new PRfilebuf(fd, buff, bufflen))
|
||||
{
|
||||
_PRSTR_DELBUF(0);
|
||||
}
|
||||
|
||||
PRofstream::PRofstream(const char *name, int mode, int flags):
|
||||
ostream(new PRfilebuf)
|
||||
{
|
||||
_PRSTR_DELBUF(0);
|
||||
if (!rdbuf()->open(name, (mode|ios::out), flags))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
PRofstream::~PRofstream()
|
||||
{
|
||||
flush();
|
||||
|
||||
delete rdbuf();
|
||||
#ifdef _PRSTR_BP
|
||||
_PRSTR_BP = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
streambuf *
|
||||
PRofstream::setbuf(char * ptr, int len)
|
||||
{
|
||||
if ((is_open()) || (!(rdbuf()->setbuf(ptr, len)))){
|
||||
clear(rdstate() | ios::failbit);
|
||||
return 0;
|
||||
}
|
||||
return rdbuf();
|
||||
}
|
||||
|
||||
void
|
||||
PRofstream::attach(PRFileDesc *fd)
|
||||
{
|
||||
if (!(rdbuf()->attach(fd)))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
void
|
||||
PRofstream::open(const char * name, int mode, int flags)
|
||||
{
|
||||
if (is_open() || !(rdbuf()->open(name, (mode|ios::out), flags)))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
void
|
||||
PRofstream::close()
|
||||
{
|
||||
clear((rdbuf()->close()) ? 0 : (rdstate() | ios::failbit));
|
||||
}
|
||||
|
||||
PRfstream::PRfstream():
|
||||
iostream(new PRfilebuf)
|
||||
{
|
||||
_PRSTR_DELBUF_C(istream, 0);
|
||||
_PRSTR_DELBUF_C(ostream, 0);
|
||||
}
|
||||
|
||||
PRfstream::PRfstream(PRFileDesc *fd):
|
||||
iostream(new PRfilebuf(fd))
|
||||
{
|
||||
_PRSTR_DELBUF_C(istream, 0);
|
||||
_PRSTR_DELBUF_C(ostream, 0);
|
||||
}
|
||||
|
||||
PRfstream::PRfstream(PRFileDesc *fd, char *buff, int bufflen):
|
||||
iostream(new PRfilebuf(fd, buff, bufflen))
|
||||
{
|
||||
_PRSTR_DELBUF_C(istream, 0);
|
||||
_PRSTR_DELBUF_C(ostream, 0);
|
||||
}
|
||||
|
||||
PRfstream::PRfstream(const char *name, int mode, int flags):
|
||||
iostream(new PRfilebuf)
|
||||
{
|
||||
_PRSTR_DELBUF_C(istream, 0);
|
||||
_PRSTR_DELBUF_C(ostream, 0);
|
||||
if (!rdbuf()->open(name, (mode|(ios::in|ios::out)), flags))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
PRfstream::~PRfstream()
|
||||
{
|
||||
sync();
|
||||
flush();
|
||||
|
||||
delete rdbuf();
|
||||
#ifdef _PRSTR_BP
|
||||
istream::_PRSTR_BP = 0;
|
||||
ostream::_PRSTR_BP = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
streambuf *
|
||||
PRfstream::setbuf(char * ptr, int len)
|
||||
{
|
||||
if ((is_open()) || (!(rdbuf()->setbuf(ptr, len)))){
|
||||
clear(rdstate() | ios::failbit);
|
||||
return 0;
|
||||
}
|
||||
return rdbuf();
|
||||
}
|
||||
|
||||
void
|
||||
PRfstream::attach(PRFileDesc *fd)
|
||||
{
|
||||
if (!(rdbuf()->attach(fd)))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
void
|
||||
PRfstream::open(const char * name, int mode, int flags)
|
||||
{
|
||||
if (is_open() || !(rdbuf()->open(name, (mode|(ios::in|ios::out)), flags)))
|
||||
clear(rdstate() | ios::failbit);
|
||||
}
|
||||
|
||||
void
|
||||
PRfstream::close()
|
||||
{
|
||||
clear((rdbuf()->close()) ? 0 : (rdstate() | ios::failbit));
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
// fix it sometime
|
||||
|
||||
int fix_prfstreams () { return 0; }
|
||||
|
||||
#endif
|
||||
128
mozilla/nsprpub/lib/prstreams/prstrms.h
Normal file
128
mozilla/nsprpub/lib/prstreams/prstrms.h
Normal file
@@ -0,0 +1,128 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Robin J. Maxwell 11-22-96
|
||||
*/
|
||||
|
||||
#ifndef _PRSTRMS_H
|
||||
#define _PRSTRMS_H
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "prio.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning( disable : 4275)
|
||||
#endif
|
||||
#include <iostream.h>
|
||||
|
||||
#if defined (PRFSTREAMS_BROKEN)
|
||||
|
||||
// fix it sometime
|
||||
|
||||
#define PRfilebuf streambuf
|
||||
#define PRifstream ifstream
|
||||
#define PRofstream ofstream
|
||||
#define PRfstream fstream
|
||||
|
||||
#else
|
||||
|
||||
class PR_IMPLEMENT(PRfilebuf): public streambuf
|
||||
{
|
||||
public:
|
||||
PRfilebuf();
|
||||
PRfilebuf(PRFileDesc *fd);
|
||||
PRfilebuf(PRFileDesc *fd, char * buffptr, int bufflen);
|
||||
~PRfilebuf();
|
||||
virtual int overflow(int=EOF);
|
||||
virtual int underflow();
|
||||
virtual streambuf *setbuf(char *buff, int bufflen);
|
||||
virtual streampos seekoff(streamoff, ios::seek_dir, int);
|
||||
virtual int sync();
|
||||
PRfilebuf *open(const char *name, int mode, int flags);
|
||||
PRfilebuf *attach(PRFileDesc *fd);
|
||||
PRfilebuf *close();
|
||||
int is_open() const {return (_fd != 0);}
|
||||
PRFileDesc *fd(){return _fd;}
|
||||
|
||||
private:
|
||||
PRFileDesc * _fd;
|
||||
PRBool _opened;
|
||||
PRBool _allocated;
|
||||
};
|
||||
|
||||
class PR_IMPLEMENT(PRifstream): public istream {
|
||||
public:
|
||||
PRifstream();
|
||||
PRifstream(const char *, int mode=ios::in, int flags = 0);
|
||||
PRifstream(PRFileDesc *);
|
||||
PRifstream(PRFileDesc *, char *, int);
|
||||
~PRifstream();
|
||||
|
||||
streambuf * setbuf(char *, int);
|
||||
PRfilebuf* rdbuf(){return (PRfilebuf*) ios::rdbuf(); }
|
||||
|
||||
void attach(PRFileDesc *fd);
|
||||
PRFileDesc *fd() {return rdbuf()->fd();}
|
||||
|
||||
int is_open(){return rdbuf()->is_open();}
|
||||
void open(const char *, int mode=ios::in, int flags= 0);
|
||||
void close();
|
||||
};
|
||||
|
||||
class PR_IMPLEMENT(PRofstream) : public ostream {
|
||||
public:
|
||||
PRofstream();
|
||||
PRofstream(const char *, int mode=ios::out, int flags = 0);
|
||||
PRofstream(PRFileDesc *);
|
||||
PRofstream(PRFileDesc *, char *, int);
|
||||
~PRofstream();
|
||||
|
||||
streambuf * setbuf(char *, int);
|
||||
PRfilebuf* rdbuf() { return (PRfilebuf*) ios::rdbuf(); }
|
||||
|
||||
void attach(PRFileDesc *);
|
||||
PRFileDesc *fd() {return rdbuf()->fd();}
|
||||
|
||||
int is_open(){return rdbuf()->is_open();}
|
||||
void open(const char *, int =ios::out, int = 0);
|
||||
void close();
|
||||
};
|
||||
|
||||
class PR_IMPLEMENT(PRfstream) : public iostream {
|
||||
public:
|
||||
PRfstream();
|
||||
PRfstream(const char *name, int mode, int flags= 0);
|
||||
PRfstream(PRFileDesc *fd);
|
||||
PRfstream(PRFileDesc *fd, char *buff, int bufflen);
|
||||
~PRfstream();
|
||||
|
||||
streambuf * setbuf(char *, int);
|
||||
PRfilebuf* rdbuf(){ return (PRfilebuf*) ostream::rdbuf(); }
|
||||
|
||||
void attach(PRFileDesc *);
|
||||
PRFileDesc *fd() { return rdbuf()->fd(); }
|
||||
|
||||
int is_open() { return rdbuf()->is_open(); }
|
||||
void open(const char *, int, int = 0);
|
||||
void close();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _PRSTRMS_H */
|
||||
213
mozilla/nsprpub/lib/prstreams/tests/testprstrm/Makefile
Normal file
213
mozilla/nsprpub/lib/prstreams/tests/testprstrm/Makefile
Normal file
@@ -0,0 +1,213 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../../../..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
OS_CFLAGS = $(OS_EXE_CFLAGS)
|
||||
endif
|
||||
|
||||
CXXSRCS = \
|
||||
testprstrm.cpp \
|
||||
$(NULL)
|
||||
|
||||
OBJS = $(addprefix $(OBJDIR)/,$(CXXSRCS:.cpp=.$(OBJ_SUFFIX)))
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
PROG_SUFFIX = .exe
|
||||
else
|
||||
PROG_SUFFIX =
|
||||
endif
|
||||
|
||||
PROGS = $(addprefix $(OBJDIR)/, $(CXXSRCS:.cpp=$(PROG_SUFFIX)))
|
||||
|
||||
TARGETS = $(PROGS) $(OBJS)
|
||||
|
||||
INCLUDES = -I$(DIST)/include
|
||||
|
||||
# Setting the variables LDOPTS and LIBPR. We first initialize
|
||||
# them to the default values, then adjust them for some platforms.
|
||||
LDOPTS = -L$(DIST)/lib
|
||||
LIBPR = -lnspr$(MOD_VERSION)
|
||||
LIBPRSTRMS = -lprstrms$(MOD_VERSION)
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
LIBPR = $(DIST)/lib/nspr$(MOD_VERSION).lib
|
||||
LIBPRSTRMS = $(DIST)/lib/prstrms$(MOD_VERSION).lib
|
||||
else
|
||||
LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO
|
||||
LIBPR = $(DIST)/lib/libnspr$(MOD_VERSION).$(LIB_SUFFIX)
|
||||
LIBPRSTRMS = $(DIST)/lib/libprstrms$(MOD_VERSION).$(LIB_SUFFIX)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(OS_ARCH), WINNT)
|
||||
PWD = $(shell pwd)
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), IRIX)
|
||||
LDOPTS += -rpath $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), OSF1)
|
||||
LDOPTS += -rpath $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), HP-UX)
|
||||
LDOPTS += -Wl,+s,+b,$(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
# AIX
|
||||
ifeq ($(OS_ARCH),AIX)
|
||||
ifeq ($(CLASSIC_NSPR),1)
|
||||
LDOPTS += -blibpath:.:$(PWD)/$(DIST)/lib:/usr/lpp/xlC/lib:/usr/lib:/lib
|
||||
else
|
||||
LDOPTS += -blibpath:.:$(PWD)/$(DIST)/lib:/usr/lib/threads:/usr/lpp/xlC/lib:/usr/lib:/lib
|
||||
endif
|
||||
ifeq ($(OS_ARCH)$(OS_RELEASE),AIX4.1)
|
||||
LIBPR = -lnspr$(MOD_VERSION)_shr
|
||||
LIBPRSTRMS = -lprstrms$(MOD_VERSION)_shr
|
||||
else
|
||||
LDOPTS += -brtl
|
||||
EXTRA_LIBS = -ldl
|
||||
endif
|
||||
endif
|
||||
|
||||
# Solaris
|
||||
ifeq ($(OS_ARCH), SunOS)
|
||||
ifneq ($(OS_RELEASE), 4.1.3_U1)
|
||||
ifdef NS_USE_GCC
|
||||
LDOPTS += -Xlinker -R -Xlinker $(PWD)/$(DIST)/lib
|
||||
else
|
||||
LDOPTS += -R $(PWD)/$(DIST)/lib
|
||||
# CC on SunOS 5.4 and 5.5.x need to link with -lthread or -lpthread
|
||||
# (or use the -mt switch) even though we already linked with these
|
||||
# system libraries when we built libnspr.so.
|
||||
ifdef USE_PTHREADS
|
||||
EXTRA_LIBS = -lpthread
|
||||
else
|
||||
EXTRA_LIBS = -lthread
|
||||
endif # USE_PTHREADS
|
||||
endif # NS_USE_GCC
|
||||
endif # 4.1.3_U1
|
||||
endif # SunOS
|
||||
|
||||
ifeq ($(OS_ARCH), NCR)
|
||||
# XXX: We see some strange problems when we link with libnspr.so.
|
||||
# So for now we use static libraries on NCR. The shared library
|
||||
# stuff below is commented out.
|
||||
LIBPR = $(DIST)/lib/libnspr$(MOD_VERSION).a
|
||||
LIBPRSTRMS = $(DIST)/lib/libprstrms$(MOD_VERSION).a
|
||||
EXTRA_LIBS = -lsocket -lnsl -ldl
|
||||
|
||||
# NCR needs to link against -lsocket -lnsl (and -lc, which is linked
|
||||
# implicitly by $(CC)) again even though we already linked with these
|
||||
# system libraries when we built libnspr.so.
|
||||
#EXTRA_LIBS = -lsocket -lnsl
|
||||
# This hardcodes in the executable programs the directory to find
|
||||
# libnspr.so etc. at program startup. Equivalent to the -R or -rpath
|
||||
# option for ld on other platforms.
|
||||
#export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), SCO_SV)
|
||||
# SCO Unix needs to link against -lsocket again even though we
|
||||
# already linked with these system libraries when we built libnspr.so.
|
||||
EXTRA_LIBS = -lsocket
|
||||
# This hardcodes in the executable programs the directory to find
|
||||
# libnspr.so etc. at program startup. Equivalent to the -R or -rpath
|
||||
# option for ld on other platforms.
|
||||
export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), UNIXWARE)
|
||||
export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
#####################################################
|
||||
#
|
||||
# The rules
|
||||
#
|
||||
#####################################################
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
AIX_PRE_4_2 = 0
|
||||
ifeq ($(OS_ARCH),AIX)
|
||||
ifneq ($(OS_RELEASE),4.2)
|
||||
ifneq ($(USE_PTHREADS), 1)
|
||||
#AIX_PRE_4_2 = 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(AIX_PRE_4_2),1)
|
||||
|
||||
# AIX releases prior to 4.2 need a special two-step linking hack
|
||||
# in order to both override the system select() and be able to
|
||||
# get at the original system select().
|
||||
#
|
||||
# We use a pattern rule in ns/nspr20/config/rules.mk to generate
|
||||
# the .$(OBJ_SUFFIX) file from the .c source file, then do the
|
||||
# two-step linking hack below.
|
||||
|
||||
$(OBJDIR)/%: $(OBJDIR)/%.$(OBJ_SUFFIX)
|
||||
@$(MAKE_OBJDIR)
|
||||
rm -f $@ $(AIX_TMP)
|
||||
$(CC) $(AIX_LINK_OPTS) -o $(AIX_TMP) $< $(DIST)/lib/libnspr$(MOD_VERSION).a
|
||||
$(CC) -o $@ $(AIX_TMP) $(AIX_WRAP)
|
||||
rm -f $(AIX_TMP)
|
||||
|
||||
else
|
||||
|
||||
# All platforms that are not AIX pre-4.2.
|
||||
|
||||
$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
|
||||
@$(MAKE_OBJDIR)
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq ($(OS_TARGET),WIN16)
|
||||
echo system windows >w16link
|
||||
echo option map >>w16link
|
||||
echo option stack=10K >>w16link
|
||||
echo option heapsize=32K >>w16link
|
||||
echo debug $(DEBUGTYPE) all >>w16link
|
||||
echo name $@ >>w16link
|
||||
echo file >>w16link
|
||||
echo $< >>w16link
|
||||
echo library >>w16link
|
||||
echo $(LIBPR), >>w16link
|
||||
echo $(LIBPRSTRMS), >>w16link
|
||||
echo winsock.lib >>w16link
|
||||
wlink @w16link.
|
||||
else
|
||||
link $(LDOPTS) $< $(LIBPR) $(LIBPRSTRMS) wsock32.lib -out:$@
|
||||
endif
|
||||
else
|
||||
$(CCC) $(XCFLAGS) $< $(LDOPTS) $(LIBPR) $(LIBPRSTRMS) $(EXTRA_LIBS) -o $@
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
export:: $(TARGETS)
|
||||
install:: export
|
||||
clean::
|
||||
rm -f $(TARGETS)
|
||||
182
mozilla/nsprpub/lib/prstreams/tests/testprstrm/testprstrm.cpp
Normal file
182
mozilla/nsprpub/lib/prstreams/tests/testprstrm/testprstrm.cpp
Normal file
@@ -0,0 +1,182 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "prinit.h"
|
||||
#include "prstrms.h"
|
||||
#include "prio.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#ifdef XP_UNIX
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
const unsigned int MaxCnt = 1;
|
||||
|
||||
void threadwork(void *mytag);
|
||||
|
||||
|
||||
typedef struct threadarg {
|
||||
void *mytag;
|
||||
} threadarg;
|
||||
|
||||
void
|
||||
threadmain(void *mytag)
|
||||
{
|
||||
threadarg arg;
|
||||
|
||||
arg.mytag = mytag;
|
||||
|
||||
threadwork(&arg);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
threadwork(void *_arg)
|
||||
{
|
||||
threadarg *arg = (threadarg *)_arg;
|
||||
unsigned int i;
|
||||
|
||||
char fname1[256];
|
||||
char fname2[256];
|
||||
|
||||
strcpy(fname1, (char *)arg->mytag);
|
||||
strcpy(fname2, (char *)arg->mytag);
|
||||
strcat(fname2, "2");
|
||||
PR_Delete(fname1);
|
||||
PR_Delete(fname2);
|
||||
|
||||
PRfilebuf *fb[MaxCnt];
|
||||
PRifstream *ifs[MaxCnt];
|
||||
PRofstream *ofs[MaxCnt];
|
||||
int mode = 0;
|
||||
#ifdef XP_UNIX
|
||||
mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IRGRP|S_IWOTH|S_IROTH;
|
||||
#endif
|
||||
|
||||
//
|
||||
// Allocate a bunch
|
||||
cout << "Testing unused filebufs ----------------" << endl;
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
fb[i] = new PRfilebuf;
|
||||
}
|
||||
// Delete them
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
delete fb[i];
|
||||
}
|
||||
cout << "Unused filebufs complete ---------------" << endl;
|
||||
|
||||
//
|
||||
// Allocate a bunch
|
||||
cout << "Testing unused ifstream -----------------" << endl;
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
ifs[i] = new PRifstream;
|
||||
}
|
||||
//
|
||||
// Delete them
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
delete ifs[i];
|
||||
}
|
||||
cout << "Unused ifstream complete ----------------" << endl;
|
||||
//
|
||||
// Allocate a bunch
|
||||
cout << "Testing unused ofstream -----------------" << endl;
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
ofs[i] = new PRofstream;
|
||||
}
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
*(ofs[i]) << "A"; // Write a bit
|
||||
delete ofs[i]; // Delete it.
|
||||
}
|
||||
cout << "Unused ofstream complete ----------------" << endl;
|
||||
|
||||
cout << "Testing use of ofstream 1 (extra filebuf allocated) ---------" << endl;
|
||||
PRofstream *aos = new PRofstream(fname1, ios::out|ios::ate, mode);
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
for (int j=0; j < 8192; j++)
|
||||
*aos << "AaBbCcDdEeFfGg" << endl;
|
||||
fb[i] = new PRfilebuf; // Allocate as we go to hack at the heap
|
||||
}
|
||||
//
|
||||
// Delete the extra foo we allocated
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
delete fb[i];
|
||||
}
|
||||
aos->flush(); // Explicit flush
|
||||
delete aos;
|
||||
cout << "Testing use of ofstream 1 complete (extra filebuf deleted) --" << endl;
|
||||
cout << "Testing use of ofstream 2 (extra filebuf allocated) ---------" << endl;
|
||||
PRofstream *aos2 = new PRofstream(fname2, ios::out, mode);
|
||||
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
*aos2 << "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
|
||||
}
|
||||
// Force flushing in the dtor
|
||||
delete aos2;
|
||||
cout << "Testing use of ofstream 2 complete (extra filebuf deleted) --" << endl;
|
||||
char line[1024];
|
||||
cout << "Testing use of ifstream 1 (stack allocation) -------------" << endl;
|
||||
PRifstream ais(fname1);
|
||||
for (i=0; i < MaxCnt; i++){
|
||||
ais >> line;
|
||||
}
|
||||
cout << "Testing use of ifstream 1 complete -----------------------" << endl;
|
||||
cout << "Testing use of ifstream 2 ----------------------" << endl;
|
||||
PRifstream *ais2 = new PRifstream(fname2);
|
||||
char achar;
|
||||
for (i=0; i < MaxCnt*10; i++){
|
||||
*ais2 >> achar;
|
||||
}
|
||||
delete ais2;
|
||||
cout << "Testing use of ifstream 2 complete -------------" << endl;
|
||||
}
|
||||
|
||||
#define STACKSIZE 1024*1024
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
PR_Init(PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 256);
|
||||
threadmain("TestFile");
|
||||
PRThread *thr1 = PR_CreateThread(PR_SYSTEM_THREAD,
|
||||
threadmain,
|
||||
(void *)"TestFile1",
|
||||
PR_PRIORITY_NORMAL,
|
||||
PR_GLOBAL_THREAD,
|
||||
PR_JOINABLE_THREAD,
|
||||
STACKSIZE);
|
||||
PRThread *thr2 = PR_CreateThread(PR_SYSTEM_THREAD,
|
||||
threadmain,
|
||||
(void *)"TestFile2",
|
||||
PR_PRIORITY_NORMAL,
|
||||
PR_GLOBAL_THREAD,
|
||||
PR_JOINABLE_THREAD,
|
||||
STACKSIZE);
|
||||
|
||||
PRThread *thr3 = PR_CreateThread(PR_SYSTEM_THREAD,
|
||||
threadmain,
|
||||
(void *)"TestFile3",
|
||||
PR_PRIORITY_NORMAL,
|
||||
PR_GLOBAL_THREAD,
|
||||
PR_JOINABLE_THREAD,
|
||||
STACKSIZE);
|
||||
PR_JoinThread(thr1);
|
||||
PR_JoinThread(thr2);
|
||||
PR_JoinThread(thr3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
192
mozilla/nsprpub/lib/tests/Makefile
Normal file
192
mozilla/nsprpub/lib/tests/Makefile
Normal file
@@ -0,0 +1,192 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ../..
|
||||
|
||||
include $(MOD_DEPTH)/config/config.mk
|
||||
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
OS_CFLAGS = $(OS_EXE_CFLAGS)
|
||||
endif
|
||||
|
||||
CSRCS = \
|
||||
string.c \
|
||||
base64t.c
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
PROG_SUFFIX = .exe
|
||||
else
|
||||
PROG_SUFFIX =
|
||||
endif
|
||||
|
||||
PROGS = $(addprefix $(OBJDIR)/, $(CSRCS:.c=$(PROG_SUFFIX)))
|
||||
|
||||
TARGETS = $(PROGS) $(OBJS)
|
||||
|
||||
INCLUDES = -I$(DIST)/include
|
||||
|
||||
# Setting the variables LDOPTS and LIBPR. We first initialize
|
||||
# them to the default values, then adjust them for some platforms.
|
||||
LDOPTS = -L$(DIST)/lib
|
||||
LIBPR = -lnspr$(MOD_VERSION)
|
||||
LIBPLC = -lplc$(MOD_VERSION)
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq ($(OS_TARGET), WIN16)
|
||||
LIBPR = $(DIST)/lib/nspr$(MOD_VERSION).lib
|
||||
LIBPLC= $(DIST)/lib/plc$(MOD_VERSION).lib
|
||||
else
|
||||
LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO
|
||||
LIBPR = $(DIST)/lib/libnspr$(MOD_VERSION).$(LIB_SUFFIX)
|
||||
LIBPLC= $(DIST)/lib/libplc$(MOD_VERSION).$(LIB_SUFFIX)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(OS_ARCH), WINNT)
|
||||
PWD = $(shell pwd)
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), IRIX)
|
||||
LDOPTS += -rpath $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), OSF1)
|
||||
LDOPTS += -rpath $(PWD)/$(DIST)/lib -lpthread
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), HP-UX)
|
||||
LDOPTS += -Wl,+s,+b,$(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
# AIX
|
||||
ifeq ($(OS_ARCH),AIX)
|
||||
LDOPTS += -blibpath:.:$(PWD)/$(DIST)/lib:/usr/lib/threads:/usr/lpp/xlC/lib:/usr/lib:/lib
|
||||
LIBPR = -lnspr$(MOD_VERSION)_shr
|
||||
LIBPLC = -lplc$(MOD_VERSION)_shr
|
||||
endif
|
||||
|
||||
# Solaris
|
||||
ifeq ($(OS_ARCH), SunOS)
|
||||
ifneq ($(OS_RELEASE), 4.1.3_U1)
|
||||
ifdef NS_USE_GCC
|
||||
LDOPTS += -Xlinker -R -Xlinker $(PWD)/$(DIST)/lib
|
||||
else
|
||||
LDOPTS += -R $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
endif
|
||||
|
||||
# SunOS 5.4 and 5.5 need to link with -lthread or -lpthread,
|
||||
# even though we already linked with these system libraries
|
||||
# when we built libnspr.so.
|
||||
ifeq ($(OS_RELEASE), 5.4)
|
||||
EXTRA_LIBS = -lthread
|
||||
endif
|
||||
|
||||
ifeq ($(OS_RELEASE), 5.5)
|
||||
ifdef USE_PTHREADS
|
||||
EXTRA_LIBS = -lpthread
|
||||
else
|
||||
EXTRA_LIBS = -lthread
|
||||
endif
|
||||
endif
|
||||
endif # SunOS
|
||||
|
||||
ifeq ($(OS_ARCH), NCR)
|
||||
# NCR needs to link against -lsocket -lnsl (and -lc, which is linked
|
||||
# implicitly by $(CC)) again even though we already linked with these
|
||||
# system libraries when we built libnspr.so.
|
||||
EXTRA_LIBS = -lsocket -lnsl
|
||||
# This hardcodes in the executable programs the directory to find
|
||||
# libnspr.so etc. at program startup. Equivalent to the -R or -rpath
|
||||
# option for ld on other platforms.
|
||||
export LD_RUN_PATH = $(PWD)/$(DIST)/lib
|
||||
endif
|
||||
|
||||
#####################################################
|
||||
#
|
||||
# The rules
|
||||
#
|
||||
#####################################################
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
|
||||
AIX_PRE_4_2 = 0
|
||||
ifeq ($(OS_ARCH),AIX)
|
||||
ifneq ($(OS_RELEASE),4.2)
|
||||
ifneq ($(USE_PTHREADS), 1)
|
||||
#AIX_PRE_4_2 = 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(AIX_PRE_4_2),1)
|
||||
|
||||
# AIX releases prior to 4.2 need a special two-step linking hack
|
||||
# in order to both override the system select() and be able to
|
||||
# get at the original system select().
|
||||
#
|
||||
# We use a pattern rule in ns/nspr20/config/rules.mk to generate
|
||||
# the .$(OBJ_SUFFIX) file from the .c source file, then do the
|
||||
# two-step linking hack below.
|
||||
|
||||
$(OBJDIR)/%: $(OBJDIR)/%.$(OBJ_SUFFIX)
|
||||
@$(MAKE_OBJDIR)
|
||||
rm -f $@ $(AIX_TMP)
|
||||
$(CC) $(AIX_LINK_OPTS) -o $(AIX_TMP) $< $(DIST)/lib/libnspr$(MOD_VERSION).a
|
||||
$(CC) -o $@ $(AIX_TMP) $(AIX_WRAP)
|
||||
rm -f $(AIX_TMP)
|
||||
|
||||
else
|
||||
|
||||
# All platforms that are not AIX pre-4.2.
|
||||
|
||||
$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX)
|
||||
@$(MAKE_OBJDIR)
|
||||
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
ifeq ($(OS_TARGET),WIN16)
|
||||
echo system windows >w16link
|
||||
echo option map >>w16link
|
||||
echo option stack=10K >>w16link
|
||||
echo option heapsize=32K >>w16link
|
||||
echo debug $(DEBUGTYPE) all >>w16link
|
||||
echo name $@ >>w16link
|
||||
echo file >>w16link
|
||||
echo $< >>w16link
|
||||
echo library >>w16link
|
||||
echo $(LIBPR), >>w16link
|
||||
echo $(LIBPLC), >>w16link
|
||||
echo winsock.lib >>w16link
|
||||
wlink @w16link.
|
||||
else
|
||||
link $(LDOPTS) $< $(LIBPR) $(LIBPLC) wsock32.lib -out:$@
|
||||
endif
|
||||
else
|
||||
$(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPR) $(LIBPLC) $(EXTRA_LIBS) -o $@
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
export:: $(TARGETS)
|
||||
install:: export
|
||||
clean::
|
||||
rm -f $(TARGETS)
|
||||
|
||||
|
||||
|
||||
3028
mozilla/nsprpub/lib/tests/base64t.c
Normal file
3028
mozilla/nsprpub/lib/tests/base64t.c
Normal file
File diff suppressed because it is too large
Load Diff
3043
mozilla/nsprpub/lib/tests/string.c
Normal file
3043
mozilla/nsprpub/lib/tests/string.c
Normal file
File diff suppressed because it is too large
Load Diff
1
mozilla/nsprpub/macbuild/NSPR.Debug.Prefix
Normal file
1
mozilla/nsprpub/macbuild/NSPR.Debug.Prefix
Normal file
@@ -0,0 +1 @@
|
||||
//
|
||||
1
mozilla/nsprpub/macbuild/NSPR.Prefix
Normal file
1
mozilla/nsprpub/macbuild/NSPR.Prefix
Normal file
@@ -0,0 +1 @@
|
||||
//
|
||||
BIN
mozilla/nsprpub/macbuild/NSPR20.prj2
Normal file
BIN
mozilla/nsprpub/macbuild/NSPR20.prj2
Normal file
Binary file not shown.
BIN
mozilla/nsprpub/macbuild/NSPR20PPC.mcp
Normal file
BIN
mozilla/nsprpub/macbuild/NSPR20PPC.mcp
Normal file
Binary file not shown.
BIN
mozilla/nsprpub/macbuild/NSPR20PPCDebug.mcp
Normal file
BIN
mozilla/nsprpub/macbuild/NSPR20PPCDebug.mcp
Normal file
Binary file not shown.
26
mozilla/nsprpub/macbuild/NSPRConfig.h
Normal file
26
mozilla/nsprpub/macbuild/NSPRConfig.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#define OLDROUTINELOCATIONS 0
|
||||
|
||||
#define XP_MAC 1
|
||||
#define _PR_NO_PREEMPT 1
|
||||
#define _NO_FAST_STRING_INLINES_ 1
|
||||
#define FORCE_PR_LOG 1
|
||||
#define NSPR20 1
|
||||
|
||||
11
mozilla/nsprpub/macbuild/NSPRDebug.Prefix
Normal file
11
mozilla/nsprpub/macbuild/NSPRDebug.Prefix
Normal file
@@ -0,0 +1,11 @@
|
||||
//
|
||||
// NSPR.Prefix
|
||||
//
|
||||
// Global prefix file for the debug NSPR project.
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
#define DEBUG 1
|
||||
#define DEVELOPER_DEBUG 1
|
||||
#include "NSPRConfig.h"
|
||||
93
mozilla/nsprpub/makefile.win
Normal file
93
mozilla/nsprpub/makefile.win
Normal file
@@ -0,0 +1,93 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# An NMAKE file to set up and adjust NSPR20's build system for
|
||||
# Client build. Client build should invoke NMAKE on this file
|
||||
# instead of invoking gmake directly.
|
||||
#
|
||||
|
||||
DEPTH = ..
|
||||
include <$(DEPTH)\config\config.mak>
|
||||
|
||||
#
|
||||
# Backslashes are escape characters to gmake, so flip all backslashes
|
||||
# in $(MOZ_TOOLS) to forward slashes and pass that to gmake.
|
||||
#
|
||||
|
||||
GMAKE = $(MOZ_TOOLS)\bin\gmake.exe
|
||||
|
||||
GMAKE_FLAGS = MOZ_TOOLS_FLIPPED=$(MOZ_TOOLS:\=/) PR_CLIENT_BUILD=1 PR_CLIENT_BUILD_WINDOWS=1
|
||||
|
||||
#
|
||||
# The Client's debug build uses MSVC's debug runtime library (/MDd).
|
||||
#
|
||||
|
||||
!ifdef MOZ_DEBUG
|
||||
!else
|
||||
GMAKE_FLAGS = $(GMAKE_FLAGS) BUILD_OPT=1
|
||||
!endif
|
||||
|
||||
!if "$(MOZ_BITS)" == "16"
|
||||
GMAKE_FLAGS = $(GMAKE_FLAGS) OS_TARGET=WIN16
|
||||
!else
|
||||
|
||||
GMAKE_FLAGS = $(GMAKE_FLAGS) OS_TARGET=WIN95
|
||||
!ifdef MOZ_DEBUG
|
||||
GMAKE_FLAGS = $(GMAKE_FLAGS) USE_DEBUG_RTL=1
|
||||
PR_OBJDIR = WIN954.0_DBG.OBJD
|
||||
!else
|
||||
PR_OBJDIR = WIN954.0_OPT.OBJ
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
|
||||
#
|
||||
# The rules. Simply invoke gmake with the same target.
|
||||
# The default target is 'all'. For Win16, set up the
|
||||
# environment to use the Watcom compiler, Watcom headers,
|
||||
# and Watcom libs.
|
||||
#
|
||||
|
||||
all:: export libs install
|
||||
|
||||
export libs install clobber clobber_all clean::
|
||||
!if "$(MOZ_BITS)" == "16"
|
||||
set PATH=%WATCPATH%
|
||||
set INCLUDE=%WATC_INC%
|
||||
set LIB=%WATC_LIB%
|
||||
!endif
|
||||
$(GMAKE) $(GMAKE_FLAGS) $@
|
||||
!if "$(MOZ_BITS)" == "16"
|
||||
set PATH=%MSVCPATH%
|
||||
set INCLUDE=%MSVC_INC%
|
||||
set LIB=%MSVC_LIB%
|
||||
!endif
|
||||
|
||||
!if "$(MOZ_BITS)" != "16"
|
||||
export::
|
||||
$(MAKE_INSTALL) $(XPDIST)\$(PR_OBJDIR)\include\*.h $(DIST)\include
|
||||
$(MAKE_INSTALL) $(XPDIST)\$(PR_OBJDIR)\include\md\*.h $(DIST)\include\md
|
||||
$(MAKE_INSTALL) $(XPDIST)\$(PR_OBJDIR)\include\obsolete\*.h $(DIST)\include\obsolete
|
||||
$(MAKE_INSTALL) $(XPDIST)\$(PR_OBJDIR)\include\private\*.h $(DIST)\include\private
|
||||
$(MAKE_INSTALL) $(XPDIST)\$(PR_OBJDIR)\lib\*.lib $(DIST)\lib
|
||||
$(MAKE_INSTALL) $(XPDIST)\$(PR_OBJDIR)\lib\*.dll $(DIST)\bin
|
||||
!endif
|
||||
|
||||
depend::
|
||||
@echo NSPR20 has no dependencies. Skipped.
|
||||
24
mozilla/nsprpub/pr/Makefile
Normal file
24
mozilla/nsprpub/pr/Makefile
Normal file
@@ -0,0 +1,24 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#! gmake
|
||||
|
||||
MOD_DEPTH = ..
|
||||
|
||||
DIRS = include src
|
||||
|
||||
include $(MOD_DEPTH)/config/rules.mk
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user