2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-22 09:58:09 +00:00

protobuf: add payload print support in generic show function

This patch also updates pipe data and sockets queues payload handlers to
output data in "-c" option was passed to crtools.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
Kinsbursky Stanislav 2012-07-26 12:43:00 +04:00 committed by Pavel Emelyanov
parent 737045fe57
commit 290003e964
4 changed files with 31 additions and 17 deletions

View File

@ -81,16 +81,21 @@ void show_ghost_file(int fd, struct cr_options *o)
pb_show_vertical(fd, ghost_file_entry); pb_show_vertical(fd, ghost_file_entry);
} }
static void pipe_data_handler(int fd, void *obj) static void pipe_data_handler(int fd, void *obj, int show_pages_content)
{ {
PipeDataEntry *e = obj; PipeDataEntry *e = obj;
if (show_pages_content) {
pr_msg("\n"); pr_msg("\n");
print_image_data(fd, e->bytes); print_image_data(fd, e->bytes);
} else
lseek(fd, e->bytes, SEEK_CUR);
} }
void show_pipes_data(int fd, struct cr_options *o) void show_pipes_data(int fd, struct cr_options *o)
{ {
pb_show_plain_payload(fd, pipe_data_entry, pipe_data_handler); pb_show_plain_payload(fd, pipe_data_entry,
pipe_data_handler, o->show_pages_content);
} }
void show_pipes(int fd_pipes, struct cr_options *o) void show_pipes(int fd_pipes, struct cr_options *o)

View File

@ -60,22 +60,23 @@ extern int pb_write_object_with_header(int fd, void *obj,
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)); void (*payload_hadler)(int fd, void *obj, int flags),
int flags);
/* 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_payload(__fd, __proto_message_name, payload_hadler) \ #define pb_show_plain_payload(__fd, __proto_message_name, payload_hadler, flags) \
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, \ (pb_free_t)__proto_message_name##__free_unpacked, \
0, payload_hadler) 0, payload_hadler, flags)
#define pb_show_plain(__fd, __proto_message_name) \ #define pb_show_plain(__fd, __proto_message_name) \
pb_show_plain_payload(__fd, __proto_message_name, NULL) pb_show_plain_payload(__fd, __proto_message_name, NULL, 0)
#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, \ (pb_free_t)__proto_message_name##__free_unpacked, \
1, NULL) 1, NULL, 0)
#endif /* PROTOBUF_H__ */ #endif /* PROTOBUF_H__ */

View File

@ -210,14 +210,17 @@ static void pb_show_msg(const void *msg, pb_pr_ctl_t *ctl)
} }
} }
static inline void pb_no_payload(int fd, void *obj) { } static inline void pb_no_payload(int fd, void *obj, int flags) { }
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)) void (*payload_hadler)(int fd, void *obj, int flags),
int flags)
{ {
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; void (*handle_payload)(int fd, void *obj, int flags);
handle_payload = (payload_hadler) ? : pb_no_payload;
while (1) { while (1) {
void *obj; void *obj;
@ -227,7 +230,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); handle_payload(fd, obj, flags);
free(obj, NULL); free(obj, NULL);
if (single_entry) if (single_entry)
break; break;

View File

@ -168,16 +168,21 @@ err_brk:
return ret; return ret;
} }
static void sk_queue_data_handler(int fd, void *obj) static void sk_queue_data_handler(int fd, void *obj, int show_pages_content)
{ {
SkPacketEntry *e = obj; SkPacketEntry *e = obj;
if (show_pages_content) {
pr_msg("\n"); pr_msg("\n");
print_image_data(fd, e->length); print_image_data(fd, e->length);
} else
lseek(fd, e->length, SEEK_CUR);
} }
void show_sk_queues(int fd, struct cr_options *o) void show_sk_queues(int fd, struct cr_options *o)
{ {
pb_show_plain_payload(fd, sk_packet_entry, sk_queue_data_handler); pb_show_plain_payload(fd, sk_packet_entry,
sk_queue_data_handler, o->show_pages_content);
} }
int restore_sk_queue(int fd, unsigned int peer_id) int restore_sk_queue(int fd, unsigned int peer_id)