Commit a8921fe7 authored by Robert Edmonds's avatar Robert Edmonds Committed by GitHub

Merge pull request #267 from pbor/wip/zeroish

Rework is_zeroish one more time
parents 54640671 4ca344ed
...@@ -526,14 +526,44 @@ static protobuf_c_boolean ...@@ -526,14 +526,44 @@ static protobuf_c_boolean
field_is_zeroish(const ProtobufCFieldDescriptor *field, field_is_zeroish(const ProtobufCFieldDescriptor *field,
const void *member) const void *member)
{ {
if (field->type == PROTOBUF_C_TYPE_MESSAGE || protobuf_c_boolean ret = FALSE;
field->type == PROTOBUF_C_TYPE_STRING)
{ switch (field->type) {
const void *ptr = *(const void * const *) member; case PROTOBUF_C_TYPE_BOOL:
if (ptr == NULL) ret = (0 == *(const protobuf_c_boolean *) member);
return TRUE; break;
case PROTOBUF_C_TYPE_ENUM:
case PROTOBUF_C_TYPE_SINT32:
case PROTOBUF_C_TYPE_INT32:
case PROTOBUF_C_TYPE_UINT32:
case PROTOBUF_C_TYPE_SFIXED32:
case PROTOBUF_C_TYPE_FIXED32:
ret = (0 == *(const uint32_t *) member);
break;
case PROTOBUF_C_TYPE_SINT64:
case PROTOBUF_C_TYPE_INT64:
case PROTOBUF_C_TYPE_UINT64:
case PROTOBUF_C_TYPE_SFIXED64:
case PROTOBUF_C_TYPE_FIXED64:
ret = (0 == *(const uint64_t *) member);
break;
case PROTOBUF_C_TYPE_FLOAT:
ret = (0 == *(const float *) member);
break;
case PROTOBUF_C_TYPE_DOUBLE:
ret = (0 == *(const double *) member);
break;
case PROTOBUF_C_TYPE_STRING:
case PROTOBUF_C_TYPE_BYTES:
case PROTOBUF_C_TYPE_MESSAGE:
ret = (NULL == *(const void * const *) member);
break;
default:
ret = TRUE;
break;
} }
return member == NULL;
return ret;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment