[sheepdog] [PATCH 3/3] zookeeper: use offsetof to calculate offset

MORITA Kazutaka morita.kazutaka at gmail.com
Wed May 29 12:37:49 CEST 2013


From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>

Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
 sheep/cluster/zookeeper.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
index 1013d60..7439ba7 100644
--- a/sheep/cluster/zookeeper.c
+++ b/sheep/cluster/zookeeper.c
@@ -297,7 +297,7 @@ static void zk_queue_push(struct zk_event *ev)
 	int rc, len;
 	char path[MAX_NODE_STR_LEN], buf[MAX_NODE_STR_LEN];
 
-	len = (char *)(ev->buf) - (char *)ev + ev->buf_len;
+	len = offsetof(typeof(*ev), buf) + ev->buf_len;
 	snprintf(path, sizeof(path), "%s/", QUEUE_ZNODE);
 again:
 	rc = zk_create_seq_node(path, (char *)ev, len, buf, sizeof(buf));
@@ -344,7 +344,7 @@ static void push_join_response(struct zk_event *ev)
 	       nr_sd_nodes * sizeof(struct sd_node));
 	queue_pos--;
 
-	len = (char *)(ev->buf) - (char *)ev + ev->buf_len;
+	len = offsetof(typeof(*ev), buf) + ev->buf_len;
 	snprintf(path, sizeof(path), QUEUE_ZNODE "/%010"PRId32, queue_pos);
 	zk_set_data(path, (char *)ev, len, -1);
 	sd_dprintf("update path:%s, queue_pos:%010"PRId32", len:%d",
-- 
1.7.9.5




More information about the sheepdog mailing list