summaryrefslogtreecommitdiff
path: root/ctdb
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2017-07-27 01:26:43 +1000
committerMartin Schwenke <martins@samba.org>2017-08-30 14:59:26 +0200
commitb880ac825b528b3b23def96e58709107489a9401 (patch)
tree3b09e6338010f0872fdfe7623bd11530f2e17728 /ctdb
parent9d892aeb49705b2b72b2763b088d8a371387a3ae (diff)
downloadsamba-b880ac825b528b3b23def96e58709107489a9401.tar.gz
ctdb-protocol: Fix marshalling for ctdb_event
Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Martin Schwenke <martin@meltin.net>
Diffstat (limited to 'ctdb')
-rw-r--r--ctdb/protocol/protocol_event.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/ctdb/protocol/protocol_event.c b/ctdb/protocol/protocol_event.c
index d9eb83dd0a6..fbd85e20d78 100644
--- a/ctdb/protocol/protocol_event.c
+++ b/ctdb/protocol/protocol_event.c
@@ -33,16 +33,19 @@ static size_t ctdb_event_len(enum ctdb_event in)
return ctdb_uint32_len(&u32);
}
-static void ctdb_event_push(enum ctdb_event in, uint8_t *buf)
+static void ctdb_event_push(enum ctdb_event in, uint8_t *buf, size_t *npush)
{
size_t np;
uint32_t u32 = in;
ctdb_uint32_push(&u32, buf, &np);
+
+ *npush = np;
}
static int ctdb_event_pull(uint8_t *buf, size_t buflen,
- TALLOC_CTX *mem_ctx, enum ctdb_event *out)
+ TALLOC_CTX *mem_ctx, enum ctdb_event *out,
+ size_t *npull)
{
uint32_t uint32_value;
enum ctdb_event value;
@@ -116,6 +119,7 @@ static int ctdb_event_pull(uint8_t *buf, size_t buflen,
}
*out = value;
+ *npull = np;
return 0;
}
@@ -240,8 +244,8 @@ static void ctdb_event_request_run_push(struct ctdb_event_request_run *in,
{
size_t offset = 0, np;
- ctdb_event_push(in->event, buf);
- offset += ctdb_event_len(in->event);
+ ctdb_event_push(in->event, buf, &np);
+ offset += np;
ctdb_uint32_push(&in->timeout, buf+offset, &np);
offset += np;
@@ -262,11 +266,11 @@ static int ctdb_event_request_run_pull(uint8_t *buf, size_t buflen,
return ENOMEM;
}
- ret = ctdb_event_pull(buf, buflen, rdata, &rdata->event);
+ ret = ctdb_event_pull(buf, buflen, rdata, &rdata->event, &np);
if (ret != 0) {
goto fail;
}
- offset += ctdb_event_len(rdata->event);
+ offset += np;
ret = ctdb_uint32_pull(buf+offset, buflen-offset, &rdata->timeout,
&np);
@@ -300,10 +304,10 @@ static void ctdb_event_request_status_push(
struct ctdb_event_request_status *in,
uint8_t *buf)
{
- size_t offset = 0;
+ size_t offset = 0, np;
- ctdb_event_push(in->event, buf);
- offset += ctdb_event_len(in->event);
+ ctdb_event_push(in->event, buf, &np);
+ offset += np;
ctdb_event_status_state_push(in->state, buf+offset);
}
@@ -314,7 +318,7 @@ static int ctdb_event_request_status_pull(
struct ctdb_event_request_status **out)
{
struct ctdb_event_request_status *rdata;
- size_t offset = 0;
+ size_t offset = 0, np;
int ret;
rdata = talloc(mem_ctx, struct ctdb_event_request_status);
@@ -322,12 +326,12 @@ static int ctdb_event_request_status_pull(
return ENOMEM;
}
- ret = ctdb_event_pull(buf, buflen, rdata, &rdata->event);
+ ret = ctdb_event_pull(buf, buflen, rdata, &rdata->event, &np);
if (ret != 0) {
talloc_free(rdata);
return ret;
}
- offset += ctdb_event_len(rdata->event);
+ offset += np;
ret = ctdb_event_status_state_pull(buf+offset, buflen-offset,
rdata, &rdata->state);