diff --git a/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp b/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
index f53bfe8e9cc7e241a80e3268987e6ffdf080af77..e81604baa700004e6dab38dc30704bf61a177a80 100644
--- a/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
@@ -322,7 +322,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     //get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -354,10 +354,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp b/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
index c04c143a910eb0dd53a847d5039feb41d351885b..bd56f6d6ef9f9f606862f9d35b160a18a746a2a8 100644
--- a/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.6  2003/04/25 17:18:53  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.5  2003/04/24 02:52:34  peiyongz
  * Logical Path Resolution
  *
@@ -378,7 +381,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     // get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -409,10 +412,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp b/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
index c1ac18c97668453eb5445c63e34cc713879a9033..d4a454a867c20650eb7f73227c6351f3e60994c4 100644
--- a/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.12  2003/04/25 17:19:10  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.11  2003/04/24 02:53:29  peiyongz
  * Logical Path Resolution
  *
@@ -414,7 +417,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     // get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -445,10 +448,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp b/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
index b06d4b38b27a8a1227c10f525bfa3d66c08cceca..7e5b703b78075c3251797dec9f892a5fee3164ef 100644
--- a/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.12  2003/04/25 17:19:26  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.11  2003/04/24 02:53:52  peiyongz
  * Logical Path Resolution
  *
@@ -459,7 +462,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     //get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -491,10 +494,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp b/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
index 325ef34ec255c75fcb074ada9cc096226f097ae2..24b92aebd991f90774f8d0fdb251c7c2890b66c7 100644
--- a/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.11  2003/04/25 17:19:40  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.10  2003/04/24 02:54:24  peiyongz
  * Logical Path Resolution
  *
@@ -431,7 +434,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     // get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -462,10 +465,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp b/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
index f3a4d48bbcca884013e1dbf49e5883ee11aa1ecd..119c12c6c683e8d309577da50dffeb89225b31c2 100644
--- a/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.15  2003/04/25 17:19:53  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.14  2003/04/24 02:54:46  peiyongz
  * Logical Path Resolution
  *
@@ -474,7 +477,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     // get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -505,10 +508,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp b/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
index 043a10315dccf2378d8bae19cd38ffd5182b0edb..6dc79280cc1b32897375806373153c650247f8a5 100644
--- a/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
@@ -396,7 +396,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     char* newSrc = XMLString::transcode(srcPath);
      ArrayJanitor<char> janText(newSrc);
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
 	//get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);	
 	
@@ -428,10 +428,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp b/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
index 3e06d65c5036249052319d04494071f6d2648599..db6a21482acc6fe10fec03cbe1f18187ea9efea8 100644
--- a/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.7  2003/04/25 17:20:11  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.6  2003/04/24 02:55:58  peiyongz
  * Logical Path Resolution
  *
@@ -386,10 +389,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp b/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
index 64a30dd47bee613a69831719c0ad3f90a4f2f491..583307f2dd17975c40ffaf84b242bc06153bd19f 100644
--- a/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
@@ -227,7 +227,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //
     char* newSrc = XMLString::transcode(srcPath);
     ArrayJanitor<char> janText(newSrc);
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
 
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -248,10 +248,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp b/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
index fd777065416dbb7751c4e10919de940d79c7e223..a56cb3a4af467b9bebc12172f79bc26277feb34c 100644
--- a/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
@@ -344,7 +344,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     //get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -375,10 +375,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp b/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
index 99ea0fb52a4a9bcebb5cba3b535690fde0da8a41..065ce4719bb731df042ebe181129fd52b616cce7 100644
--- a/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
@@ -343,7 +343,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
   ArrayJanitor<char> janText(newSrc);
 
   // Use a local buffer that is big enough for the largest legal path
-  char absPath[PATH_MAX];
+  char absPath[PATH_MAX + 1];
   //get the absolute path
   char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -375,10 +375,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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) 
diff --git a/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp b/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
index 609e13aa519bc1ea45e3f3ab32053b8c208c4261..92c3fd453d794ab9cb3b742368dc474eaec0dbd4 100644
--- a/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.9  2003/04/25 17:21:31  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.8  2003/04/24 02:59:20  peiyongz
  * Logical Path Resolution
  *
@@ -405,7 +408,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     //get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -437,10 +440,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    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)