diff options
Diffstat (limited to 'src/processor/simple_symbol_supplier.cc')
-rw-r--r-- | src/processor/simple_symbol_supplier.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/processor/simple_symbol_supplier.cc b/src/processor/simple_symbol_supplier.cc index fb16818d..3cbd59a3 100644 --- a/src/processor/simple_symbol_supplier.cc +++ b/src/processor/simple_symbol_supplier.cc @@ -33,6 +33,9 @@ // // Author: Mark Mentovai +#include <sys/types.h> +#include <sys/stat.h> + #include <cassert> #include "processor/simple_symbol_supplier.h" @@ -42,6 +45,25 @@ namespace google_airbag { +static bool file_exists(const string &file_name) { + struct stat sb; + return stat(file_name.c_str(), &sb) == 0; +} + +SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFile( + const CodeModule *module, const SystemInfo *system_info, + string *symbol_file) { + assert(symbol_file); + for (unsigned int path_index = 0; path_index < paths_.size(); ++path_index) { + SymbolResult result; + if ((result = GetSymbolFileAtPath(module, system_info, paths_[path_index], + symbol_file)) != NOT_FOUND) { + return result; + } + } + return NOT_FOUND; +} + SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFileAtPath( const CodeModule *module, const SystemInfo *system_info, const string &root_path, string *symbol_file) { @@ -81,6 +103,9 @@ SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFileAtPath( } path.append(".sym"); + if (!file_exists(path)) + return NOT_FOUND; + *symbol_file = path; return FOUND; } |