Commit d0a5f0ae authored by Kinsbursky Stanislav's avatar Kinsbursky Stanislav Committed by Pavel Emelyanov

protobuf: add show support for images payload

Payload handler can be passed into generic protobuf show function.
Signed-off-by: 's avatarStanislav Kinsbursky <skinsbursky@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent ae150da0
...@@ -59,17 +59,23 @@ extern int pb_write_object_with_header(int fd, void *obj, ...@@ -59,17 +59,23 @@ extern int pb_write_object_with_header(int fd, void *obj,
#include <google/protobuf-c/protobuf-c.h> #include <google/protobuf-c/protobuf-c.h>
extern void do_pb_show_plain(int fd, const ProtobufCMessageDescriptor *d, extern void do_pb_show_plain(int fd, const ProtobufCMessageDescriptor *d,
pb_unpack_t unpack, pb_free_t free, int single_entry); pb_unpack_t unpack, pb_free_t free, int single_entry,
void (*payload_hadler)(int fd, void *obj));
/* Don't have objects at hands to also do typechecking here */ /* Don't have objects at hands to also do typechecking here */
#define pb_show_plain(__fd, __proto_message_name) \ #define pb_show_plain_payload(__fd, __proto_message_name, payload_hadler) \
do_pb_show_plain(__fd, &__proto_message_name##__descriptor, \ do_pb_show_plain(__fd, &__proto_message_name##__descriptor, \
(pb_unpack_t)__proto_message_name##__unpack, \ (pb_unpack_t)__proto_message_name##__unpack, \
(pb_free_t)__proto_message_name##__free_unpacked, 0) (pb_free_t)__proto_message_name##__free_unpacked, \
0, payload_hadler)
#define pb_show_plain(__fd, __proto_message_name) \
pb_show_plain_payload(__fd, __proto_message_name, NULL)
#define pb_show_vertical(__fd, __proto_message_name) \ #define pb_show_vertical(__fd, __proto_message_name) \
do_pb_show_plain(__fd, &__proto_message_name##__descriptor, \ do_pb_show_plain(__fd, &__proto_message_name##__descriptor, \
(pb_unpack_t)__proto_message_name##__unpack, \ (pb_unpack_t)__proto_message_name##__unpack, \
(pb_free_t)__proto_message_name##__free_unpacked, 1) (pb_free_t)__proto_message_name##__free_unpacked, \
1, NULL)
#endif /* PROTOBUF_H__ */ #endif /* PROTOBUF_H__ */
...@@ -210,10 +210,14 @@ static void pb_show_msg(const void *msg, pb_pr_ctl_t *ctl) ...@@ -210,10 +210,14 @@ static void pb_show_msg(const void *msg, pb_pr_ctl_t *ctl)
} }
} }
static inline void pb_no_payload(int fd, void *obj) { }
void do_pb_show_plain(int fd, const ProtobufCMessageDescriptor *md, void do_pb_show_plain(int fd, const ProtobufCMessageDescriptor *md,
pb_unpack_t unpack, pb_free_t free, int single_entry) pb_unpack_t unpack, pb_free_t free, int single_entry,
void (*payload_hadler)(int fd, void *obj))
{ {
pb_pr_ctl_t ctl = {NULL, single_entry, 0}; pb_pr_ctl_t ctl = {NULL, single_entry, 0};
void (*handle_payload)(int fd, void *obj) = (payload_hadler) ? : pb_no_payload;
while (1) { while (1) {
void *obj; void *obj;
...@@ -223,6 +227,7 @@ void do_pb_show_plain(int fd, const ProtobufCMessageDescriptor *md, ...@@ -223,6 +227,7 @@ void do_pb_show_plain(int fd, const ProtobufCMessageDescriptor *md,
ctl.arg = (void *)md; ctl.arg = (void *)md;
pb_show_msg(obj, &ctl); pb_show_msg(obj, &ctl);
handle_payload(fd, obj);
free(obj, NULL); free(obj, NULL);
if (single_entry) if (single_entry)
break; break;
......
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