From 952d365a3a446ebfbf14a8db27e26c5c2abec651 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 8 Dec 2001 20:31:32 +0000 Subject: [PATCH] Tell the user if a file is corrupt or not... not that the file cannot be found. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1433 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/link/link.cpp | 23 ++++++++++++++++++++++- tools/llvm-link/llvm-link.cpp | 23 ++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/tools/link/link.cpp b/tools/link/link.cpp index 9bf766fcaad..83141c86e7d 100644 --- a/tools/link/link.cpp +++ b/tools/link/link.cpp @@ -18,6 +18,8 @@ #include "Support/CommandLine.h" #include #include +#include // For FileExists +#include cl::StringList InputFilenames("", "Load 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 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(Result); // Load successful! @@ -49,10 +63,17 @@ static inline std::auto_ptr 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(); } + + + int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv, " llvm linker\n", cl::EnableSingleLetterArgValue | diff --git a/tools/llvm-link/llvm-link.cpp b/tools/llvm-link/llvm-link.cpp index 9bf766fcaad..83141c86e7d 100644 --- a/tools/llvm-link/llvm-link.cpp +++ b/tools/llvm-link/llvm-link.cpp @@ -18,6 +18,8 @@ #include "Support/CommandLine.h" #include #include +#include // For FileExists +#include cl::StringList InputFilenames("", "Load 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 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(Result); // Load successful! @@ -49,10 +63,17 @@ static inline std::auto_ptr 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(); } + + + int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv, " llvm linker\n", cl::EnableSingleLetterArgValue | -- 2.34.1