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:
parent
737045fe57
commit
290003e964
@ -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)
|
||||||
|
@ -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__ */
|
||||||
|
11
protobuf.c
11
protobuf.c
@ -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;
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user