ctdb-common: Refactor code to convert TDB_DATA key to aligned uint32 array
authorAmitay Isaacs <amitay@gmail.com>
Fri, 15 Aug 2014 03:22:29 +0000 (13:22 +1000)
committerMartin Schwenke <martins@samba.org>
Fri, 5 Sep 2014 05:05:10 +0000 (07:05 +0200)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/common/ctdb_util.c
ctdb/include/ctdb_private.h

index b9b0ad7a91beb3ac39ca4f66cdaafcb0c8013182..bdff4255eb58b669da63677f05ecec43eb838220 100644 (file)
@@ -490,3 +490,21 @@ void ctdb_set_runstate(struct ctdb_context *ctdb, enum ctdb_runstate runstate)
                            runstate_to_string(runstate), runstate));
        ctdb->runstate = runstate;
 }
+
+/* Convert arbitrary data to 4-byte boundary padded uint32 array */
+uint32_t *ctdb_key_to_idkey(TALLOC_CTX *mem_ctx, TDB_DATA key)
+{
+       uint32_t idkey_size, *k;
+
+       idkey_size = 1 + (key.dsize + sizeof(uint32_t)-1) / sizeof(uint32_t);
+
+       k = talloc_zero_array(mem_ctx, uint32_t, idkey_size);
+       if (k == NULL) {
+               return NULL;
+       }
+
+       k[0] = idkey_size;
+       memcpy(&k[1], key.dptr, key.dsize);
+
+       return k;
+}
index 0087f1df75029d10eb8844f35b93b3750f9ae227..64b59c9313249c624780bcc0d37972c591491063 100644 (file)
@@ -731,6 +731,8 @@ int ctdb_parse_address(struct ctdb_context *ctdb,
 bool ctdb_same_ip(const ctdb_sock_addr *ip1, const ctdb_sock_addr *ip2);
 bool ctdb_same_sockaddr(const ctdb_sock_addr *ip1, const ctdb_sock_addr *ip2);
 uint32_t ctdb_hash(const TDB_DATA *key);
+uint32_t *ctdb_key_to_idkey(TALLOC_CTX *mem_ctx, TDB_DATA key);
+
 void ctdb_request_call(struct ctdb_context *ctdb, struct ctdb_req_header *hdr);
 void ctdb_request_dmaster(struct ctdb_context *ctdb, struct ctdb_req_header *hdr);
 void ctdb_request_message(struct ctdb_context *ctdb, struct ctdb_req_header *hdr);