summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Haberman <jhaberman@gmail.com>2017-07-19 00:33:30 +0200
committerJoshua Haberman <jhaberman@gmail.com>2017-07-19 00:33:30 +0200
commit6b8767422154008eed98d0df42e36758d38877a4 (patch)
tree9d85accf308d50f20df0e12f39c07aa38b9d0a6e
parent806ffc1d2053f1c02167c7965b39abc997d12ad6 (diff)
Address review comments and fix compile warnings.
-rw-r--r--tests/conformance_upb.c2
-rw-r--r--upb/decode.c2
-rw-r--r--upb/encode.c10
3 files changed, 8 insertions, 6 deletions
diff --git a/tests/conformance_upb.c b/tests/conformance_upb.c
index 2ef8c6d..70ea300 100644
--- a/tests/conformance_upb.c
+++ b/tests/conformance_upb.c
@@ -33,7 +33,7 @@ bool CheckedRead(int fd, void *buf, size_t len) {
}
void CheckedWrite(int fd, const void *buf, size_t len) {
- if (write(fd, buf, len) != len) {
+ if ((size_t)write(fd, buf, len) != len) {
perror("writing to test runner");
exit(1);
}
diff --git a/upb/decode.c b/upb/decode.c
index b09da42..cba9f61 100644
--- a/upb/decode.c
+++ b/upb/decode.c
@@ -385,7 +385,7 @@ static bool upb_decode_fixedpacked(upb_array *arr, upb_stringview data,
int elements = data.size / elem_size;
void *field_mem;
- CHK(elements * elem_size == data.size);
+ CHK((size_t)(elements * elem_size) == data.size);
field_mem = upb_array_add(arr, elements);
CHK(field_mem);
memcpy(field_mem, data.data, data.size);
diff --git a/upb/encode.c b/upb/encode.c
index e7585eb..cb72bf9 100644
--- a/upb/encode.c
+++ b/upb/encode.c
@@ -256,9 +256,11 @@ static bool upb_encode_scalarfield(upb_encstate *e, const char *field_mem,
const upb_msglayout_msginit_v1 *m,
const upb_msglayout_fieldinit_v1 *f,
bool is_proto3) {
+ bool skip_zero_value = is_proto3 && f->oneof_index == UPB_NOT_IN_ONEOF;
+
#define CASE(ctype, type, wire_type, encodeval) do { \
ctype val = *(ctype*)field_mem; \
- if (is_proto3 && f->oneof_index == UPB_NOT_IN_ONEOF && val == 0) { \
+ if (skip_zero_value && val == 0) { \
return true; \
} \
return upb_put_ ## type(e, encodeval) && \
@@ -292,7 +294,7 @@ static bool upb_encode_scalarfield(upb_encstate *e, const char *field_mem,
case UPB_DESCRIPTOR_TYPE_STRING:
case UPB_DESCRIPTOR_TYPE_BYTES: {
upb_stringview view = *(upb_stringview*)field_mem;
- if (is_proto3 && f->oneof_index == UPB_NOT_IN_ONEOF && view.size == 0) {
+ if (skip_zero_value && view.size == 0) {
return true;
}
return upb_put_bytes(e, view.data, view.size) &&
@@ -303,7 +305,7 @@ static bool upb_encode_scalarfield(upb_encstate *e, const char *field_mem,
size_t size;
void *submsg = *(void**)field_mem;
const upb_msglayout_msginit_v1 *subm = m->submsgs[f->submsg_index];
- if (is_proto3 && f->oneof_index == UPB_NOT_IN_ONEOF && submsg == NULL) {
+ if (skip_zero_value && submsg == NULL) {
return true;
}
return upb_put_tag(e, f->number, UPB_WIRE_TYPE_END_GROUP) &&
@@ -314,7 +316,7 @@ static bool upb_encode_scalarfield(upb_encstate *e, const char *field_mem,
size_t size;
void *submsg = *(void**)field_mem;
const upb_msglayout_msginit_v1 *subm = m->submsgs[f->submsg_index];
- if (is_proto3 && f->oneof_index == UPB_NOT_IN_ONEOF && submsg == NULL) {
+ if (skip_zero_value && submsg == NULL) {
return true;
}
return upb_encode_message(e, submsg, subm, &size) &&
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback