From 47b10ec0ab370475c51294707c0fe6e160046973 Mon Sep 17 00:00:00 2001 From: Petteri Aimonen Date: Thu, 7 Feb 2013 17:40:17 +0200 Subject: Sanitize filenames before putting them in #ifndef. Update issue 50 Status: FixedInGit --- generator/nanopb_generator.py | 12 +++++++++++- tests/Makefile | 3 ++- tests/funny-proto+name.proto | 0 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 tests/funny-proto+name.proto diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py index 9e85a11..d35a425 100644 --- a/generator/nanopb_generator.py +++ b/generator/nanopb_generator.py @@ -452,6 +452,16 @@ def sort_dependencies(messages): if msgname in message_by_name: yield message_by_name[msgname] +def make_identifier(headername): + '''Make #ifndef identifier that contains uppercase A-Z and digits 0-9''' + result = "" + for c in headername.upper(): + if c.isalnum(): + result += c + else: + result += '_' + return result + def generate_header(dependencies, headername, enums, messages): '''Generate content for a header file. Generates strings, which should be concatenated and stored to file. @@ -460,7 +470,7 @@ def generate_header(dependencies, headername, enums, messages): yield '/* Automatically generated nanopb header */\n' yield '/* Generated by %s at %s. */\n\n' % (nanopb_version, time.asctime()) - symbol = headername.replace('.', '_').upper() + symbol = make_identifier(headername) yield '#ifndef _PB_%s_\n' % symbol yield '#define _PB_%s_\n' % symbol yield '#include \n\n' diff --git a/tests/Makefile b/tests/Makefile index 38f10ea..7385fe3 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -6,7 +6,7 @@ TESTS= decode_unittests encode_unittests \ test_decode1 test_decode2 test_decode3 test_decode3_buf \ test_encode1 test_encode2 test_encode3 test_encode3_buf \ test_decode_callbacks test_encode_callbacks \ - test_missing_fields test_no_messages \ + test_missing_fields test_no_messages test_funny_name \ test_multiple_files test_cxxcompile test_options \ bc_encode bc_decode @@ -73,6 +73,7 @@ test_missing_fields: test_missing_fields.o pb_encode.o pb_decode.o missing_field decode_unittests: decode_unittests.o pb_decode.o unittestproto.pb.o encode_unittests: encode_unittests.o pb_encode.o unittestproto.pb.o test_no_messages: no_messages.pb.h no_messages.pb.c no_messages.pb.o +test_funny_name: funny-proto+name.pb.h funny-proto+name.pb.o bc_encode: bc_alltypes.pb.o pb_encode.o bc_encode.o bc_decode: bc_alltypes.pb.o pb_decode.o bc_decode.o diff --git a/tests/funny-proto+name.proto b/tests/funny-proto+name.proto new file mode 100644 index 0000000..e69de29 -- cgit