Tell the user if a file is corrupt or not... not that the file cannot be
authorChris Lattner <sabre@nondot.org>
Sat, 8 Dec 2001 20:31:32 +0000 (20:31 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 8 Dec 2001 20:31:32 +0000 (20:31 +0000)
found.

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

tools/link/link.cpp
tools/llvm-link/llvm-link.cpp

index 9bf766fcaad66c3cbf388c36d2b4c81dcf509c06..83141c86e7d438edd3e0965b86390c361a9c5e8b 100644 (file)
@@ -18,6 +18,8 @@
 #include "Support/CommandLine.h"
 #include <fstream>
 #include <memory>
+#include <sys/types.h>     // For FileExists
+#include <sys/stat.h>
 
 
 cl::StringList InputFilenames("", "Load <arg> files, linking them together", 
@@ -28,14 +30,26 @@ cl::Flag   Verbose       ("v", "Print information about actions taken");
 cl::Flag   DumpAsm       ("d", "Print assembly as linked", cl::Hidden, false);
 cl::StringList LibPaths  ("L", "Specify a library search path", cl::ZeroOrMore);
 
+
+// FileExists - Return true if the specified string is an openable file...
+static inline bool FileExists(const string &FN) {
+  struct stat StatBuf;
+  return stat(FN.c_str(), &StatBuf) != -1;
+}
+
+// LoadFile - Read the specified bytecode file in and return it.  This routine
+// searches the link path for the specified file to try to find it...
+//
 static inline std::auto_ptr<Module> LoadFile(const string &FN) {
   string Filename = FN;
   string ErrorMessage;
 
   unsigned NextLibPathIdx = 0;
+  bool FoundAFile = false;
 
   while (1) {
     if (Verbose) cerr << "Loading '" << Filename << "'\n";
+    if (FileExists(Filename)) FoundAFile = true;
     Module *Result = ParseBytecodeFile(Filename, &ErrorMessage);
     if (Result) return std::auto_ptr<Module>(Result);   // Load successful!
 
@@ -49,10 +63,17 @@ static inline std::auto_ptr<Module> LoadFile(const string &FN) {
     Filename = LibPaths[NextLibPathIdx++] + "/" + FN;
   }
 
-  cerr << "Could not locate bytecode file: '" << FN << "'\n";
+  if (FoundAFile)
+    cerr << "Bytecode file '" << FN << "' corrupt!  "
+         << "Use 'link -v ...' for more info.\n";
+  else
+    cerr << "Could not locate bytecode file: '" << FN << "'\n";
   return std::auto_ptr<Module>();
 }
 
+
+
+
 int main(int argc, char **argv) {
   cl::ParseCommandLineOptions(argc, argv, " llvm linker\n",
                              cl::EnableSingleLetterArgValue |
index 9bf766fcaad66c3cbf388c36d2b4c81dcf509c06..83141c86e7d438edd3e0965b86390c361a9c5e8b 100644 (file)
@@ -18,6 +18,8 @@
 #include "Support/CommandLine.h"
 #include <fstream>
 #include <memory>
+#include <sys/types.h>     // For FileExists
+#include <sys/stat.h>
 
 
 cl::StringList InputFilenames("", "Load <arg> files, linking them together", 
@@ -28,14 +30,26 @@ cl::Flag   Verbose       ("v", "Print information about actions taken");
 cl::Flag   DumpAsm       ("d", "Print assembly as linked", cl::Hidden, false);
 cl::StringList LibPaths  ("L", "Specify a library search path", cl::ZeroOrMore);
 
+
+// FileExists - Return true if the specified string is an openable file...
+static inline bool FileExists(const string &FN) {
+  struct stat StatBuf;
+  return stat(FN.c_str(), &StatBuf) != -1;
+}
+
+// LoadFile - Read the specified bytecode file in and return it.  This routine
+// searches the link path for the specified file to try to find it...
+//
 static inline std::auto_ptr<Module> LoadFile(const string &FN) {
   string Filename = FN;
   string ErrorMessage;
 
   unsigned NextLibPathIdx = 0;
+  bool FoundAFile = false;
 
   while (1) {
     if (Verbose) cerr << "Loading '" << Filename << "'\n";
+    if (FileExists(Filename)) FoundAFile = true;
     Module *Result = ParseBytecodeFile(Filename, &ErrorMessage);
     if (Result) return std::auto_ptr<Module>(Result);   // Load successful!
 
@@ -49,10 +63,17 @@ static inline std::auto_ptr<Module> LoadFile(const string &FN) {
     Filename = LibPaths[NextLibPathIdx++] + "/" + FN;
   }
 
-  cerr << "Could not locate bytecode file: '" << FN << "'\n";
+  if (FoundAFile)
+    cerr << "Bytecode file '" << FN << "' corrupt!  "
+         << "Use 'link -v ...' for more info.\n";
+  else
+    cerr << "Could not locate bytecode file: '" << FN << "'\n";
   return std::auto_ptr<Module>();
 }
 
+
+
+
 int main(int argc, char **argv) {
   cl::ParseCommandLineOptions(argc, argv, " llvm linker\n",
                              cl::EnableSingleLetterArgValue |