diff options
-rw-r--r-- | Source/bindexplib.cxx | 30 | ||||
-rw-r--r-- | Source/bindexplib.h | 1 |
2 files changed, 30 insertions, 1 deletions
diff --git a/Source/bindexplib.cxx b/Source/bindexplib.cxx index 7d61ea6..47c7565 100644 --- a/Source/bindexplib.cxx +++ b/Source/bindexplib.cxx @@ -64,7 +64,7 @@ #include "bindexplib.h" #include <cmsys/Encoding.hxx> -#include <fstream> +#include <cmsys/FStream.hxx> #include <iostream> #include <windows.h> @@ -429,6 +429,34 @@ bool bindexplib::AddObjectFile(const char* filename) return DumpFile(filename, this->Symbols, this->DataSymbols); } +bool bindexplib::AddDefinitionFile(const char* filename) +{ + cmsys::ifstream infile(filename); + if (!infile) { + fprintf(stderr, "Couldn't open definition file '%s'\n", filename); + return false; + } + std::string str; + while (std::getline(infile, str)) { + // skip the LIBRAY and EXPORTS lines (if any) + if ((str.compare(0,7,"LIBRARY") == 0) || + (str.compare(0,7,"EXPORTS") == 0)) { + continue; + } + // remove leading tabs & spaces + str.erase(0, str.find_first_not_of(" \t")); + std::size_t found = str.find(" \t DATA"); + if (found != std::string::npos) { + str.erase (found, std::string::npos); + this->DataSymbols.insert(str); + } else { + this->Symbols.insert(str); + } + } + infile.close(); + return true; +} + void bindexplib::WriteFile(FILE* file) { fprintf(file,"EXPORTS \n"); diff --git a/Source/bindexplib.h b/Source/bindexplib.h index d6900ba..7f0615f 100644 --- a/Source/bindexplib.h +++ b/Source/bindexplib.h @@ -13,6 +13,7 @@ class bindexplib { public: bindexplib() {} + bool AddDefinitionFile(const char* filename); bool AddObjectFile(const char* filename); void WriteFile(FILE* file); private: |