summaryrefslogtreecommitdiff
path: root/upb/encode.c
diff options
context:
space:
mode:
authorJosh Haberman <jhaberman@gmail.com>2018-09-06 23:16:58 -0700
committerJosh Haberman <jhaberman@gmail.com>2018-09-06 23:16:58 -0700
commita105c015b106b6be31fc45fdd4c568684815801c (patch)
treebbb66457418d6fd20b585bf23b5f2d61ac46a1bc /upb/encode.c
parentea19fa4ed6af171a787990270871e9dc0fd809f0 (diff)
Added support for unknown fields to upb_msg.
After this CL, upb passes all existing proto3 conformance tests. However the conformance suite is missing a lot of cases and should be fleshed out.
Diffstat (limited to 'upb/encode.c')
-rw-r--r--upb/encode.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/upb/encode.c b/upb/encode.c
index a9f2c0d..bff8262 100644
--- a/upb/encode.c
+++ b/upb/encode.c
@@ -331,6 +331,8 @@ bool upb_encode_message(upb_encstate *e, const char *msg,
const upb_msglayout *m, size_t *size) {
int i;
size_t pre_len = e->limit - e->ptr;
+ const char *unknown;
+ size_t unknown_size;
for (i = m->field_count - 1; i >= 0; i--) {
const upb_msglayout_field *f = &m->fields[i];
@@ -357,6 +359,12 @@ bool upb_encode_message(upb_encstate *e, const char *msg,
}
}
+ unknown = upb_msg_getunknown(msg, &unknown_size);
+
+ if (unknown) {
+ upb_put_bytes(e, unknown, unknown_size);
+ }
+
*size = (e->limit - e->ptr) - pre_len;
return true;
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback