ctdb-protocol: Fix marshaling for ctdb_event_reply_status
authorAmitay Isaacs <amitay@gmail.com>
Wed, 26 Jul 2017 15:43:54 +0000 (01:43 +1000)
committerMartin Schwenke <martins@samba.org>
Wed, 30 Aug 2017 12:59:26 +0000 (14:59 +0200)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/protocol/protocol_event.c
ctdb/tests/src/protocol_event_test.c

index 4e489e4c948f52c564fcf52cfb83a65e35d40e3e..1f608ad8ea1603fc9c0bb5ebd7e44e0af2853673 100644 (file)
@@ -590,7 +590,7 @@ static size_t ctdb_event_reply_status_len(struct ctdb_event_reply_status *in)
 }
 
 static void ctdb_event_reply_status_push(struct ctdb_event_reply_status *in,
-                                        uint8_t *buf)
+                                        uint8_t *buf, size_t *npush)
 {
        size_t offset = 0, np;
 
@@ -598,11 +598,15 @@ static void ctdb_event_reply_status_push(struct ctdb_event_reply_status *in,
        offset += np;
 
        ctdb_script_list_push(in->script_list, buf+offset, &np);
+       offset += np;
+
+       *npush = offset;
 }
 
 static int ctdb_event_reply_status_pull(uint8_t *buf, size_t buflen,
                                        TALLOC_CTX *mem_ctx,
-                                       struct ctdb_event_reply_status **out)
+                                       struct ctdb_event_reply_status **out,
+                                       size_t *npull)
 {
        struct ctdb_event_reply_status *rdata;
        size_t offset = 0, np;
@@ -626,8 +630,10 @@ static int ctdb_event_reply_status_pull(uint8_t *buf, size_t buflen,
                talloc_free(rdata);
                return ret;
        }
+       offset += np;
 
        *out = rdata;
+       *npull = offset;
        return 0;
 }
 
@@ -716,7 +722,7 @@ static void ctdb_event_reply_data_push(struct ctdb_event_reply_data *in,
                break;
 
        case CTDB_EVENT_COMMAND_STATUS:
-               ctdb_event_reply_status_push(in->data.status, buf+offset);
+               ctdb_event_reply_status_push(in->data.status, buf+offset, &np);
                break;
 
        case CTDB_EVENT_COMMAND_SCRIPT_LIST:
@@ -759,7 +765,7 @@ static int ctdb_event_reply_data_pull(uint8_t *buf, size_t buflen,
        case CTDB_EVENT_COMMAND_STATUS:
                ret = ctdb_event_reply_status_pull(
                                        buf+offset, buflen-offset,
-                                       mem_ctx, &out->data.status);
+                                       mem_ctx, &out->data.status, &np);
                break;
 
        case CTDB_EVENT_COMMAND_SCRIPT_LIST:
index 090e35a7171efa1ae6392513df78e4be60c84d29..57f7d9068ba340475dda6f9124c3abb2811885ca 100644 (file)
@@ -238,7 +238,7 @@ PROTOCOL_TYPE3_TEST(struct ctdb_event_request_script_enable,
                                ctdb_event_request_script_enable);
 PROTOCOL_TYPE3_TEST(struct ctdb_event_request_script_disable,
                                ctdb_event_request_script_disable);
-DEFINE_TEST(struct ctdb_event_reply_status, ctdb_event_reply_status);
+PROTOCOL_TYPE3_TEST(struct ctdb_event_reply_status, ctdb_event_reply_status);
 DEFINE_TEST(struct ctdb_event_reply_script_list, ctdb_event_reply_script_list);
 
 PROTOCOL_EVENT1_TEST(struct ctdb_event_request_data, ctdb_event_request_data);