From f57d012a2171f51a1aceb03d735d1f0e3cf2e035 Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen Date: Fri, 5 Sep 2014 11:19:51 -0700 Subject: [PATCH] Non-alpha-numeric characters are filtered out of include guards Since part of it is based on the filename, which may contain characters that are not legal identifiers. Change-Id: I62b8fe228a434a2040fd4ce47d220fc4d3398b41 Tested: on Linux. --- src/idl_gen_cpp.cpp | 10 +++++++++- tests/monster_test_generated.h | 6 +++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index ba07194..4aa731e 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -459,7 +459,7 @@ void CloseNestedNameSpaces(Namespace *ns, std::string *code_ptr) { // Iterate through all definitions we haven't generate code for (enums, structs, // and tables) and output them to a single file. std::string GenerateCPP(const Parser &parser, - const std::string &include_guard_ident, + const std::string &file_name, const GeneratorOptions &opts) { using namespace cpp; @@ -522,8 +522,16 @@ std::string GenerateCPP(const Parser &parser, " do not modify\n\n"; // Generate include guard. + std::string include_guard_ident = file_name; + // Remove any non-alpha-numeric characters that may appear in a filename. + include_guard_ident.erase( + std::remove_if(include_guard_ident.begin(), + include_guard_ident.end(), + [](char c) { return !isalnum(c); }), + include_guard_ident.end()); std::string include_guard = "FLATBUFFERS_GENERATED_" + include_guard_ident; include_guard += "_"; + // For further uniqueness, also add the namespace. auto name_space = parser.namespaces_.back(); for (auto it = name_space->components.begin(); it != name_space->components.end(); ++it) { diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index a3e138b..5063072 100755 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -1,7 +1,7 @@ // automatically generated by the FlatBuffers compiler, do not modify -#ifndef FLATBUFFERS_GENERATED_MONSTER_TEST_MYGAME_EXAMPLE_H_ -#define FLATBUFFERS_GENERATED_MONSTER_TEST_MYGAME_EXAMPLE_H_ +#ifndef FLATBUFFERS_GENERATED_MONSTERTEST_MYGAME_EXAMPLE_H_ +#define FLATBUFFERS_GENERATED_MONSTERTEST_MYGAME_EXAMPLE_H_ #include "flatbuffers/flatbuffers.h" @@ -207,4 +207,4 @@ inline bool MonsterBufferHasIdentifier(const void *buf) { return flatbuffers::Bu } // namespace Example } // namespace MyGame -#endif // FLATBUFFERS_GENERATED_MONSTER_TEST_MYGAME_EXAMPLE_H_ +#endif // FLATBUFFERS_GENERATED_MONSTERTEST_MYGAME_EXAMPLE_H_ -- 2.7.4