diff --git a/src/xercesc/configure b/src/xercesc/configure
index d0462a8e5bd70f1279a8fdd1dd8ba6ce3fc883d9..89e11e9d8a4c72e6d3b0a6f395a2ee9d3ea3ed25 100755
--- a/src/xercesc/configure
+++ b/src/xercesc/configure
@@ -1531,6 +1531,7 @@ util/Platforms/UnixWare/Makefile \
 util/Platforms/Tru64/Makefile \
 util/Platforms/MacOS/Makefile \
 util/Platforms/Win32/Makefile \
+util/Platforms/Cygwin/Makefile \
 util/Compilers/Makefile \
 util/MsgLoaders/InMemory/Makefile \
 util/MsgLoaders/ICU/Makefile \
@@ -1689,6 +1690,7 @@ util/Platforms/UnixWare/Makefile \
 util/Platforms/Tru64/Makefile \
 util/Platforms/MacOS/Makefile \
 util/Platforms/Win32/Makefile \
+util/Platforms/Cygwin/Makefile \
 util/Compilers/Makefile \
 util/MsgLoaders/InMemory/Makefile \
 util/MsgLoaders/ICU/Makefile \
diff --git a/src/xercesc/configure.in b/src/xercesc/configure.in
index f0fc8290097aa301544abcb1bfd508fc11fb7087..3e5f567978a8ae9a61a4e286795fb9dc367b92a3 100644
--- a/src/xercesc/configure.in
+++ b/src/xercesc/configure.in
@@ -139,6 +139,7 @@ util/Platforms/UnixWare/Makefile \
 util/Platforms/Tru64/Makefile \
 util/Platforms/MacOS/Makefile \
 util/Platforms/Win32/Makefile \
+util/Platforms/Cygwin/Makefile \
 util/Compilers/Makefile \
 util/MsgLoaders/InMemory/Makefile \
 util/MsgLoaders/ICU/Makefile \
diff --git a/src/xercesc/util/AutoSense.hpp b/src/xercesc/util/AutoSense.hpp
index 52534660b8d1f777aaf18420aa590bf029df526a..5d936492644e16ed36630bdee81e54b59e540749 100644
--- a/src/xercesc/util/AutoSense.hpp
+++ b/src/xercesc/util/AutoSense.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.14  2004/02/17 15:56:50  neilg
+ * fix for bug 25035; much thanks to Abe Backus
+ *
  * Revision 1.13  2004/02/04 13:26:44  amassari
  * Added support for the Interix platform (Windows Services for Unix 3.5)
  *
@@ -243,7 +246,12 @@
     #define XML_TANDEM
     #define XML_UNIX
     #define XML_CSET
-#elif defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__)
+#elif defined(__CYGWIN__)
+    #define XML_CYGWIN
+    #ifndef WIN32
+      #define WIN32
+    #endif
+#elif defined(_WIN32) || defined(WIN32)
     #define XML_WIN32
     #ifndef WIN32
       #define WIN32
