[CRIU] Re: [PATCH] protobuf: add helper function to calculate field
size
Pavel Emelyanov
xemul at parallels.com
Tue Jul 31 06:08:26 EDT 2012
On 07/27/2012 05:53 PM, Kinsbursky Stanislav wrote:
> Signed-off-by: Stanislav Kinsbursky <skinsbursky at openvz.org>
What's the point in having 2 switch()-es instead of 1?
> ---
> protobuf.c | 35 ++++++++++++++++++++++++++++++-----
> 1 files changed, 30 insertions(+), 5 deletions(-)
>
> diff --git a/protobuf.c b/protobuf.c
> index f5b5bd4..5970494 100644
> --- a/protobuf.c
> +++ b/protobuf.c
> @@ -97,12 +97,41 @@ static void show_enum(void *msg, pb_pr_ctl_t *ctl)
> pr_msg("%d", val);
> }
>
> +static size_t get_field_size(int type)
> +{
> + switch (type) {
> + case PROTOBUF_C_TYPE_INT32:
> + case PROTOBUF_C_TYPE_SINT32:
> + case PROTOBUF_C_TYPE_UINT32:
> + case PROTOBUF_C_TYPE_SFIXED32:
> + case PROTOBUF_C_TYPE_ENUM:
> + case PROTOBUF_C_TYPE_FLOAT:
> + return 4;
> + case PROTOBUF_C_TYPE_INT64:
> + case PROTOBUF_C_TYPE_SINT64:
> + case PROTOBUF_C_TYPE_SFIXED64:
> + case PROTOBUF_C_TYPE_FIXED32:
> + case PROTOBUF_C_TYPE_UINT64:
> + case PROTOBUF_C_TYPE_FIXED64:
> + case PROTOBUF_C_TYPE_DOUBLE:
> + return 8;
> + case PROTOBUF_C_TYPE_STRING:
> + case PROTOBUF_C_TYPE_MESSAGE:
> + return sizeof (void *);
> + case PROTOBUF_C_TYPE_BOOL:
> + return sizeof (protobuf_c_boolean);
> + case PROTOBUF_C_TYPE_BYTES:
> + return sizeof (ProtobufCBinaryData);
> + }
> + return 0;
> +}
> +
> static void pb_show_field(const ProtobufCFieldDescriptor *fd, void *where,
> unsigned long nr_fields, pb_pr_ctl_t *ctl)
> {
> pb_pr_field_t *show;
> unsigned long counter;
> - size_t fsize;
> + size_t fsize = get_field_size(fd->type);
>
> print_tabs(ctl);
>
> @@ -114,7 +143,6 @@ static void pb_show_field(const ProtobufCFieldDescriptor *fd, void *where,
> case PROTOBUF_C_TYPE_UINT32:
> case PROTOBUF_C_TYPE_SFIXED32:
> show = pb_msg_int32x;
> - fsize = 4;
> break;
> case PROTOBUF_C_TYPE_INT64:
> case PROTOBUF_C_TYPE_SINT64:
> @@ -123,17 +151,14 @@ static void pb_show_field(const ProtobufCFieldDescriptor *fd, void *where,
> case PROTOBUF_C_TYPE_UINT64:
> case PROTOBUF_C_TYPE_FIXED64:
> show = pb_msg_int64x;
> - fsize = 8;
> break;
> case PROTOBUF_C_TYPE_STRING:
> show = pb_msg_string;
> - fsize = sizeof (void *);
> break;
> case PROTOBUF_C_TYPE_MESSAGE:
> where = (void *)(*(long *)where);
> ctl->arg = (void *)fd->descriptor;
> show = show_nested_message;
> - fsize = sizeof (void *);
> break;
> case PROTOBUF_C_TYPE_ENUM:
> show = show_enum;
>
More information about the CRIU
mailing list