xerces-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From amass...@apache.org
Subject cvs commit: xml-xerces/c/src/xercesc/util/Platforms Makefile.in
Date Wed, 04 Feb 2004 13:26:44 GMT
amassari    2004/02/04 05:26:44

  Modified:    c/src/xercesc/util AutoSense.hpp XercesDefs.hpp
               c/src/xercesc configure Makefile.incl runConfigure
               c/src/xercesc/util/Platforms Makefile.in
  Added:       c/src/xercesc/util/Platforms/Interix InterixDefs.hpp
                        InterixPlatformUtils.cpp Makefile.in
  Log:
  Added support for the Interix platform (Windows Services for Unix 3.5)
  
  Revision  Changes    Path
  1.13      +7 -0      xml-xerces/c/src/xercesc/util/AutoSense.hpp
  
  Index: AutoSense.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/AutoSense.hpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AutoSense.hpp	21 May 2003 21:08:04 -0000	1.12
  +++ AutoSense.hpp	4 Feb 2004 13:26:44 -0000	1.13
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.13  2004/02/04 13:26:44  amassari
  + * Added support for the Interix platform (Windows Services for Unix 3.5)
  + *
    * Revision 1.12  2003/05/21 21:08:04  knoaman
    * gcc 2.95.x is generating an internal error for some template definitions, so
    * we use the default memory manger in such cases.
  @@ -262,6 +265,9 @@
       #define XML_TRU64
   #elif defined(__NetBSD__)
       #define XML_NETBSD
  +#elif defined(__INTERIX)
  +    #define XML_INTERIX
  +    #define XML_UNIX
   #else
       #error Code requires port to host OS!
   #endif
  
  
  
  1.16      +7 -0      xml-xerces/c/src/xercesc/util/XercesDefs.hpp
  
  Index: XercesDefs.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XercesDefs.hpp,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XercesDefs.hpp	29 May 2003 11:18:37 -0000	1.15
  +++ XercesDefs.hpp	4 Feb 2004 13:26:44 -0000	1.16
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.16  2004/02/04 13:26:44  amassari
  + * Added support for the Interix platform (Windows Services for Unix 3.5)
  + *
    * Revision 1.15  2003/05/29 11:18:37  gareth
    * Added macros in so we can determine whether to do things like iostream as opposed to
iostream.h and whether to use std:: or not.
    *
  @@ -265,6 +268,10 @@
   
   #if defined(XML_IRIX)
   #include    <xercesc/util/Platforms/IRIX/IRIXDefs.hpp>
  +#endif
  +
  +#if defined(XML_INTERIX)
  +#include    <xercesc/util/Platforms/Interix/InterixDefs.hpp>
   #endif
   
   #if defined(XML_TANDEM)
  
  
  
  1.16      +3 -0      xml-xerces/c/src/xercesc/configure
  
  Index: configure
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/configure,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- configure	10 Dec 2003 23:50:26 -0000	1.15
  +++ configure	4 Feb 2004 13:26:44 -0000	1.16
  @@ -1332,6 +1332,7 @@
           *-*-osf*)		platform=TRU64 ;;
           *-apple-*)		platform=MACOSX ;;
           *-*-cygwin*)    platform=CYGWIN ;;
  +        *-*-interix*)   platform=INTERIX ;;
           *)              platform=UNKNOWN ;;
   esac
   
  @@ -1516,6 +1517,7 @@
   util/Platforms/AIX/Makefile \
   util/Platforms/BeOS/Makefile \
   util/Platforms/QNX/Makefile \
  +util/Platforms/Interix/Makefile \
   util/Platforms/Linux/Makefile \
   util/Platforms/FreeBSD/Makefile \
   util/Platforms/NetBSD/Makefile \
  @@ -1673,6 +1675,7 @@
   util/Platforms/AIX/Makefile \
   util/Platforms/BeOS/Makefile \
   util/Platforms/QNX/Makefile \
  +util/Platforms/Interix/Makefile \
   util/Platforms/Linux/Makefile \
   util/Platforms/FreeBSD/Makefile \
   util/Platforms/NetBSD/Makefile \
  
  
  
  1.48      +10 -1     xml-xerces/c/src/xercesc/Makefile.incl
  
  Index: Makefile.incl
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/Makefile.incl,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- Makefile.incl	13 Jan 2004 18:09:22 -0000	1.47
  +++ Makefile.incl	4 Feb 2004 13:26:44 -0000	1.48
  @@ -323,6 +323,15 @@
   LD_SONAME = -Wl,-soname,${SO_NAME}
   endif
   
  +#=============== INTERIX SPECIFIC OPTIONS =========================
  +ifeq (${PLATFORM}, INTERIX)
  +    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -D_REENTRANT -D_ALL_SOURCE
  +    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
  +    MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
  +    ALLLIBS = ${LIBS}
  +    SHLIBSUFFIX=.so
  +endif
  +
   #=============== LINUX SPECIFIC OPTIONS =========================
   ifeq (${PLATFORM}, LINUX)
   PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -D_REENTRANT
  
  
  
  1.32      +4 -3      xml-xerces/c/src/xercesc/runConfigure
  
  Index: runConfigure
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/runConfigure,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- runConfigure	13 Jan 2004 19:43:10 -0000	1.31
  +++ runConfigure	4 Feb 2004 13:26:44 -0000	1.32
  @@ -87,7 +87,8 @@
       echo "       where options may be any of the following:"
       echo "       -p <platform> (accepts 'aix', 'beos', 'linux', 'freebsd', 
               'netbsd', 'solaris', 'hp-10', 'hp-11', 'openserver', 'unixware', 
  -            'os400', 'irix', 'ptx', 'tru64', 'macosx', 'cygwin', 'qnx')
  +            'os400', 'irix', 'ptx', 'tru64', 'macosx', 'cygwin', 'qnx',
  +            'interix')
               [required; no default]"
       echo "       -c <C compiler name> (e.g. gcc, cc, xlc_r, qcc, icc or ecc) 
               [default is make default; cc for gnu make]"
  @@ -242,7 +243,7 @@
   #
   
   case $platform in
  -   aix | openserver | unixware | beos | linux | freebsd | netbsd | solaris | hp-10 | hp-11
