}
static void ctdb_event_reply_data_push(struct ctdb_event_reply_data *in,
- uint8_t *buf)
+ uint8_t *buf, size_t *npush)
{
size_t offset = 0, np;
ctdb_int32_push(&in->result, buf+offset, &np);
offset += np;
+ np = 0;
switch (in->command) {
case CTDB_EVENT_COMMAND_RUN:
break;
case CTDB_EVENT_COMMAND_SCRIPT_DISABLE:
break;
}
+ offset += np;
+
+ *npush = offset;
}
static int ctdb_event_reply_data_pull(uint8_t *buf, size_t buflen,
TALLOC_CTX *mem_ctx,
- struct ctdb_event_reply_data *out)
+ struct ctdb_event_reply_data *out,
+ size_t *npull)
{
size_t offset = 0, np;
int ret;
}
offset += np;
+ np = 0;
switch (out->command) {
case CTDB_EVENT_COMMAND_RUN:
break;
return ret;
}
+ offset += np;
+
+ *npull = offset;
return 0;
}
int ctdb_event_reply_push(struct ctdb_event_reply *in,
uint8_t *buf, size_t *buflen)
{
- size_t len, offset = 0;
+ size_t len, offset = 0, np;
len = ctdb_event_reply_len(in);
if (*buflen < len) {
ctdb_event_header_push(&in->header, buf);
offset += ctdb_event_header_len(&in->header);
- ctdb_event_reply_data_push(&in->rdata, buf+offset);
+ ctdb_event_reply_data_push(&in->rdata, buf+offset, &np);
return 0;
}
TALLOC_CTX *mem_ctx,
struct ctdb_event_reply *out)
{
- size_t offset = 0;
+ size_t offset = 0, np;
int ret;
ret = ctdb_event_header_pull(buf, buflen, mem_ctx, &out->header);
offset += ctdb_event_header_len(&out->header);
ret = ctdb_event_reply_data_pull(buf+offset, buflen-offset,
- mem_ctx, &out->rdata);
+ mem_ctx, &out->rdata, &np);
if (ret != 0) {
return ret;
}
#define NUM_COMMANDS 5
-static void test_ctdb_event_reply_data(void)
-{
- TALLOC_CTX *mem_ctx;
- size_t buflen;
- struct ctdb_event_reply_data rd, rd2;
- uint32_t command;
- int ret;
-
- printf("ctdb_event_reply_data\n");
- fflush(stdout);
-
- for (command=1; command<=NUM_COMMANDS; command++) {
- mem_ctx = talloc_new(NULL);
- assert(mem_ctx != NULL);
-
- printf("%u.. ", command);
- fflush(stdout);
- fill_ctdb_event_reply_data(mem_ctx, &rd, command);
- buflen = ctdb_event_reply_data_len(&rd);
- ctdb_event_reply_data_push(&rd, BUFFER);
- ret = ctdb_event_reply_data_pull(BUFFER, buflen, mem_ctx, &rd2);
- assert(ret == 0);
- verify_ctdb_event_reply_data(&rd, &rd2);
-
- talloc_free(mem_ctx);
- }
-
- printf("\n");
- fflush(stdout);
-}
-
static void test_ctdb_event_request(void)
{
TALLOC_CTX *mem_ctx;
ctdb_event_reply_script_list);
PROTOCOL_EVENT1_TEST(struct ctdb_event_request_data, ctdb_event_request_data);
+PROTOCOL_EVENT1_TEST(struct ctdb_event_reply_data, ctdb_event_reply_data);
int main(int argc, char *argv[])
{
for (command=1; command<=NUM_COMMANDS; command++) {
TEST_FUNC(ctdb_event_request_data)(command);
}
- test_ctdb_event_reply_data();
+ for (command=1; command<=NUM_COMMANDS; command++) {
+ TEST_FUNC(ctdb_event_reply_data)(command);
+ }
test_ctdb_event_request();
test_ctdb_event_reply();