diff --git a/src/xercesc/util/Platforms/Cygwin/CygwinDefs.hpp b/src/xercesc/util/Platforms/Cygwin/CygwinDefs.hpp
new file mode 100755
index 0000000000000000000000000000000000000000..34829fe0166fc5702df05cfa4425c64ee7c38d74
--- /dev/null
+++ b/src/xercesc/util/Platforms/Cygwin/CygwinDefs.hpp
@@ -0,0 +1,71 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2004 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$
+ * Revision 1.1  2004/02/17 15:56:50  neilg
+ * fix for bug 25035; much thanks to Abe Backus
+ *
+ *
+ */
+
+
+// ---------------------------------------------------------------------------
+//  NT and Win98 always run the CPU in little endian mode.
+// ---------------------------------------------------------------------------
+#define ENDIANMODE_LITTLE
+
+typedef void* FileHandle;
diff --git a/src/xercesc/util/Platforms/Cygwin/CygwinPlatformUtils.cpp b/src/xercesc/util/Platforms/Cygwin/CygwinPlatformUtils.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..2732b4815b0276281ca32aac25d636c718b0bc71
--- /dev/null
+++ b/src/xercesc/util/Platforms/Cygwin/CygwinPlatformUtils.cpp
@@ -0,0 +1,608 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 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$
+ * Revision 1.1  2004/02/17 15:56:50  neilg
+ * fix for bug 25035; much thanks to Abe Backus
+ *
+ *
+ */
+
+
+// ---------------------------------------------------------------------------
+//  Includes
+// ---------------------------------------------------------------------------
+
+#if !defined(APP_NO_THREADS)
+#include    <windows.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    <sys/timeb.h>
+#include    <sys/cygwin.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>
+#elif defined (XML_USE_CYGWIN_TRANSCODER)
+    #include <xercesc/util/Transcoders/Cygwin/CygwinTransService.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_LIBWWW)
+    #include <xercesc/util/NetAccessors/libWWW/LibWWWNetAccessor.hpp>
+#elif 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();
+#elif defined (XML_USE_NETACCESSOR_LIBWWW)
+    return new LibWWWNetAccessor();
+#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;
+#elif defined (XML_USE_CYGWIN_TRANSCODER)
+    return new CygwinTransService;
+#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
+// ---------------------------------------------------------------------------
+
+//
+//  Functions to look for Unicode forward and back slashes.
+//  This operation is complicated by the fact that some Japanese and Korean
+//    encodings use the same encoding for both '\' and their currency symbol
+//    (Yen or Won).  In these encodings, which is meant is context dependent.
+//    Unicode converters choose the currency symbols.  But in the context
+//    of a Windows file name, '\' is generally what was intended.
+//
+//    So we make a leap of faith, and assume that if we get a Yen or Won
+//    here, in the context of a file name, that it originated in one of
+//    these encodings, and is really supposed to be a '\'.
+//
+static bool isBackSlash(XMLCh c) {
+    return c == chBackSlash ||
+           c == chYenSign   ||
+           c == chWonSign;
+}
+
+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);
+
+	char posix_name[PATH_MAX + 1];
+	cygwin_conv_to_posix_path(tmpFileName, posix_name);
+
+    FileHandle retVal = (FILE*)fopen( posix_name , "rb" );
+
+    if (retVal == NULL)
+        return 0;
+    return retVal;
+}
+
+FileHandle XMLPlatformUtils::openFile(const char* const fileName
+                                      , MemoryManager* const manager)
+{
+	char posix_name[PATH_MAX + 1];
+	cygwin_conv_to_posix_path(fileName, posix_name);
+
+    FileHandle retVal = (FILE*)fopen( posix_name , "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);
+
+	char posix_name[PATH_MAX + 1];
+	cygwin_conv_to_posix_path(tmpFileName, posix_name);
+
+    return fopen( posix_name , "wb" );
+}
+
+FileHandle XMLPlatformUtils::openFileToWrite(const char* const fileName
+                                             , MemoryManager* const manager)
+{
+	char posix_name[PATH_MAX + 1];
+	cygwin_conv_to_posix_path(fileName, posix_name);
+
+    return fopen( posix_name , "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 posix_name[PATH_MAX + 1];
+    // get the absolute path
+    if (0 != cygwin_conv_to_full_posix_path(newSrc, posix_name))
+    {
+        ThrowXMLwithMemMgr(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName, manager);
+    }
+    return XMLString::transcode(posix_name, manager);
+}
+
+bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck
+                                  , MemoryManager* const manager)
+{
+    // Check for pathological case of empty path
+    if (!toCheck[0])
+        return false;
+
+    //
+    //  If its starts with a drive, then it cannot be relative. Note that
+    //  we checked the drive not being empty above, so worst case its one
+    //  char long and the check of the 1st char will fail because its really
+    //  a null character.
+    //
+    if (toCheck[1] == chColon)
+    {
+        if (((toCheck[0] >= chLatin_A) && (toCheck[0] <= chLatin_Z))
+        ||  ((toCheck[0] >= chLatin_a) && (toCheck[0] <= chLatin_z)))
+        {
+            return false;
+        }
+    }
+
+    //
+    //  If it starts with a double slash, then it cannot be relative since
+    //  it's a remote file.
+    //
+    if (isBackSlash(toCheck[0]) && isBackSlash(toCheck[1]))
+        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
+// ---------------------------------------------------------------------------
+void XMLPlatformUtils::platformInit()
+{
+}
+
+void* XMLPlatformUtils::makeMutex()
+{
+	CRITICAL_SECTION* newCS = new CRITICAL_SECTION;
+	::InitializeCriticalSection(newCS);
+	return newCS;
+}
+
+void XMLPlatformUtils::closeMutex(void* const mtxHandle)
+{
+	::DeleteCriticalSection((LPCRITICAL_SECTION)mtxHandle);
+	delete (CRITICAL_SECTION*)mtxHandle;
+}
+
+void XMLPlatformUtils::lockMutex(void* const mtxHandle)
+{
+	::EnterCriticalSection((LPCRITICAL_SECTION)mtxHandle);
+}
+
+void XMLPlatformUtils::unlockMutex(void* const mtxHandle)
+{
+	::LeaveCriticalSection((LPCRITICAL_SECTION)mtxHandle);
+}
+
+void* XMLPlatformUtils::compareAndSwap (void**             toFill,
+                                        const void* const  newValue,
+                                        const void* const  toCompare)
+{
+#if defined WIN64
+	return ::InterlockedCompareExchangePointer(toFill, (void*)newValue, (void*)toCompare);
+#else
+
+	//
+	//  Note we have to cast off the constness of some of these because
+	//  the system APIs are not C++ aware in all cases.
+	//
+
+	return (void*) ::InterlockedCompareExchange((LPLONG)toFill, (LONG)newValue,
+			(LONG)toCompare);
+
+#endif
+}
+
+int XMLPlatformUtils::atomicIncrement(int &location)
+{
+    return ::InterlockedIncrement(&(long &)location);
+}
+
+int XMLPlatformUtils::atomicDecrement(int &location)
+{
+    return ::InterlockedDecrement(&(long &)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()
+{
+}
+
+#include <xercesc/util/LogicalPath.c>
+
+XERCES_CPP_NAMESPACE_END
+
diff --git a/src/xercesc/util/Platforms/Cygwin/Makefile.in b/src/xercesc/util/Platforms/Cygwin/Makefile.in
new file mode 100755
index 0000000000000000000000000000000000000000..3defee03d87815014df6d0f86ec776bb4b869df9
--- /dev/null
+++ b/src/xercesc/util/Platforms/Cygwin/Makefile.in
@@ -0,0 +1,89 @@
+#
+# The Apache Software License, Version 1.1
+#
+# Copyright (c) 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$
+# Revision 1.1  2004/02/17 15:56:50  neilg
+# fix for bug 25035; much thanks to Abe Backus
+#
+#:
+#
+
+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/Cygwin
+CXXFLAGS += -D_GNU_SOURCE -D__USE_GNU
+CPP_PUBHEADERS = CygwinDefs.hpp
+CPP_OBJECTS = CygwinPlatformUtils.$(TO)
+
+include ../../Makefile.util.submodule
diff --git a/src/xercesc/util/Platforms/Makefile.in b/src/xercesc/util/Platforms/Makefile.in
index ca469ccb2ebf354ff31cf5e0b766a218c77ed284..d84c5f2e17e55d28e5d0e18e33e5b5e4df7486da 100644
--- a/src/xercesc/util/Platforms/Makefile.in
+++ b/src/xercesc/util/Platforms/Makefile.in
@@ -55,6 +55,9 @@
 #
 #
 # $Log$
+# Revision 1.10  2004/02/17 15:56:50  neilg
+# fix for bug 25035; much thanks to Abe Backus
+#
 # Revision 1.9  2004/02/04 13:26:44  amassari
 # Added support for the Interix platform (Windows Services for Unix 3.5)
 #
@@ -206,7 +209,7 @@ ifeq (${PLATFORM}, MACOSX)
     SUBMODULE = MacOS
 endif
 ifeq (${PLATFORM}, CYGWIN)
-    SUBMODULE = Win32
+    SUBMODULE = Cygwin
 endif
 ifeq (${PLATFORM}, INTERIX)
     SUBMODULE = Interix
diff --git a/src/xercesc/util/XercesDefs.hpp b/src/xercesc/util/XercesDefs.hpp
index dd0a9e99ca1a10b818d56b6919a5916bb64b7250..6808bfa4a07a1dc4e2fe8a80e426b9ceb053fdfd 100644
--- a/src/xercesc/util/XercesDefs.hpp
+++ b/src/xercesc/util/XercesDefs.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.17  2004/02/17 15:56:50  neilg
+ * fix for bug 25035; much thanks to Abe Backus
+ *
  * Revision 1.16  2004/02/04 13:26:44  amassari
  * Added support for the Interix platform (Windows Services for Unix 3.5)
  *
@@ -246,6 +249,10 @@
 #include    <xercesc/util/Platforms/Win32/Win32Defs.hpp>
 #endif
 
+#if defined(XML_CYGWIN)
+#include    <xercesc/util/Platforms/Cygwin/CygwinDefs.hpp>
+#endif
+
 #if defined(XML_AIX)
 #include    <xercesc/util/Platforms/AIX/AIXDefs.hpp>
 #endif