summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-08-19 23:49:04 -0400
committerRusty Wagner <rusty@vector35.com>2015-08-19 23:49:04 -0400
commit00369dcd62ea48a9174a6923498f4375968a94c3 (patch)
treeef31b9f4e92d252bf23d8d687ba4f43dc2eb3378
parent59f9b193ac9da6c861965be153eb8c788388089a (diff)
Add C preprocessor in preparation for type parsing
-rw-r--r--binaryninjaapi.h4
-rw-r--r--type.cpp23
2 files changed, 27 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index be801a3c..a2779e70 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -158,6 +158,10 @@ namespace BinaryNinja
std::string EscapeString(const std::string& s);
std::string UnescapeString(const std::string& s);
+ bool PreprocessSource(const std::string& source, const std::string& fileName,
+ std::string& output, std::string& errors,
+ const std::vector<std::string>& includeDirs = std::vector<std::string>());
+
class DataBuffer
{
BNDataBuffer* m_buffer;
diff --git a/type.cpp b/type.cpp
index 62176deb..1a0bec58 100644
--- a/type.cpp
+++ b/type.cpp
@@ -355,3 +355,26 @@ void Enumeration::AddMemberWithValue(const string& name, uint64_t value)
{
BNAddEnumerationMemberWithValue(m_enum, name.c_str(), value);
}
+
+
+bool BinaryNinja::PreprocessSource(const string& source, const string& fileName, string& output, string& errors,
+ const vector<string>& includeDirs)
+{
+ char* outStr;
+ char* errorStr;
+ const char** includeDirList = new const char*[includeDirs.size()];
+
+ for (size_t i = 0; i < includeDirs.size(); i++)
+ includeDirList[i] = includeDirs[i].c_str();
+
+ bool result = BNPreprocessSource(source.c_str(), fileName.c_str(), &outStr, &errorStr,
+ includeDirList, includeDirs.size());
+
+ output = outStr;
+ errors = errorStr;
+
+ BNFreeString(outStr);
+ BNFreeString(errorStr);
+ delete[] includeDirList;
+ return result;
+}