return ctdb_uint32_len(&in->length) + ctdb_uint32_len(&in->reqid);
}
-static void ctdb_event_header_push(struct ctdb_event_header *in, uint8_t *buf)
+static void ctdb_event_header_push(struct ctdb_event_header *in, uint8_t *buf,
+ size_t *npush)
{
size_t offset = 0, np;
offset += np;
ctdb_uint32_push(&in->reqid, buf+offset, &np);
+ offset += np;
+
+ *npush = offset;
}
static int ctdb_event_header_pull(uint8_t *buf, size_t buflen,
TALLOC_CTX *mem_ctx,
- struct ctdb_event_header *out)
+ struct ctdb_event_header *out,
+ size_t *npull)
{
size_t offset = 0, np;
int ret;
if (ret != 0) {
return ret;
}
+ offset += np;
+ *npull = offset;
return 0;
}
in->header.length = *buflen;
- ctdb_event_header_push(&in->header, buf);
- offset += ctdb_event_header_len(&in->header);
+ ctdb_event_header_push(&in->header, buf, &np);
+ offset += np;
ctdb_event_request_data_push(&in->rdata, buf+offset, &np);
size_t offset = 0, np;
int ret;
- ret = ctdb_event_header_pull(buf, buflen, mem_ctx, &out->header);
+ ret = ctdb_event_header_pull(buf, buflen, mem_ctx, &out->header, &np);
if (ret != 0) {
return ret;
}
- offset += ctdb_event_header_len(&out->header);
+ offset += np;
ret = ctdb_event_request_data_pull(buf+offset, buflen-offset,
mem_ctx, &out->rdata, &np);
in->header.length = *buflen;
- ctdb_event_header_push(&in->header, buf);
- offset += ctdb_event_header_len(&in->header);
+ ctdb_event_header_push(&in->header, buf, &np);
+ offset += np;
ctdb_event_reply_data_push(&in->rdata, buf+offset, &np);
size_t offset = 0, np;
int ret;
- ret = ctdb_event_header_pull(buf, buflen, mem_ctx, &out->header);
+ ret = ctdb_event_header_pull(buf, buflen, mem_ctx, &out->header, &np);
if (ret != 0) {
return ret;
}
- offset += ctdb_event_header_len(&out->header);
+ offset += np;
ret = ctdb_event_reply_data_pull(buf+offset, buflen-offset,
mem_ctx, &out->rdata, &np);
static void test_ctdb_event_header(void)
{
TALLOC_CTX *mem_ctx;
- size_t buflen;
+ size_t buflen, np = 0;
struct ctdb_event_header h, h2;
int ret;
ctdb_event_header_fill(&h, REQID);
buflen = ctdb_event_header_len(&h);
- ctdb_event_header_push(&h, BUFFER);
- ret = ctdb_event_header_pull(BUFFER, buflen, mem_ctx, &h2);
+ assert(buflen < sizeof(BUFFER));
+ ctdb_event_header_push(&h, BUFFER, &np);
+ assert(np == buflen);
+ np = 0;
+ ret = ctdb_event_header_pull(BUFFER, buflen, mem_ctx, &h2, &np);
assert(ret == 0);
+ assert(np == buflen);
verify_ctdb_event_header(&h, &h2);