[llvm-commits] CVS: llvm/lib/System/Unix/Path.cpp

Reid Spencer reid at x10sys.com
Sun Dec 12 19:01:01 PST 2004



Changes in directory llvm/lib/System/Unix:

Path.cpp updated: 1.16 -> 1.17
---
Log message:

For PR351: http://llvm.cs.uiuc.edu/PR351 : \
* Remove IsLibrary and GetLibraryPath, replaced by FindLibrary in ../Path.cpp \
* Implement GetSystemLibraryPaths and GetBytecodeLibraryPaths, instead of the \
  GetSystemLibraryPath1 and GetSystemLibraryPath2 methods

---
Diffs of the changes:  (+55 -68)

Index: llvm/lib/System/Unix/Path.cpp
diff -u llvm/lib/System/Unix/Path.cpp:1.16 llvm/lib/System/Unix/Path.cpp:1.17
--- llvm/lib/System/Unix/Path.cpp:1.16	Fri Dec 10 18:14:15 2004
+++ llvm/lib/System/Unix/Path.cpp	Sun Dec 12 21:00:51 2004
@@ -46,67 +46,61 @@
   return result;
 }
 
-static inline bool IsLibrary(Path& path, const std::string& basename) {
-  if (path.appendFile(std::string("lib") + basename)) {
-    if (path.appendSuffix(Path::GetDLLSuffix()) && path.readable())
-      return true;
-    else if (path.elideSuffix() && path.appendSuffix("a") && path.readable())
-      return true;
-    else if (path.elideSuffix() && path.appendSuffix("o") && path.readable())
-      return true;
-    else if (path.elideSuffix() && path.appendSuffix("bc") && path.readable())
-      return true;
-  } else if (path.elideFile() && path.appendFile(basename)) {
-    if (path.appendSuffix(Path::GetDLLSuffix()) && path.readable())
-      return true;
-    else if (path.elideSuffix() && path.appendSuffix("a") && path.readable())
-      return true;
-    else if (path.elideSuffix() && path.appendSuffix("o") && path.readable())
-      return true;
-    else if (path.elideSuffix() && path.appendSuffix("bc") && path.readable())
-      return true;
-  }
-  path.clear();
-  return false;
+static void getPathList(const char*path, std::vector<sys::Path>& Paths) {
+  const char* at = path;
+  const char* delim = strchr(at, ':');
+  Path tmpPath;
+  while( delim != 0 ) {
+    std::string tmp(at, size_t(delim-at));
+    if (tmpPath.setDirectory(tmp))
+      if (tmpPath.readable())
+        Paths.push_back(tmpPath);
+    at = delim + 1;
+    delim = strchr(at, ':');
+  }
+  if (*at != 0)
+    if (tmpPath.setDirectory(std::string(at)))
+      if (tmpPath.readable())
+        Paths.push_back(tmpPath);
+
+}
+void 
+Path::GetSystemLibraryPaths(std::vector<sys::Path>& Paths) {
+#ifdef LTDL_SHLIBPATH_VAR
+  char* env_var = getenv(LTDL_SHLIBPATH_VAR);
+  if (env_var != 0) {
+    getPathList(env_var,Paths);
+  }
+#endif
+  // FIXME: Should this look at LD_LIBRARY_PATH too?
+  Paths.push_back(sys::Path("/usr/local/lib/"));
+  Paths.push_back(sys::Path("/usr/X11R6/lib/"));
+  Paths.push_back(sys::Path("/usr/lib/"));
+  Paths.push_back(sys::Path("/lib/"));
 }
 
-Path 
-Path::GetLibraryPath(const std::string& basename, 
-                     const std::vector<std::string>& LibPaths) {
-  Path result;
-
-  // Try the paths provided
-  for (std::vector<std::string>::const_iterator I = LibPaths.begin(),
-       E = LibPaths.end(); I != E; ++I ) {
-    if (result.setDirectory(*I) && IsLibrary(result,basename))
-      return result;
+void
+Path::GetBytecodeLibraryPaths(std::vector<sys::Path>& Paths) {
+  char * env_var = getenv("LLVM_LIB_SEARCH_PATH");
+  if (env_var != 0) {
+    getPathList(env_var,Paths);
+  }
+#ifdef LLVMGCCDIR
+  {
+    Path tmpPath(std::string(LLVMGCCDIR) + "bytecode-libs/");
+    if (tmpPath.readable())
+      Paths.push_back(tmpPath);
+  }
+#endif
+#ifdef LLVM_LIBDIR
+  {
+    Path tmpPath;
+    if (tmpPath.setDirectory(LLVM_LIBDIR))
+      if (tmpPath.readable())
+        Paths.push_back(tmpPath);
   }
-
-  // Try the LLVM lib directory in the LLVM install area
-  if (result.setDirectory(LLVM_LIBDIR) && IsLibrary(result,basename))
-    return result;
-
-  // Try /usr/lib
-  if (result.setDirectory("/usr/lib/") && IsLibrary(result,basename))
-    return result;
-
-  // Try /lib
-  if (result.setDirectory("/lib/") && IsLibrary(result,basename))
-    return result;
-
-  // Can't find it, give up and return invalid path.
-  result.clear();
-  return result;
-}
-
-Path 
-Path::GetSystemLibraryPath1() {
-  return Path("/lib/");
-}
-
-Path 
-Path::GetSystemLibraryPath2() {
-  return Path("/usr/lib/");
+#endif
+  GetSystemLibraryPaths(Paths);
 }
 
 Path 
@@ -162,9 +156,10 @@
   int fd = ::open(path.c_str(),O_RDONLY);
   if (fd < 0)
     return false;
-  if (0 != ::read(fd, buf, len))
-    return false;
+  size_t read_len = ::read(fd, buf, len);
   close(fd);
+  if (len != read_len)
+    return false;
   buf[len] = '\0';
   return Magic == buf;
 }
@@ -204,14 +199,6 @@
 }
 
 bool
-Path::isArchive() const {
-  if (readable()) {
-    return hasMagicNumber("!<arch>\012");
-  }
-  return false;
-}
-
-bool
 Path::exists() const {
   return 0 == access(path.c_str(), F_OK );
 }






More information about the llvm-commits mailing list