| os400 | irix | ptx | tru64 | macosx | cygwin | qnx)
  +   aix | openserver | unixware | beos | linux | freebsd | netbsd | solaris | hp-10 | hp-11
| os400 | irix | ptx | tru64 | macosx | cygwin | qnx | interix)
          # platform has been recognized
          ;;
      *)
  
  
  
  1.1                  xml-xerces/c/src/xercesc/util/Platforms/Interix/InterixDefs.hpp
  
  Index: InterixDefs.hpp
  ===================================================================
  /*
   * 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/>.
   */
  
  /*
   * $Log: InterixDefs.hpp,v $
   * Revision 1.1  2004/02/04 13:26:44  amassari
   * Added support for the Interix platform (Windows Services for Unix 3.5)
   *
   *
   */
  
  
  // ---------------------------------------------------------------------------
  //  Interix runs in little endian mode
  // ---------------------------------------------------------------------------
  
  #define ENDIANMODE_LITTLE
  typedef void* FileHandle;
  
  
  
  
  1.1                  xml-xerces/c/src/xercesc/util/Platforms/Interix/InterixPlatformUtils.cpp
  
  Index: InterixPlatformUtils.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2004 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/>.
   */
  
  /*
   * $Log: InterixPlatformUtils.cpp,v $
   * Revision 1.1  2004/02/04 13:26:44  amassari
   * Added support for the Interix platform (Windows Services for Unix 3.5)
   *
   *
   */
  
  
  // ---------------------------------------------------------------------------
  //  Includes
  // ---------------------------------------------------------------------------
  
  #include "InterixDefs.hpp"
  
  #if !defined(APP_NO_THREADS)
  #include    <pthread.h>
  #endif
  
  #ifndef _GNU_SOURCE
      #error _GNU_SOURCE 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/timeb.h>
  #include    <string.h>
  #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>
  #include    <xercesc/util/OutOfMemoryException.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
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: Private Static Methods
  // ---------------------------------------------------------------------------
  
  XMLNetAccessor* XMLPlatformUtils::makeNetAccessor()
  {
  #if defined (XML_USE_NETACCESSOR_SOCKET)
      return new SocketNetAccessor();
  #else
      return 0;
  #endif
  }
  
  
  
  //
  //  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(const OutOfMemoryException&)
      {
          throw;
      }
      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_NATIVE_TRANSCODER
      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
                                            , MemoryManager* const manager)
  {
      int curPos = ftell( (FILE*)theFile);
      if (curPos == -1)
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotGetSize, manager);
  
      return (unsigned int)curPos;
  }
  
  void XMLPlatformUtils::closeFile(FileHandle theFile
                                   , MemoryManager* const manager)
  {
      if (fclose((FILE*)theFile))
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotCloseFile, manager);
  }
  
  unsigned int XMLPlatformUtils::fileSize(FileHandle theFile
                                          , MemoryManager* const manager)
  {
      // Get the current position
      long  int curPos = ftell((FILE*) theFile);
      if (curPos == -1)
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotGetCurPos, manager);
  
      // Seek to the end and save that value for return
       if (fseek((FILE*) theFile, 0, SEEK_END))
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotSeekToEnd, manager);
  
      long int retVal = ftell((FILE*)theFile);
      if (retVal == -1)
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotSeekToEnd, manager);
  
      // And put the pointer back
  
      if (fseek( (FILE*)theFile, curPos, SEEK_SET) )
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotSeekToPos, manager);
  
      return (unsigned int)retVal;
  }
  
  FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName
                                        , MemoryManager* const manager)
  {
      const char* tmpFileName = XMLString::transcode(fileName, manager);
      ArrayJanitor<char> janText((char*)tmpFileName, manager);
      FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
  
      if (retVal == NULL)
          return 0;
      return retVal;
  }
  
  FileHandle XMLPlatformUtils::openFile(const char* const fileName
                                        , MemoryManager* const manager)
  {
      FileHandle retVal = (FILE*)fopen( fileName , "rb" );
  
      if (retVal == NULL)
          return 0;
      return retVal;
  }
  
  FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName
                                               , MemoryManager* const manager)
  {
      const char* tmpFileName = XMLString::transcode(fileName, manager);
      ArrayJanitor<char> janText((char*)tmpFileName, manager);
      return fopen( tmpFileName , "wb" );
  }
  
  FileHandle XMLPlatformUtils::openFileToWrite(const char* const fileName
                                               , MemoryManager* const manager)
  {
      return fopen( fileName , "wb" );
  }
  
  FileHandle XMLPlatformUtils::openStdInHandle(MemoryManager* const manager)
  {
      return (FileHandle)fdopen(dup(0), "rb");
  }
  
  unsigned int
  XMLPlatformUtils::readFileBuffer( FileHandle          theFile
                                  , const unsigned int  toRead
                                  , XMLByte* const      toFill
                                  , MemoryManager* const manager)
  {
      size_t noOfItemsRead = fread((void*) toFill, 1, toRead, (FILE*)theFile);
  
      if(ferror((FILE*)theFile))
      {
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotReadFromFile, manager);
      }
  
      return (unsigned int)noOfItemsRead;
  }
  
  void
  XMLPlatformUtils::writeBufferToFile( FileHandle     const  theFile
                                     , long                  toWrite
                                     , const XMLByte* const  toFlush
                                     , MemoryManager* const manager)
  {
      if (!theFile        ||
          (toWrite <= 0 ) ||
          !toFlush         )
          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))
          {
              ThrowXMLwithMemMgr(XMLPlatformUtilsException, XMLExcepts::File_CouldNotWriteToFile,
manager);
          }
  
          if (bytesWritten < toWrite) //incomplete write
          {
              tmpFlush+=bytesWritten;
              toWrite-=bytesWritten;
              bytesWritten=0;
          }
          else
              return;
      }
  
      return;
  }
  
  void XMLPlatformUtils::resetFile(FileHandle theFile
                                   , MemoryManager* const manager)
  {
      // Seek to the start of the file
      if (fseek((FILE*)theFile, 0, SEEK_SET))
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotResetFile, manager);
  }
  
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: File system methods
  // ---------------------------------------------------------------------------
  XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
                                       MemoryManager* const manager)
  {
      //
      //  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, manager);
      ArrayJanitor<char> janText(newSrc, manager);
  
      // Use a local buffer that is big enough for the largest legal path
      char absPath[PATH_MAX + 1];
      // get the absolute path
      char* retPath = realpath(newSrc, &absPath[0]);
  
      if (!retPath)
      {
          ThrowXMLwithMemMgr(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName,
manager);
      }
      return XMLString::transcode(absPath, manager);
  }
  
  bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck
                                    , MemoryManager* const manager)
  {
      // 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 manager)
  {
      char  dirBuf[PATH_MAX + 2];
      char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
  
      if (!curDir)
      {
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotGetBasePathName, manager);
      }
  
      return XMLString::transcode(curDir, manager);
  }
  
  inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
  {
      return ( chBackSlash == c || chForwardSlash == c);
  }
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: Timing Methods
  // ---------------------------------------------------------------------------
  
  unsigned long XMLPlatformUtils::getCurrentMillis()
  {
      timeb aTime;
      ftime(&aTime);
      return (unsigned long)(aTime.time*1000 + aTime.millitm);
  
  }
  
  // -----------------------------------------------------------------------
  //  Mutex methods
  // -----------------------------------------------------------------------
  
  #if !defined(APP_NO_THREADS)
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: Platform init method
  // ---------------------------------------------------------------------------
  
  static XMLMutex* atomicOpsMutex = 0;
  
  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 == 0 )
      {
  	    atomicOpsMutex = new (fgMemoryManager) XMLMutex;
  	    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))
      {
          ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                   XMLExcepts::Mutex_CouldNotCreate, fgMemoryManager);
      }
      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))
          {
              ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                       XMLExcepts::Mutex_CouldNotDestroy, fgMemoryManager);
          }
          delete (pthread_mutex_t*) mtxHandle;
      }
  }
  
  
  void XMLPlatformUtils::lockMutex(void* const mtxHandle)
  {
      if (mtxHandle != NULL)
      {
          if (pthread_mutex_lock((pthread_mutex_t*) mtxHandle))
          {
              ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                       XMLExcepts::Mutex_CouldNotLock, fgMemoryManager);
          }
      }
  }
  
  
  void XMLPlatformUtils::unlockMutex(void* const mtxHandle)
  {
      if (mtxHandle != NULL)
      {
          if (pthread_mutex_unlock((pthread_mutex_t*) mtxHandle))
          {
              ThrowXMLwithMemMgr(XMLPlatformUtilsException,
                       XMLExcepts::Mutex_CouldNotUnlock, fgMemoryManager);
          }
      }
  }
  
  
  // -----------------------------------------------------------------------
  //  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;
  	delete atomicOpsMutex;
      atomicOpsMutex = 0;
  #endif
  }
  
  #include <xercesc/util/LogicalPath.c>
  
  XERCES_CPP_NAMESPACE_END
  
  
  
  
  1.1                  xml-xerces/c/src/xercesc/util/Platforms/Interix/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  #
  # 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/>.
  #
  # $Log: Makefile.in,v $
  # Revision 1.1  2004/02/04 13:26:44  amassari
  # Added support for the Interix platform (Windows Services for Unix 3.5)
  #
  #:
  #
  
  PLATFORM = @platform@
  CC  = @cc@
  CXX = @cxx@
  GCC = @GCC@
  GXX = @GXX@
  CXXFLAGS = @cxxflags@
  CFLAGS = @cflags@
  PREFIX = @prefix@
  PREFIX_INCLUDE = @prefix_include@
  LDFLAGS = @ldflags@
  LIBS = @libs@
  OSVER = @osver@
  USELIBWWW = @uselibwww@
  MESSAGELOADER = @messageloader@
  TRANSCODER = @transcoder@
  THREADS = @threads@
  
  MODULE = util
  
  include ../../../Makefile.incl
  
  SUBMODULE = Platforms/Interix
  CXXFLAGS += -D_GNU_SOURCE -D__USE_GNU
  CPP_PUBHEADERS = InterixDefs.hpp
  CPP_OBJECTS = InterixPlatformUtils.$(TO)
  
  include ../../Makefile.util.submodule
  
  
  
  1.9       +6 -0      xml-xerces/c/src/xercesc/util/Platforms/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Platforms/Makefile.in,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Makefile.in	12 May 2003 09:44:19 -0000	1.8
  +++ Makefile.in	4 Feb 2004 13:26:44 -0000	1.9
  @@ -55,6 +55,9 @@
   #
   #
   # $Log$
  +# Revision 1.9  2004/02/04 13:26:44  amassari
  +# Added support for the Interix platform (Windows Services for Unix 3.5)
  +#
   # Revision 1.8  2003/05/12 09:44:19  gareth
   # Port to NetBSD. Patch by Hiramatsu Yoshifumi.
   #
  @@ -204,6 +207,9 @@
   endif
   ifeq (${PLATFORM}, CYGWIN)
       SUBMODULE = Win32
  +endif
  +ifeq (${PLATFORM}, INTERIX)
  +    SUBMODULE = Interix
   endif
   
   includes::
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org


Mime
View raw message