diff options
author | joerg <joerg@pkgsrc.org> | 2006-08-22 16:30:46 +0000 |
---|---|---|
committer | joerg <joerg@pkgsrc.org> | 2006-08-22 16:30:46 +0000 |
commit | cf581a34d1d1d888460ba185d500056ecd4154ad (patch) | |
tree | cf1b4ff1d0df57d1ad649fc1a12f405bf6c80d11 /textproc | |
parent | ff5bb3eae40244023482b8e73f4069854f740672 (diff) | |
download | pkgsrc-cf581a34d1d1d888460ba185d500056ecd4154ad.tar.gz |
Fix build on DragonFly. Fix PLIST. Bump revision.
Diffstat (limited to 'textproc')
-rw-r--r-- | textproc/xerces-c/Makefile | 7 | ||||
-rw-r--r-- | textproc/xerces-c/PLIST | 5 | ||||
-rw-r--r-- | textproc/xerces-c/distinfo | 3 | ||||
-rw-r--r-- | textproc/xerces-c/patches/patch-ae | 667 |
4 files changed, 11 insertions, 671 deletions
diff --git a/textproc/xerces-c/Makefile b/textproc/xerces-c/Makefile index f0d9ae67485..d150e9a3f75 100644 --- a/textproc/xerces-c/Makefile +++ b/textproc/xerces-c/Makefile @@ -1,8 +1,9 @@ -# $NetBSD: Makefile,v 1.29 2006/08/10 13:44:21 abs Exp $ +# $NetBSD: Makefile,v 1.30 2006/08/22 16:30:46 joerg Exp $ # DISTNAME= xerces-c-src_2_7_0 PKGNAME= ${DISTNAME:S/-src_/-/:S/_/./g} +PKGREVISION= 1 CATEGORIES= textproc MASTER_SITES= http://apache.rmplc.co.uk/xml/xerces-c/source/ @@ -49,6 +50,10 @@ PLIST_SUBST+= ${PLIST_SUBST.${ICONV_TYPE}-iconv} .include "../../converters/libiconv/buildlink3.mk" +post-extract: + ${MKDIR} ${WRKSRC}/util/Platforms/DragonFly + ${CP} ${WRKSRC}/util/Platforms/NetBSD/NetBSDPlatformUtils.cpp ${WRKSRC}/util/Platforms/DragonFly/DragonFlyPlatformUtils.cpp + pre-configure: ${CP} ${PKGSRCDIR}/mk/gnu-config/config.guess ${WRKSRC} ${CP} ${PKGSRCDIR}/mk/gnu-config/config.sub ${WRKSRC} diff --git a/textproc/xerces-c/PLIST b/textproc/xerces-c/PLIST index 64b42884aa8..674c728d704 100644 --- a/textproc/xerces-c/PLIST +++ b/textproc/xerces-c/PLIST @@ -1,4 +1,4 @@ -@comment $NetBSD: PLIST,v 1.4 2006/08/10 13:44:21 abs Exp $ +@comment $NetBSD: PLIST,v 1.5 2006/08/22 16:30:46 joerg Exp $ include/xercesc/dom/DOM.hpp include/xercesc/dom/DOMAttr.hpp include/xercesc/dom/DOMBuilder.hpp @@ -504,6 +504,9 @@ include/xercesc/validators/schema/identity/XercesXPath.hpp lib/libxerces-c.so lib/libxerces-c.so.27 lib/libxerces-c.so.27.0 +lib/libxerces-depdom.so +lib/libxerces-depdom.so.27 +lib/libxerces-depdom.so.27.0 @dirrm include/xercesc/validators/schema/identity @dirrm include/xercesc/validators/schema @dirrm include/xercesc/validators/datatype diff --git a/textproc/xerces-c/distinfo b/textproc/xerces-c/distinfo index 20e10259a2f..2f2d8067114 100644 --- a/textproc/xerces-c/distinfo +++ b/textproc/xerces-c/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.10 2006/08/10 13:44:21 abs Exp $ +$NetBSD: distinfo,v 1.11 2006/08/22 16:30:46 joerg Exp $ SHA1 (xerces-c-src_2_7_0.tar.gz) = 56f9587f33fca0a573a45f07762e3262a255d73f RMD160 (xerces-c-src_2_7_0.tar.gz) = 80914da4898c694bf0299d612164483f83857baf @@ -7,7 +7,6 @@ SHA1 (patch-aa) = 11485b77929a72c693bd9fa94c20dbbdd461fb3d SHA1 (patch-ab) = 581a7fb3faa93fd390af939d110c90d4b350910b SHA1 (patch-ac) = 8fe9f17f1a8be5e251885efe1bcf7466cbea7714 SHA1 (patch-ad) = 4ba3a565455cbc5202f309b36365297396221f51 -SHA1 (patch-ae) = fffbbe311499bba29825b21d6eb28f6ad9957320 SHA1 (patch-af) = d4456b93e3d867cc1275c8e5d0b33f0dc121083b SHA1 (patch-ag) = fac013068f8eae143995508352c0b0d8972ba0c9 SHA1 (patch-ah) = fe86675faa35e458e7729d12c1c343fc1976c9ba diff --git a/textproc/xerces-c/patches/patch-ae b/textproc/xerces-c/patches/patch-ae deleted file mode 100644 index 1d48a8c8665..00000000000 --- a/textproc/xerces-c/patches/patch-ae +++ /dev/null @@ -1,667 +0,0 @@ -$NetBSD: patch-ae,v 1.5 2006/08/10 13:44:22 abs Exp $ - ---- util/Platforms/DragonFly/DragonFlyPlatformUtils.cpp.orig 2006-04-26 14:02:54.000000000 +0100 -+++ util/Platforms/DragonFly/DragonFlyPlatformUtils.cpp -@@ -0,0 +1,662 @@ -+/* -+ * The Apache Software License, Version 1.1 -+ * -+ * Copyright (c) 1999-2000 The Apache Software Foundation. All rights -+ * reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions -+ * are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright -+ * notice, this list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright -+ * notice, this list of conditions and the following disclaimer in -+ * the documentation and/or other materials provided with the -+ * distribution. -+ * -+ * 3. The end-user documentation included with the redistribution, -+ * if any, must include the following acknowledgment: -+ * "This product includes software developed by the -+ * Apache Software Foundation (http://www.apache.org/)." -+ * Alternately, this acknowledgment may appear in the software itself, -+ * if and wherever such third-party acknowledgments normally appear. -+ * -+ * 4. The names "Xerces" and "Apache Software Foundation" must -+ * not be used to endorse or promote products derived from this -+ * software without prior written permission. For written -+ * permission, please contact apache\@apache.org. -+ * -+ * 5. Products derived from this software may not be called "Apache", -+ * nor may "Apache" appear in their name, without prior written -+ * permission of the Apache Software Foundation. -+ * -+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED -+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR -+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -+ * SUCH DAMAGE. -+ * ==================================================================== -+ * -+ * This software consists of voluntary contributions made by many -+ * individuals on behalf of the Apache Software Foundation, and was -+ * originally based on software copyright (c) 1999, International -+ * Business Machines, Inc., http://www.ibm.com . For more information -+ * on the Apache Software Foundation, please see -+ * <http://www.apache.org/>. -+ */ -+ -+/* -+ * -+ * -+ */ -+ -+ -+// --------------------------------------------------------------------------- -+// Includes -+// --------------------------------------------------------------------------- -+ -+#if !defined(APP_NO_THREADS) -+#include <pthread.h> -+#endif -+ -+/* #ifndef __USE_UNIX98 -+ #error __USE_UNIX98 is not defined in your compile settings -+#endif */ -+ -+#include <unistd.h> -+#include <stdio.h> -+#include <stdlib.h> -+#include <errno.h> -+#include <libgen.h> -+#include <sys/time.h> -+#include <string.h> -+#include <strings.h>/* for strcasecmp & strncasecmp */ -+#include <wchar.h> /* for win_t */ -+#include <xercesc/util/PlatformUtils.hpp> -+#include <xercesc/util/RuntimeException.hpp> -+#include <xercesc/util/Janitor.hpp> -+#include <xercesc/util/Mutexes.hpp> -+#include <xercesc/util/XMLString.hpp> -+#include <xercesc/util/XMLUniDefs.hpp> -+#include <xercesc/util/XMLUni.hpp> -+#include <xercesc/util/PanicHandler.hpp> -+ -+#if defined(XML_USE_ICU_TRANSCODER) -+ #include <xercesc/util/Transcoders/ICU/ICUTransService.hpp> -+#elif defined (XML_USE_GNU_TRANSCODER) -+ #include <xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.hpp> -+#else -+ // Use native transcoder. Same as -DXML_USE_NATIVE_TRANSCODER -+ #include <xercesc/util/Transcoders/Iconv/IconvTransService.hpp> -+#endif -+ -+ -+#if defined(XML_USE_ICU_MESSAGELOADER) -+ #include <xercesc/util/MsgLoaders/ICU/ICUMsgLoader.hpp> -+#elif defined(XML_USE_ICONV_MESSAGELOADER) -+ #include <xercesc/util/MsgLoaders/MsgCatalog/MsgCatalogLoader.hpp> -+#else -+ // Same as -DXML_USE_INMEM_MESSAGELOADER -+ #include <xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.hpp> -+#endif -+ -+ -+#if defined (XML_USE_NETACCESSOR_SOCKET) -+ #include <xercesc/util/NetAccessors/Socket/SocketNetAccessor.hpp> -+#endif -+ -+XERCES_CPP_NAMESPACE_BEGIN -+ -+// --------------------------------------------------------------------------- -+// Local Methods -+// --------------------------------------------------------------------------- -+ -+static void WriteCharStr( FILE* stream, const char* const toWrite) -+{ -+ if (fputs(toWrite, stream) == EOF) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::Strm_StdErrWriteFailure); -+ } -+} -+ -+static void WriteUStrStdErr( const XMLCh* const toWrite) -+{ -+ char* tmpVal = XMLString::transcode(toWrite); -+ ArrayJanitor<char> janText(tmpVal); -+ if (fputs(tmpVal, stderr) == EOF) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::Strm_StdErrWriteFailure); -+ } -+} -+ -+static void WriteUStrStdOut( const XMLCh* const toWrite) -+ { -+ char* tmpVal = XMLString::transcode(toWrite); -+ ArrayJanitor<char> janText(tmpVal); -+ if (fputs(tmpVal, stdout) == EOF) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::Strm_StdOutWriteFailure); -+ } -+} -+ -+XMLNetAccessor* XMLPlatformUtils::makeNetAccessor() -+{ -+#if defined (XML_USE_NETACCESSOR_SOCKET) -+ return new SocketNetAccessor(); -+#else -+ return 0; -+#endif -+} -+ -+// --------------------------------------------------------------------------- -+// XMLPlatformUtils: Private Static Methods -+// --------------------------------------------------------------------------- -+ -+// -+// This method is called by the platform independent part of this class -+// when client code asks to have one of the supported message sets loaded. -+// -+ -+XMLMsgLoader* XMLPlatformUtils::loadAMsgSet(const XMLCh* const msgDomain) -+{ -+ XMLMsgLoader* retVal; -+ try -+ { -+#if defined (XML_USE_ICU_MESSAGELOADER) -+ retVal = new ICUMsgLoader(msgDomain); -+#elif defined (XML_USE_ICONV_MESSAGELOADER) -+ retVal = new MsgCatalogLoader(msgDomain); -+#else -+ // same as -DXML_USE_INMEM_MESSAGELOADER -+ retVal = new InMemMsgLoader(msgDomain); -+#endif -+ } -+ -+ catch(...) -+ { -+ panic(PanicHandler::Panic_CantLoadMsgDomain); -+ } -+ return retVal; -+} -+ -+ -+// -+// This method is called very early in the bootstrapping process. This guy -+// must create a transcoding service and return it. It cannot use any string -+// methods, any transcoding services, throw any exceptions, etc... It just -+// makes a transcoding service and returns it, or returns zero on failure. -+// -+ -+XMLTransService* XMLPlatformUtils::makeTransService() -+{ -+#if defined (XML_USE_ICU_TRANSCODER) -+ // Use ICU transcoding services. -+ // same as -DXML_USE_ICU_MESSAGELOADER -+ return new ICUTransService; -+#elif defined (XML_USE_GNU_TRANSCODER) -+ return new IconvGNUTransService; -+#else -+ // Use native transcoding services. -+ // same as -DXML_USE_INMEM_MESSAGELOADER -+ return new IconvTransService; -+ -+#endif -+} -+ -+// --------------------------------------------------------------------------- -+// XMLPlatformUtils: The panic method -+// --------------------------------------------------------------------------- -+void XMLPlatformUtils::panic(const PanicHandler::PanicReasons reason) -+{ -+ fgUserPanicHandler? fgUserPanicHandler->panic(reason) : fgDefaultPanicHandler->panic(reason); -+} -+ -+ -+// --------------------------------------------------------------------------- -+// XMLPlatformUtils: File Methods -+// --------------------------------------------------------------------------- -+ -+unsigned int XMLPlatformUtils::curFilePos(FileHandle theFile) -+{ -+ if (theFile == NULL) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ int curPos = ftell( (FILE*)theFile); -+ if (curPos == -1) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotGetSize); -+ -+ return (unsigned int)curPos; -+} -+ -+void XMLPlatformUtils::closeFile(FileHandle theFile) -+{ -+ if (theFile == NULL) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ if (fclose((FILE*)theFile)) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotCloseFile); -+} -+ -+unsigned int XMLPlatformUtils::fileSize(FileHandle theFile) -+{ -+ if (theFile == NULL) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ // Get the current position -+ long int curPos = ftell((FILE*) theFile); -+ if (curPos == -1) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotGetCurPos); -+ -+ // Seek to the end and save that value for return -+ if (fseek((FILE*) theFile, 0, SEEK_END)) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotSeekToEnd); -+ -+ long int retVal = ftell((FILE*)theFile); -+ if (retVal == -1) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotSeekToEnd); -+ -+ // And put the pointer back -+ -+ if (fseek( (FILE*)theFile, curPos, SEEK_SET) ) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotSeekToPos); -+ -+ return (unsigned int)retVal; -+} -+ -+FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName) -+{ -+ if (fileName == NULL) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ const char* tmpFileName = XMLString::transcode(fileName); -+ ArrayJanitor<char> janText((char*)tmpFileName); -+ FileHandle retVal = (FILE*)fopen( tmpFileName , "r+" ); -+ -+ if (retVal == NULL) -+ return 0; -+ return retVal; -+} -+ -+FileHandle XMLPlatformUtils::openFile(const char* const fileName) -+{ -+ if (fileName == NULL) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ FileHandle retVal = (FILE*)fopen( fileName , "r+" ); -+ -+ if (retVal == NULL) -+ return 0; -+ return retVal; -+} -+ -+FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName) -+{ -+ if (fileName == NULL) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ const char* tmpFileName = XMLString::transcode(fileName); -+ ArrayJanitor<char> janText((char*)tmpFileName); -+ -+ FileHandle retVal = (FILE*)fopen( tmpFileName, "r+" ); -+ if (retVal == NULL) -+ return 0; -+ return retVal; -+} -+ -+FileHandle XMLPlatformUtils::openFileToWrite(const char* const fileName) -+{ -+ if (fileName == NULL) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ FileHandle retVal = (FILE*)fopen( fileName, "r+" ); -+ -+ if (retVal == NULL) -+ return 0; -+ return retVal; -+} -+ -+FileHandle XMLPlatformUtils::openStdInHandle() -+{ -+ int nfd = dup(0); -+ if (nfd == -1) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotDupHandle); -+ return (FileHandle)fdopen(dup(0), "r"); -+} -+ -+ -+ -+unsigned int -+XMLPlatformUtils::readFileBuffer( FileHandle theFile -+ , const unsigned int toRead -+ , XMLByte* const toFill) -+{ -+ if ( !theFile || !toFill ) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ if (toRead == 0) -+ return 0; -+ size_t noOfItemsRead = fread((void*) toFill, 1, toRead, (FILE*)theFile); -+ -+ if(ferror((FILE*)theFile)) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotReadFromFile); -+ } -+ -+ return (unsigned int)noOfItemsRead; -+} -+ -+void XMLPlatformUtils::writeBufferToFile( FileHandle const theFile -+ , long toWrite -+ , const XMLByte* const toFlush ) -+{ -+ if ( !theFile || !toFlush ) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ if ( toWrite <= 0 ) -+ return; -+ -+ const XMLByte* tmpFlush = (const XMLByte*) toFlush; -+ size_t bytesWritten = 0; -+ -+ while (true) -+ { -+ bytesWritten = fwrite(tmpFlush, sizeof(XMLByte), toWrite, (FILE*)theFile); -+ -+ if(ferror((FILE*)theFile)) -+ { -+#if 0 -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotWriteToFile); -+#else -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotReadFromFile); -+#endif -+ } -+ -+ if (bytesWritten < (size_t) toWrite) //incomplete write -+ { -+ tmpFlush += bytesWritten; -+ toWrite -= bytesWritten; -+ bytesWritten = 0; -+ } -+ else -+ return; -+ } -+} -+ -+void XMLPlatformUtils::resetFile(FileHandle theFile) -+{ -+ if (theFile == NULL) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::CPtr_PointerIsZero); -+ // Seek to the start of the file -+ if (fseek((FILE*)theFile, 0, SEEK_SET)) -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotResetFile); -+} -+ -+ -+// --------------------------------------------------------------------------- -+// XMLPlatformUtils: Timing Methods -+// --------------------------------------------------------------------------- -+ -+unsigned long XMLPlatformUtils::getCurrentMillis() -+{ -+ struct timeval t; -+ struct timezone tz; -+ -+ gettimeofday(&t, &tz); -+ return (unsigned long)(t.tv_sec*1000 + t.tv_usec); -+} -+ -+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath, MemoryManager* const) -+{ -+ -+ // -+ // NOTE: THe path provided has always already been opened successfully, -+ // so we know that its not some pathological freaky path. It comes in -+ // in native format, and goes out as Unicode always -+ // -+ char* newSrc = XMLString::transcode(srcPath); -+ ArrayJanitor<char> janText(newSrc); -+ -+ // Use a local buffer that is big enough for the largest legal path -+ char *absPath = new char[1024]; -+ // get the absolute path -+ char* retPath = realpath(newSrc, absPath); -+ ArrayJanitor<char> janText2(retPath); -+ -+ if (!retPath) -+ { -+ ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName); -+ } -+ return XMLString::transcode(absPath); -+} -+ -+bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck) -+{ -+ // Check for pathological case of empty path -+ if (!toCheck[0]) -+ return false; -+ -+ // -+ // If it starts with a slash, then it cannot be relative. This covers -+ // both something like "\Test\File.xml" and an NT Lan type remote path -+ // that starts with a node like "\\MyNode\Test\File.xml". -+ // -+ if (toCheck[0] == XMLCh('/')) -+ return false; -+ -+ // Else assume its a relative path -+ return true; -+} -+ -+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const) -+{ -+ char dirBuf[PATH_MAX + 1]; -+ char *curDir = getcwd(&dirBuf[0], PATH_MAX + 1); -+ -+ if (!curDir) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::File_CouldNotGetBasePathName); -+ } -+ -+ return XMLString::transcode(curDir); -+} -+ -+inline bool XMLPlatformUtils::isAnySlash(XMLCh c) -+{ -+ return ( chBackSlash == c || chForwardSlash == c); -+} -+ -+ -+// ----------------------------------------------------------------------- -+// Mutex methods -+// ----------------------------------------------------------------------- -+ -+#if !defined(APP_NO_THREADS) -+ -+// --------------------------------------------------------------------------- -+// XMLPlatformUtils: Platform init method -+// --------------------------------------------------------------------------- -+ -+static XMLMutex atomicOpsMutex; -+ -+void XMLPlatformUtils::platformInit() -+{ -+ // -+ // The atomicOps mutex needs to be created early. -+ // Normally, mutexes are created on first use, but there is a -+ // circular dependency between compareAndExchange() and -+ // mutex creation that must be broken. -+ -+ if (atomicOpsMutex.fHandle == 0) -+ atomicOpsMutex.fHandle = XMLPlatformUtils::makeMutex(); -+} -+ -+void* XMLPlatformUtils::makeMutex() -+{ -+ pthread_mutex_t* mutex = new pthread_mutex_t; -+ pthread_mutexattr_t* attr = new pthread_mutexattr_t; -+ pthread_mutexattr_init(attr); -+ pthread_mutexattr_settype(attr, PTHREAD_MUTEX_RECURSIVE); -+ if (pthread_mutex_init(mutex, attr)) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::Mutex_CouldNotCreate); -+ } -+ pthread_mutexattr_destroy(attr); -+ delete attr; -+ return (void*)(mutex); -+ -+} -+ -+void XMLPlatformUtils::closeMutex(void* const mtxHandle) -+{ -+ if (mtxHandle != NULL) -+ { -+ if (pthread_mutex_destroy((pthread_mutex_t*) mtxHandle)) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::Mutex_CouldNotDestroy); -+ } -+ delete (pthread_mutex_t*)mtxHandle; -+ } -+} -+ -+ -+void XMLPlatformUtils::lockMutex(void* const mtxHandle) -+{ -+ if (mtxHandle != NULL) -+ { -+ if (pthread_mutex_lock((pthread_mutex_t*) mtxHandle)) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::Mutex_CouldNotLock); -+ } -+ } -+} -+ -+ -+void XMLPlatformUtils::unlockMutex(void* const mtxHandle) -+{ -+ if (mtxHandle != NULL) -+ { -+ if (pthread_mutex_unlock((pthread_mutex_t*) mtxHandle)) -+ { -+ ThrowXML(XMLPlatformUtilsException, -+ XMLExcepts::Mutex_CouldNotUnlock); -+ } -+ } -+} -+ -+ -+// ----------------------------------------------------------------------- -+// Miscellaneous synchronization methods -+// ----------------------------------------------------------------------- -+ -+void* XMLPlatformUtils::compareAndSwap(void** toFill -+ , const void* const newValue -+ , const void* const toCompare) -+{ -+ XMLMutexLock lockMutex(&atomicOpsMutex); -+ -+ void *retVal = *toFill; -+ if (*toFill == toCompare) -+ *toFill = (void *)newValue; -+ -+ return retVal; -+} -+ -+int XMLPlatformUtils::atomicIncrement(int &location) -+{ -+ XMLMutexLock localLock(&atomicOpsMutex); -+ -+ return ++location; -+} -+ -+int XMLPlatformUtils::atomicDecrement(int &location) -+{ -+ XMLMutexLock localLock(&atomicOpsMutex); -+ -+ return --location; -+} -+ -+#else // #if !defined (APP_NO_THREADS) -+ -+void XMLPlatformUtils::platformInit() -+{ -+} -+ -+void* XMLPlatformUtils::makeMutex() -+{ -+ return 0; -+} -+ -+void XMLPlatformUtils::closeMutex(void* const mtxHandle) -+{ -+} -+ -+void XMLPlatformUtils::lockMutex(void* const mtxHandle) -+{ -+} -+ -+void XMLPlatformUtils::unlockMutex(void* const mtxHandle) -+{ -+} -+ -+void* XMLPlatformUtils::compareAndSwap (void** toFill, -+ const void* const newValue, -+ const void* const toCompare) -+{ -+ void *retVal = *toFill; -+ if (*toFill == toCompare) -+ *toFill = (void *)newValue; -+ return retVal; -+} -+ -+int XMLPlatformUtils::atomicIncrement(int &location) -+{ -+ return ++location; -+} -+ -+int XMLPlatformUtils::atomicDecrement(int &location) -+{ -+ return --location; -+} -+ -+#endif // APP_NO_THREADS -+ -+void XMLPlatformUtils::platformTerm() -+{ -+#if !defined(APP_NO_THREADS) -+ // delete the mutex we created -+ closeMutex(atomicOpsMutex.fHandle); -+ atomicOpsMutex.fHandle = 0; -+#endif -+} -+ -+#include <xercesc/util/LogicalPath.c> -+ -+XERCES_CPP_NAMESPACE_END |