summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2013-02-07 17:40:17 +0200
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2013-02-07 17:40:17 +0200
commit47b10ec0ab370475c51294707c0fe6e160046973 (patch)
treec3035169f58a463564dbb3d0bc286ecd83a09f6f
parent4b7ddabbcf2b4e272675edbd20fd64fe921c99cf (diff)
Sanitize filenames before putting them in #ifndef.
Update issue 50 Status: FixedInGit
-rw-r--r--generator/nanopb_generator.py12
-rw-r--r--tests/Makefile3
-rw-r--r--tests/funny-proto+name.proto0
3 files changed, 13 insertions, 2 deletions
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 9e85a11d..d35a4252 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 <pb.h>\n\n'
diff --git a/tests/Makefile b/tests/Makefile
index 38f10eae..7385fe35 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 00000000..e69de29b
--- /dev/null
+++ b/tests/funny-proto+name.proto