summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcls%seawood.org <devnull@localhost>1999-10-09 03:51:28 +0000
committercls%seawood.org <devnull@localhost>1999-10-09 03:51:28 +0000
commitaae8094946097bc776e9c042449ee4aa23f1d6c2 (patch)
tree4a38ba3f3868bc363f836fd32257dfd732040cbc
parent84a0f7cefb78e17ef95a1630b7567226d9988dc8 (diff)
downloadnspr-hg-AUTOCONF_NSPR_WIN32_XCOMPILE_19990621_BRANCH.tar.gz
Merged HEAD branch changes to here.AUTOCONF_NSPR_WIN32_XCOMPILE_19990621_BRANCH
-rw-r--r--lib/ds/Makefile.in8
-rw-r--r--macbuild/NSPRConfig.h1
-rw-r--r--pr/include/MANIFEST2
-rw-r--r--pr/include/md/Makefile.in18
-rw-r--r--pr/include/obsolete/protypes.h2
-rw-r--r--pr/src/Makefile.in12
-rw-r--r--pr/src/linking/prlink.c125
-rw-r--r--pr/src/md/mac/macdll.c300
-rw-r--r--pr/src/md/mac/macsockotpt.c5
-rw-r--r--pr/src/md/mac/macthr.c2
-rw-r--r--pr/src/md/mac/mactime.c4
-rw-r--r--pr/src/md/unix/Makefile.in9
-rw-r--r--pr/tests/Makefile.in2
13 files changed, 416 insertions, 74 deletions
diff --git a/lib/ds/Makefile.in b/lib/ds/Makefile.in
index 7ad74349..b8751b7c 100644
--- a/lib/ds/Makefile.in
+++ b/lib/ds/Makefile.in
@@ -172,8 +172,16 @@ export:: $(TARGETS)
$(INSTALL) -m 444 $(HEADERS) $(DIST)/include
$(INSTALL) -m 444 $(TARGETS) $(DIST)/lib
ifdef SHARED_LIBRARY
+ifeq ($(OS_ARCH),HP-UX)
+ $(INSTALL) -m 755 $(SHARED_LIBRARY) $(DIST)/lib
+ $(INSTALL) -m 755 $(SHARED_LIBRARY) $(DIST)/bin
+else
$(INSTALL) -m 444 $(SHARED_LIBRARY) $(DIST)/bin
endif
+ifeq ($(OS_ARCH), OpenVMS)
+ $(INSTALL) -m 444 $(SHARED_LIBRARY:.$(DLL_SUFFIX)=.vms) $(DIST)/lib
+endif
+endif
ifeq ($(MOZ_BITS),16)
$(INSTALL) -m 444 $(HEADERS) $(MOZ_INCL)
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/lib
diff --git a/macbuild/NSPRConfig.h b/macbuild/NSPRConfig.h
index 59c2f562..07a9783f 100644
--- a/macbuild/NSPRConfig.h
+++ b/macbuild/NSPRConfig.h
@@ -23,4 +23,5 @@
#define _NO_FAST_STRING_INLINES_ 1
#define FORCE_PR_LOG 1
#define NSPR20 1
+#define NSPR_AS_SHARED_LIB
diff --git a/pr/include/MANIFEST b/pr/include/MANIFEST
index e9d284a4..fbc544a5 100644
--- a/pr/include/MANIFEST
+++ b/pr/include/MANIFEST
@@ -38,6 +38,8 @@ prtypes.h
prvrsion.h
prwin16.h
+prlink_mac.h
+
obsolete/protypes.h
obsolete/prsem.h
obsolete/probslet.h
diff --git a/pr/include/md/Makefile.in b/pr/include/md/Makefile.in
index 70d0b1a6..1b8e4b5b 100644
--- a/pr/include/md/Makefile.in
+++ b/pr/include/md/Makefile.in
@@ -147,6 +147,10 @@ ifeq ($(OS_ARCH),QNX)
MDCPUCFG_H = _qnx.cfg
endif
+ifeq ($(OS_TARGET),NTO)
+MDCPUCFG_H = _nto.cfg
+endif
+
ifeq ($(OS_ARCH),BeOS)
MDCPUCFG_H = _beos.cfg
endif
@@ -160,22 +164,20 @@ export:: #$(MDCPUCFG_H)
# $(INSTALL) -m 444 $(MDCPUCFG_H) $(MOZ_INCL)
# mv -f $(DIST)/include/$(MDCPUCFG_H) $(MOZ_INCL)/prcpucfg.h
#else
+ifneq ($(OS_ARCH),OpenVMS)
@if cmp -s $(srcdir)/$(MDCPUCFG_H) $(DIST)/include/prcpucfg.h; then \
echo $(DIST)/include/prcpucfg.h unchanged; \
else \
echo cp -f $(srcdir)/$(MDCPUCFG_H) $(DIST)/include/prcpucfg.h; \
cp -f $(srcdir)/$(MDCPUCFG_H) $(DIST)/include/prcpucfg.h; \
fi
-#endif
-ifeq ($(OS_ARCH),OpenVMS)
-# mv'ing a link causes the file itself to move, not the link, so fix it.
+else
+# mv'ing a link causes the file itself to move, not the link.
rm -f $(DIST)/include/$(MDCPUCFG_H)
- if [ ! -L $(DIST)/include/prcpucfg.h ]; then \
- mv -f $(DIST)/include/prcpucfg.h $(MDCPUCFG_H); \
- ln -fs ../../../nsprpub/pr/include/md/$(MDCPUCFG_H) \
- $(DIST)/include/prcpucfg.h; \
- fi
+ rm -f $(DIST)/include/prcpucfg.h
+ ln -fs `pwd`/$(MDCPUCFG_H) $(DIST)/include/prcpucfg.h
endif
+#endif
release:: export
@echo "Copying machine-dependent prcpucfg.h"
diff --git a/pr/include/obsolete/protypes.h b/pr/include/obsolete/protypes.h
index 9e987245..42cc1f1e 100644
--- a/pr/include/obsolete/protypes.h
+++ b/pr/include/obsolete/protypes.h
@@ -39,7 +39,7 @@ typedef PRIntn intn;
#include <support/SupportDefs.h>
-#elif VMS
+#elif defined(VMS)
/*
* OpenVMS already defines the integer types below in its standard
* header files ints.h and types.h.
diff --git a/pr/src/Makefile.in b/pr/src/Makefile.in
index f0b6b596..217746bc 100644
--- a/pr/src/Makefile.in
+++ b/pr/src/Makefile.in
@@ -98,10 +98,6 @@ endif
endif
endif
-ifeq ($(OS_ARCH),OpenVMS)
-OS_LIBS = -lvms_jackets
-endif
-
ifeq ($(OS_ARCH),OSF1)
ifeq ($(USE_PTHREADS), 1)
OS_LIBS = -lpthread -lrt
@@ -410,8 +406,16 @@ endif
export:: $(TARGETS)
$(INSTALL) -m 444 $(TARGETS) $(DIST)/lib
ifdef SHARED_LIBRARY
+ifeq ($(OS_ARCH),HP-UX)
+ $(INSTALL) -m 755 $(SHARED_LIBRARY) $(DIST)/lib
+ $(INSTALL) -m 755 $(SHARED_LIBRARY) $(DIST)/bin
+else
$(INSTALL) -m 444 $(SHARED_LIBRARY) $(DIST)/bin
endif
+ifeq ($(OS_ARCH), OpenVMS)
+ $(INSTALL) -m 444 $(SHARED_LIBRARY:.$(DLL_SUFFIX)=.vms) $(DIST)/lib
+endif
+endif
ifeq ($(MOZ_BITS),16)
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/lib
$(INSTALL) -m 444 $(TARGETS) $(MOZ_DIST)/bin
diff --git a/pr/src/linking/prlink.c b/pr/src/linking/prlink.c
index 0592c05c..bbf50190 100644
--- a/pr/src/linking/prlink.c
+++ b/pr/src/linking/prlink.c
@@ -29,6 +29,11 @@
#include <TextUtils.h>
#include <Types.h>
#include <Strings.h>
+#include <Aliases.h>
+
+#include "prlink_mac.h"
+#include "macdll.h"
+#include "mdmac.h"
#endif
#ifdef XP_UNIX
@@ -721,6 +726,126 @@ PR_FindLibrary(const char *name)
return result;
}
+
+#ifdef XP_MAC
+
+PR_IMPLEMENT(PRLibrary*)
+PR_LoadNamedFragment(const FSSpec *fileSpec, const char* fragmentName)
+{
+ PRLibrary* newLib = NULL;
+ PRLibrary* result;
+ FSSpec resolvedSpec = *fileSpec;
+ CFragConnectionID connectionID = 0;
+ Boolean isFolder, wasAlias;
+ OSErr err = noErr;
+
+ if (!_pr_initialized) _PR_ImplicitInitialization();
+
+ /* See if library is already loaded */
+ PR_EnterMonitor(pr_linker_lock);
+
+ result = pr_UnlockedFindLibrary(fragmentName);
+ if (result != NULL) goto unlock;
+
+ newLib = PR_NEWZAP(PRLibrary);
+ if (newLib == NULL) goto unlock;
+ newLib->staticTable = NULL;
+
+
+ /* Resolve an alias if this was one */
+ err = ResolveAliasFile(&resolvedSpec, true, &isFolder, &wasAlias);
+ if (err != noErr)
+ goto unlock;
+
+ if (isFolder)
+ {
+ err = fnfErr;
+ goto unlock;
+ }
+
+ /* Finally, try to load the library */
+ err = NSLoadNamedFragment(&resolvedSpec, fragmentName, &connectionID);
+ if (err != noErr)
+ goto unlock;
+
+ newLib->name = strdup(fragmentName);
+ newLib->dlh = connectionID;
+ newLib->next = pr_loadmap;
+ pr_loadmap = newLib;
+
+ result = newLib; /* success */
+ PR_LOG(_pr_linker_lm, PR_LOG_MIN, ("Loaded library %s (load lib)", newLib->name));
+
+unlock:
+ if (result == NULL) {
+ PR_SetError(PR_LOAD_LIBRARY_ERROR, _MD_ERRNO());
+ DLLErrorInternal(_MD_ERRNO()); /* sets error text */
+ }
+ PR_ExitMonitor(pr_linker_lock);
+ return result;
+}
+
+
+PR_EXTERN(PRLibrary*)
+PR_LoadIndexedFragment(const FSSpec *fileSpec, PRUint32 fragIndex)
+{
+ PRLibrary* newLib = NULL;
+ PRLibrary* result;
+ FSSpec resolvedSpec = *fileSpec;
+ char* fragmentName = NULL;
+ CFragConnectionID connectionID = 0;
+ Boolean isFolder, wasAlias;
+ OSErr err = noErr;
+
+ if (!_pr_initialized) _PR_ImplicitInitialization();
+
+ /* See if library is already loaded */
+ PR_EnterMonitor(pr_linker_lock);
+
+ result = pr_UnlockedFindLibrary(fragmentName);
+ if (result != NULL) goto unlock;
+
+ newLib = PR_NEWZAP(PRLibrary);
+ if (newLib == NULL) goto unlock;
+ newLib->staticTable = NULL;
+
+
+ /* Resolve an alias if this was one */
+ err = ResolveAliasFile(&resolvedSpec, true, &isFolder, &wasAlias);
+ if (err != noErr)
+ goto unlock;
+
+ if (isFolder)
+ {
+ err = fnfErr;
+ goto unlock;
+ }
+
+ /* Finally, try to load the library */
+ err = NSLoadIndexedFragment(&resolvedSpec, fragIndex, &fragmentName, &connectionID);
+ if (err != noErr)
+ goto unlock;
+
+ newLib->name = fragmentName; /* was malloced in NSLoadIndexedFragment */
+ newLib->dlh = connectionID;
+ newLib->next = pr_loadmap;
+ pr_loadmap = newLib;
+
+ result = newLib; /* success */
+ PR_LOG(_pr_linker_lm, PR_LOG_MIN, ("Loaded library %s (load lib)", newLib->name));
+
+unlock:
+ if (result == NULL) {
+ PR_SetError(PR_LOAD_LIBRARY_ERROR, _MD_ERRNO());
+ DLLErrorInternal(_MD_ERRNO()); /* sets error text */
+ }
+ PR_ExitMonitor(pr_linker_lock);
+ return result;
+}
+
+
+#endif
+
/*
** Unload a shared library which was loaded via PR_LoadLibrary
*/
diff --git a/pr/src/md/mac/macdll.c b/pr/src/md/mac/macdll.c
index dc7b4ee5..80f0a9b2 100644
--- a/pr/src/md/mac/macdll.c
+++ b/pr/src/md/mac/macdll.c
@@ -16,54 +16,25 @@
* Reserved.
*/
-#undef OLDROUTINENAMES
-#define OLDROUTINENAMES 1
+#include <string.h>
#include <Files.h>
#include <Errors.h>
#include <Folders.h>
#include <CodeFragments.h>
#include <Aliases.h>
+#include <Resources.h>
+
+#include "IterateDirectory.h" /* MoreFiles */
#include "MacErrorHandling.h"
+#include "macdll.h"
+#include "mdmac.h"
+#include "macio.h"
+
#include "primpl.h"
#include "plstr.h"
-typedef struct CfrgItem CfrgItem, *CfrgItemPtr;
-struct CfrgItem
-{
- OSType fArchType;
- UInt32 fUpdateLevel;
- UInt32 fCurVersion;
- UInt32 fOldDefVersion;
- UInt32 fAppStackSize;
- UInt16 fAppSubFolder;
- UInt8 fUsage;
- UInt8 fLocation;
- UInt32 fCodeOffset;
- UInt32 fCodeLength;
- UInt32 fReserved1;
- UInt32 fReserved2;
- UInt16 fItemSize; // %4 == 0
- Str255 fName;
- // Only make the final p-string as long as needed, then align to
- // a longword boundary
-};
-
-typedef struct CfrgHeader CfrgHeader, *CfrgHeaderPtr, **CfrgHeaderHandle;
-struct CfrgHeader
-{
- UInt32 fReserved1;
- UInt32 fReserved2;
- UInt32 fVersion;
- UInt32 fReserved3;
- UInt32 fReserved4;
- UInt32 fFiller1;
- UInt32 fFiller2;
- UInt32 fItemCount;
- CfrgItem fCfrgItemArray[1];
-};
-
/*
turds used to iterate through the directories looking
for the desired library.
@@ -93,7 +64,7 @@ GetSharedLibraryFilterProc(const CInfoPBRec* const inCpb, Boolean* inWantQuit, v
where the loader path is user defined.
*/
-extern OSErr
+OSErr
NSGetSharedLibrary(Str255 inLibName, CFragConnectionID* outID, Ptr* outMainAddr)
{
char* curLibPath;
@@ -113,9 +84,9 @@ NSGetSharedLibrary(Str255 inLibName, CFragConnectionID* outID, Ptr* outMainAddr)
freeCurLibPath = curLibPath = PR_GetLibraryPath();
if (curLibPath == NULL)
- return (fragLibNotFound);
+ return (cfragNoLibraryErr);
- tempErr = fragLibNotFound;
+ tempErr = cfragNoLibraryErr;
do
{
@@ -161,7 +132,7 @@ NSGetSharedLibrary(Str255 inLibName, CFragConnectionID* outID, Ptr* outMainAddr)
}
else
{
- tempErr = fragLibNotFound;
+ tempErr = cfragNoLibraryErr;
}
}
@@ -231,7 +202,7 @@ GetSharedLibraryFilterProc(const CInfoPBRec* const inCpb, Boolean* inWantQuit, v
// see if this symbol is in this fragment
if (LibInPefContainer(&fragSpec, pFilterData->inName, &codeOffset, &codeLength))
- tempErr = GetDiskFragment(&fragSpec, codeOffset, codeLength, pFilterData->inName, kLoadLib, &pFilterData->outID, &pFilterData->outAddress, errName);
+ tempErr = GetDiskFragment(&fragSpec, codeOffset, codeLength, pFilterData->inName, kLoadCFrag, &pFilterData->outID, &pFilterData->outAddress, errName);
else
return;
@@ -258,11 +229,11 @@ GetSharedLibraryFilterProc(const CInfoPBRec* const inCpb, Boolean* inWantQuit, v
static Boolean
LibInPefContainer(const FSSpec* inSpec, StringPtr inName, UInt32* outCodeOffset, UInt32* outCodeLength)
{
- short refNum;
- CfrgHeaderHandle hCfrg;
- CfrgItem* pCurItem;
- UInt32 curLibIndex;
- Boolean found;
+ short refNum;
+ CFragResourceHandle hCfrg;
+ CFragResourceMember* pCurItem;
+ UInt32 curLibIndex;
+ Boolean found;
// asume we didn't find it
found = false;
@@ -272,26 +243,26 @@ LibInPefContainer(const FSSpec* inSpec, StringPtr inName, UInt32* outCodeOffset,
require(-1 != refNum, Exit);
// grab out the alias record, if it's not there bail
- hCfrg = (CfrgHeaderHandle) Get1Resource(kCFragResourceType, kCFragResourceID);
+ hCfrg = (CFragResourceHandle) Get1Resource(kCFragResourceType, kCFragResourceID);
require(NULL != hCfrg, CloseResourceAndExit);
HLock((Handle)hCfrg);
// get ptr to first item
- pCurItem = &(*hCfrg)->fCfrgItemArray[0];
- for (curLibIndex = 0; curLibIndex < (*hCfrg)->fItemCount; curLibIndex++)
+ pCurItem = &(*hCfrg)->firstMember;
+ for (curLibIndex = 0; curLibIndex < (*hCfrg)->memberCount; curLibIndex++)
{
// is this our library?
- if ((pCurItem->fName[0] == inName[0]) &&
- (strncmp((char*) inName + 1, (char*) pCurItem->fName + 1, PR_MIN(pCurItem->fName[0], inName[0])) == 0))
+ if ((pCurItem->name[0] == inName[0]) &&
+ (strncmp((char*) inName + 1, (char*) pCurItem->name + 1, PR_MIN(pCurItem->name[0], inName[0])) == 0))
{
- *outCodeOffset = pCurItem->fCodeOffset;
- *outCodeLength = pCurItem->fCodeLength;
+ *outCodeOffset = pCurItem->offset;
+ *outCodeLength = pCurItem->length;
found = true;
}
// skip to next one
- pCurItem = (CfrgItem*) ((char*) pCurItem + pCurItem->fItemSize);
+ pCurItem = (CFragResourceMember*) ((char*) pCurItem + pCurItem->memberSize);
}
HUnlock((Handle)hCfrg);
@@ -312,8 +283,8 @@ Exit:
in the library to find the desired symbol.
*/
-extern OSErr
-NSFindSymbol(CFragConnectionID inID, Str255 inSymName, Ptr* outMainAddr, SymClass *outSymClass)
+OSErr
+NSFindSymbol(CFragConnectionID inID, Str255 inSymName, Ptr* outMainAddr, CFragSymbolClass *outSymClass)
{
OSErr err;
@@ -348,7 +319,7 @@ NSFindSymbol(CFragConnectionID inID, Str255 inSymName, Ptr* outMainAddr, SymClas
/* if we didn't find it set the error code so below it won't take this symbol */
if (!found)
- err = fragSymbolNotFound;
+ err = cfragNoSymbolErr;
}
}
else
@@ -359,3 +330,216 @@ NSFindSymbol(CFragConnectionID inID, Str255 inSymName, Ptr* outMainAddr, SymClas
return (err);
}
+
+#pragma mark -
+
+
+/*-----------------------------------------------------------------
+
+ GetNamedFragmentOffsets
+
+ Get the offsets into the data fork of the named fragment,
+ by reading the 'cfrg' resoruce.
+
+-----------------------------------------------------------------*/
+static OSErr GetNamedFragmentOffsets(const FSSpec *fileSpec, const char* fragmentName,
+ UInt32 *outOffset, UInt32 *outLength)
+{
+ CFragResourceHandle cFragHandle;
+ short fileRefNum;
+ OSErr err = noErr;
+
+ fileRefNum = FSpOpenResFile(fileSpec, fsRdPerm);
+ err = ResError();
+ if (err != noErr) return err;
+
+ cFragHandle = (CFragResourceHandle)Get1Resource(kCFragResourceType, kCFragResourceID);
+ if (!cFragHandle)
+ {
+ err = resNotFound;
+ goto done;
+ }
+
+ /* nothing here moves memory, so no need to lock the handle */
+
+ err = cfragNoLibraryErr; /* in case of failure */
+ *outOffset = 0;
+ *outLength = 0;
+
+ /* Now look for the named fragment */
+ if ((**cFragHandle).memberCount > 0)
+ {
+ CFragResourceMemberPtr memberPtr;
+ UInt16 i;
+
+ for ( i = 0, memberPtr = &(**cFragHandle).firstMember;
+ i < (**cFragHandle).memberCount;
+ i ++, memberPtr = (CFragResourceMemberPtr)((char *)memberPtr + memberPtr->memberSize))
+ {
+ char memberName[256];
+ UInt16 nameLen = PR_MIN(memberPtr->name[0], 255);
+
+ // avoid malloc here for speed
+ strncpy(memberName, (char *)&memberPtr->name[1], nameLen);
+ memberName[nameLen] = '\0';
+
+ // fragment names are case insensitive, so act like the system
+ if (PL_strcasecmp(memberName, fragmentName) == 0)
+ {
+ *outOffset = memberPtr->offset;
+ *outLength = memberPtr->length;
+ err = noErr;
+ break;
+ }
+ }
+ }
+
+ /* Resource handle will go away when the res fork is closed */
+
+done:
+ CloseResFile(fileRefNum);
+ return err;
+}
+
+
+/*-----------------------------------------------------------------
+
+ GetIndexedFragmentOffsets
+
+ Get the offsets into the data fork of the indexed fragment,
+ by reading the 'cfrg' resoruce.
+
+-----------------------------------------------------------------*/
+static OSErr GetIndexedFragmentOffsets(const FSSpec *fileSpec, UInt32 fragmentIndex,
+ UInt32 *outOffset, UInt32 *outLength, char **outFragmentName)
+{
+ CFragResourceHandle cFragHandle;
+ short fileRefNum;
+ OSErr err = noErr;
+
+ fileRefNum = FSpOpenResFile(fileSpec, fsRdPerm);
+ err = ResError();
+ if (err != noErr) return err;
+
+ cFragHandle = (CFragResourceHandle)Get1Resource(kCFragResourceType, kCFragResourceID);
+ if (!cFragHandle)
+ {
+ err = resNotFound;
+ goto done;
+ }
+
+ err = cfragNoLibraryErr; /* in case of failure */
+ *outOffset = 0;
+ *outLength = 0;
+ *outFragmentName = NULL;
+
+ /* the CStrFromPStr mallocs, so might move memory */
+ HLock((Handle)cFragHandle);
+
+ /* Now look for the named fragment */
+ if ((**cFragHandle).memberCount > 0)
+ {
+ CFragResourceMemberPtr memberPtr;
+ UInt16 i;
+
+ for ( i = 0, memberPtr = &(**cFragHandle).firstMember;
+ i < (**cFragHandle).memberCount;
+ i ++, memberPtr = (CFragResourceMemberPtr)((char *)memberPtr + memberPtr->memberSize))
+ {
+
+ if (i == fragmentIndex)
+ {
+ char *fragmentStr;
+ CStrFromPStr(memberPtr->name, &fragmentStr);
+ if (!fragmentStr) /* test for allocation failure */
+ {
+ err = memFullErr;
+ break;
+ }
+
+ *outFragmentName = fragmentStr;
+ *outOffset = memberPtr->offset;
+ *outLength = memberPtr->length;
+ err = noErr;
+ break;
+ }
+ }
+ }
+
+ HUnlock((Handle)cFragHandle);
+
+ /* Resource handle will go away when the res fork is closed */
+
+done:
+ CloseResFile(fileRefNum);
+ return err;
+}
+
+
+/*-----------------------------------------------------------------
+
+ NSLoadNamedFragment
+
+ Load the named fragment from the specified file. Aliases must
+ have been resolved by this point.
+
+-----------------------------------------------------------------*/
+
+OSErr NSLoadNamedFragment(const FSSpec *fileSpec, const char* fragmentName, CFragConnectionID *outConnectionID)
+{
+ UInt32 fragOffset, fragLength;
+ Ptr main;
+ Str255 fragName = "\p";
+ Str255 errName;
+ OSErr err;
+
+ err = GetNamedFragmentOffsets(fileSpec, fragmentName, &fragOffset, &fragLength);
+ if (err != noErr) return err;
+
+ err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
+ kLoadCFrag, outConnectionID, &main, errName);
+
+ return err;
+}
+
+
+/*-----------------------------------------------------------------
+
+ NSLoadIndexedFragment
+
+ Load the indexed fragment from the specified file. Aliases must
+ have been resolved by this point.
+
+ *outFragName is a malloc'd block containing the fragment name,
+ if returning noErr.
+
+-----------------------------------------------------------------*/
+
+OSErr NSLoadIndexedFragment(const FSSpec *fileSpec, PRUint32 fragmentIndex,
+ char** outFragName, CFragConnectionID *outConnectionID)
+{
+ UInt32 fragOffset, fragLength;
+ char *fragNameBlock = NULL;
+ Ptr main;
+ Str255 fragName = "\p";
+ Str255 errName;
+ OSErr err;
+
+ *outFragName = NULL;
+
+ err = GetIndexedFragmentOffsets(fileSpec, fragmentIndex, &fragOffset, &fragLength, &fragNameBlock);
+ if (err != noErr) return err;
+
+ err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
+ kLoadCFrag, outConnectionID, &main, errName);
+ if (err != noErr)
+ {
+ free(fragNameBlock);
+ return err;
+ }
+
+ *outFragName = fragNameBlock;
+ return noErr;
+}
+
+
diff --git a/pr/src/md/mac/macsockotpt.c b/pr/src/md/mac/macsockotpt.c
index dd9f5ad7..ab6409bc 100644
--- a/pr/src/md/mac/macsockotpt.c
+++ b/pr/src/md/mac/macsockotpt.c
@@ -19,8 +19,11 @@
/* This turns on UNIX style errors in OT 1.1 headers */
#define OTUNIXERRORS 1
+#include <string.h>
+
#include <Gestalt.h>
#include <OpenTransport.h>
+#include <OSUtils.h>
#define GESTALT_OPEN_TPT_PRESENT gestaltOpenTptPresentMask
#define GESTALT_OPEN_TPT_TCP_PRESENT gestaltOpenTptTCPPresentMask
@@ -534,7 +537,7 @@ TryAgain:
ErrorExit:
if ((err == kOTNoAddressErr) && (++retryCount <= 4)) {
- long finalTicks;
+ unsigned long finalTicks;
Delay(100,&finalTicks);
goto TryAgain;
diff --git a/pr/src/md/mac/macthr.c b/pr/src/md/mac/macthr.c
index 501cf629..341e1132 100644
--- a/pr/src/md/mac/macthr.c
+++ b/pr/src/md/mac/macthr.c
@@ -18,6 +18,8 @@
#include "primpl.h"
+#include <string.h>
+
#include <Types.h>
#include <Timer.h>
#include <OSUtils.h>
diff --git a/pr/src/md/mac/mactime.c b/pr/src/md/mac/mactime.c
index 9297c130..f0c27258 100644
--- a/pr/src/md/mac/mactime.c
+++ b/pr/src/md/mac/mactime.c
@@ -17,10 +17,12 @@
*/
#include <OSUtils.h>
-#include <time.h>
+#include <Timer.h>
#include "primpl.h"
+#include "mactime.h"
+
PR_IMPLEMENT(UnsignedWide) dstLocalBaseMicroseconds;
PR_IMPLEMENT(unsigned long) gJanuaryFirst1970Seconds;
diff --git a/pr/src/md/unix/Makefile.in b/pr/src/md/unix/Makefile.in
index e2eb2369..865dba7c 100644
--- a/pr/src/md/unix/Makefile.in
+++ b/pr/src/md/unix/Makefile.in
@@ -136,6 +136,11 @@ DGUX_CSRCS = \
QNX_CSRCS = \
qnx.c \
$(NULL)
+
+NTO_CSRCS = \
+ nto.c \
+ $(NULL)
+
endif # !USE_AUTOCONF
ifeq ($(PTHREADS_USER),1)
@@ -211,8 +216,12 @@ ifeq ($(OS_ARCH),DGUX)
CSRCS += $(DGUX_CSRCS)
endif
ifeq ($(OS_ARCH),QNX)
+ifeq ($(OS_TARGET),NTO)
+CSRCS += $(NTO_CSRCS)
+else
CSRCS += $(QNX_CSRCS)
endif
+endif
#
# Some Unix platforms have an assembly language file.
diff --git a/pr/tests/Makefile.in b/pr/tests/Makefile.in
index 08b0d277..c267699c 100644
--- a/pr/tests/Makefile.in
+++ b/pr/tests/Makefile.in
@@ -484,7 +484,7 @@ else
ifeq ($(OS_TARGET),OS2)
$(LINK) $(EXEFLAGS) $(LDOPTS) $< $(LIBPLC) $(LIBPR) $(OS_LIBS) $(EXTRA_LIBS)
else
- link $(LDOPTS) $< $(LIBPLC) $(LIBPR) wsock32.lib -out:$@
+ link $(LDOPTS) $(EXTRA_LDOPTS) $< $(LIBPLC) $(LIBPR) $(EXTRA_LIBS) wsock32.lib -out:$@
endif
endif
else