[CRIU] [PATCH 05/11] protobuf: move data pointer to field structure

Kinsbursky Stanislav skinsbursky at openvz.org
Tue Jul 31 10:39:33 EDT 2012


Signed-off-by: Stanislav Kinsbursky <skinsbursky at openvz.org>

---
 protobuf.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/protobuf.c b/protobuf.c
index d4d2e3d..3fd32d3 100644
--- a/protobuf.c
+++ b/protobuf.c
@@ -21,6 +21,7 @@
 #define PB_PKOBJ_LOCAL_SIZE	1024
 
 struct pb_pr_field_s {
+	void *data;
 	int depth;
 };
 
@@ -103,10 +104,11 @@ static void show_enum(void *msg, pb_pr_ctl_t *ctl)
 		pr_msg("%d", val);
 }
 
-static void pb_show_field(const ProtobufCFieldDescriptor *fd, void *where,
+static void pb_show_field(const ProtobufCFieldDescriptor *fd,
 			  unsigned long nr_fields, pb_pr_ctl_t *ctl)
 {
 	pb_pr_show_t show;
+	pb_pr_field_t *field = &ctl->cur;
 	unsigned long counter;
 	size_t fsize;
 
@@ -136,7 +138,7 @@ static void pb_show_field(const ProtobufCFieldDescriptor *fd, void *where,
 			fsize = sizeof (void *);
 			break;
 		case PROTOBUF_C_TYPE_MESSAGE:
-			where = (void *)(*(long *)where);
+			field->data = (void *)(*(long *)field->data);
 			ctl->arg = (void *)fd->descriptor;
 			show = show_nested_message;
 			fsize = sizeof (void *);
@@ -156,12 +158,12 @@ static void pb_show_field(const ProtobufCFieldDescriptor *fd, void *where,
 			break;
 	}
 
-	show(where, ctl);
-	where += fsize;
+	show(field->data, ctl);
+	field->data += fsize;
 
-	for (counter = 0; counter < nr_fields - 1; counter++, where += fsize) {
+	for (counter = 0; counter < nr_fields - 1; counter++, field->data += fsize) {
 		pr_msg(":");
-		show(where, ctl);
+		show(field->data, ctl);
 	}
 
 	if (ctl->single_entry)
@@ -213,7 +215,9 @@ static void pb_show_msg(const void *msg, pb_pr_ctl_t *ctl)
 			data = (unsigned long *)*data;
 		}
 
-		pb_show_field(&fd, data, nr_fields, ctl);
+		ctl->cur.data = data;
+
+		pb_show_field(&fd, nr_fields, ctl);
 	}
 }
 



More information about the CRIU mailing list