Two changes:
authorReid Spencer <rspencer@reidspencer.com>
Fri, 8 Jul 2005 06:53:26 +0000 (06:53 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Fri, 8 Jul 2005 06:53:26 +0000 (06:53 +0000)
1. Use isValid() to check validity of the resulting path name in the
   eraseSuffix even though we can't think of a case where eraseSuffix could
   possibly cause an invalid path name.
2. Rewrite isValid() to not use the deprecated realpath function any more.
   It now just uses isascii to make sure all the characters are legit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22359 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Unix/Path.inc

index 400318b0eb972dfc1e909ed5ad7984f527dd9aa0..ffa1d174fd8ac94da4d7e0e8924889d75e93b7a0 100644 (file)
@@ -68,17 +68,18 @@ Path::Path(const std::string& unverified_path) : path(unverified_path) {
 
 bool 
 Path::isValid() const {
+  // Check some obvious things
   if (path.empty()) 
     return false;
   else if (path.length() >= MAXPATHLEN)
     return false;
-#if defined(HAVE_REALPATH)
-  char pathname[MAXPATHLEN];
-  if (0 == realpath(path.c_str(), pathname))
-    if (errno != EACCES && errno != EIO && errno != ENOENT && errno != ENOTDIR)
-      return false;
-#endif
-  return true;
+
+  // Check that the characters are ascii chars
+  size_t len = path.length();
+  unsigned i = 0;
+  while (i < len && isascii(path[i])) 
+    ++i;
+  return i >= len; 
 }
 
 Path
@@ -504,6 +505,7 @@ Path::appendSuffix(const std::string& suffix) {
 
 bool
 Path::eraseSuffix() {
+  std::string save = path;
   size_t dotpos = path.rfind('.',path.size());
   size_t slashpos = path.rfind('/',path.size());
   if (dotpos != std::string::npos) {
@@ -512,6 +514,8 @@ Path::eraseSuffix() {
       return true;
     }
   }
+  if (!isValid())
+    path = save;
   return false;
 }