diff options
author | Petteri Aimonen <jpa@git.mail.kapsi.fi> | 2017-02-20 15:47:44 +0200 |
---|---|---|
committer | Petteri Aimonen <jpa@git.mail.kapsi.fi> | 2017-02-20 15:47:44 +0200 |
commit | ca74746e23b5a9e7916e8fde6632d71d61603f50 (patch) | |
tree | 7f52b0d716c54f55532c90aa931d8305b1a88ba9 | |
parent | 473816c66b559be6850fc1ef753a7141d1848300 (diff) |
Add new option max_length for strings (issue #107)
Max_size is the allocated size, so users had to add +1 for
the null terminator. Max_length does the +1 automatically
in the generator.
-rwxr-xr-x | generator/nanopb_generator.py | 4 | ||||
-rw-r--r-- | generator/proto/nanopb.proto | 5 | ||||
-rw-r--r-- | tests/options/options.expected | 1 | ||||
-rw-r--r-- | tests/options/options.proto | 1 |
4 files changed, 11 insertions, 0 deletions
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py index 6e5ebaf9..ca60c03a 100755 --- a/generator/nanopb_generator.py +++ b/generator/nanopb_generator.py @@ -270,6 +270,10 @@ class Field: # Parse field options if field_options.HasField("max_size"): self.max_size = field_options.max_size + + if desc.type == FieldD.TYPE_STRING and field_options.HasField("max_length"): + # max_length overrides max_size for strings + self.max_size = field_options.max_length + 1 if field_options.HasField("max_count"): self.max_count = field_options.max_count diff --git a/generator/proto/nanopb.proto b/generator/proto/nanopb.proto index f6fe4a20..7d39e1c3 100644 --- a/generator/proto/nanopb.proto +++ b/generator/proto/nanopb.proto @@ -32,8 +32,13 @@ enum IntSize { // fields. message NanoPBOptions { // Allocated size for 'bytes' and 'string' fields. + // For string fields, this should include the space for null terminator. optional int32 max_size = 1; + // Maximum length for 'string' fields. Setting this is equivalent + // to setting max_size to a value of length+1. + optional int32 max_length = 14; + // Allocated number of entries in arrays ('repeated' fields) optional int32 max_count = 2; diff --git a/tests/options/options.expected b/tests/options/options.expected index 0769880a..9e47e6a4 100644 --- a/tests/options/options.expected +++ b/tests/options/options.expected @@ -1,6 +1,7 @@ char filesize\[20\]; char msgsize\[30\]; char fieldsize\[40\]; +char fieldlen\[41\]; pb_callback_t int32_callback; \sEnumValue1 = 1 Message5_EnumValue1 diff --git a/tests/options/options.proto b/tests/options/options.proto index 89bb086f..c6ca5e25 100644 --- a/tests/options/options.proto +++ b/tests/options/options.proto @@ -26,6 +26,7 @@ message Message3 { option (nanopb_msgopt).msgid = 103; required string fieldsize = 1 [(nanopb).max_size = 40]; + required string fieldlen = 2 [(nanopb).max_length = 40]; } // Forced callback field |