summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2014-04-05 11:11:05 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2014-04-05 11:11:05 +0300
commite5b855fec5d2977971f96d817728c7a3ee8077b2 (patch)
tree33dbf33ea17c072d4db878ee043d2244f2ab638c
parent70dee34da6578ab76dbf00009357d679e154e04b (diff)
Add a 'found' field to pb_extension_t.
Update issue 112 Status: FixedInGit
-rw-r--r--pb.h4
-rw-r--r--pb_decode.c3
-rw-r--r--tests/extensions/decode_extensions.c2
-rw-r--r--tests/splint/splint.rc1
4 files changed, 8 insertions, 2 deletions
diff --git a/pb.h b/pb.h
index 6f843854..63d313dc 100644
--- a/pb.h
+++ b/pb.h
@@ -341,6 +341,10 @@ struct _pb_extension_t {
* If this extension does not match a field, the next handler is
* automatically called. */
pb_extension_t *next;
+
+ /* The decoder sets this to true if the extension was found.
+ * Ignored for encoding. */
+ bool found;
};
/* Memory allocation functions to use. You can define pb_realloc and
diff --git a/pb_decode.c b/pb_decode.c
index d8ac9ee2..9a48c60f 100644
--- a/pb_decode.c
+++ b/pb_decode.c
@@ -670,7 +670,6 @@ static bool checkreturn default_extension_decoder(pb_istream_t *stream,
{
const pb_field_t *field = (const pb_field_t*)extension->type->arg;
pb_field_iterator_t iter;
- bool dummy;
if (field->tag != tag)
return true;
@@ -681,7 +680,7 @@ static bool checkreturn default_extension_decoder(pb_istream_t *stream,
iter.required_field_index = 0;
iter.dest_struct = extension->dest;
iter.pData = extension->dest;
- iter.pSize = &dummy;
+ iter.pSize = &extension->found;
return decode_field(stream, wire_type, &iter);
}
diff --git a/tests/extensions/decode_extensions.c b/tests/extensions/decode_extensions.c
index f8ebbde0..e4374380 100644
--- a/tests/extensions/decode_extensions.c
+++ b/tests/extensions/decode_extensions.c
@@ -49,7 +49,9 @@ int main(int argc, char **argv)
}
/* Check that the extensions decoded properly */
+ TEST(ext1.found)
TEST(extensionfield1 == 12345)
+ TEST(ext2.found)
TEST(strcmp(extensionfield2.test1, "test") == 0)
TEST(extensionfield2.test2 == 54321)
diff --git a/tests/splint/splint.rc b/tests/splint/splint.rc
index c77e210f..421f5677 100644
--- a/tests/splint/splint.rc
+++ b/tests/splint/splint.rc
@@ -27,6 +27,7 @@
-dependenttrans
-kepttrans
-branchstate
+-immediatetrans
# These tests give false positives, compiler typically has
# better warnings for these.