const char *name)
{
TDB_DATA key, data;
- uint32_t *p;
+ struct xs_tdb_record_hdr *hdr;
struct node *node;
TDB_CONTEXT * context = tdb_context(conn);
talloc_steal(node, data.dptr);
/* Datalen, childlen, number of permissions */
- p = (uint32_t *)data.dptr;
- node->num_perms = p[0];
- node->datalen = p[1];
- node->childlen = p[2];
+ hdr = (void *)data.dptr;
+ node->num_perms = hdr->num_perms;
+ node->datalen = hdr->datalen;
+ node->childlen = hdr->childlen;
/* Permissions are struct xs_permissions. */
- node->perms = (void *)&p[3];
+ node->perms = hdr->perms;
/* Data is binary blob (usually ascii, no nul). */
node->data = node->perms + node->num_perms;
/* Children is strings, nul separated. */
TDB_DATA key, data;
void *p;
+ struct xs_tdb_record_hdr *hdr;
key.dptr = (void *)node->name;
key.dsize = strlen(node->name);
- data.dsize = 3*sizeof(uint32_t)
+ data.dsize = sizeof(*hdr)
+ node->num_perms*sizeof(node->perms[0])
+ node->datalen + node->childlen;
add_change_node(conn, node, false);
data.dptr = talloc_size(node, data.dsize);
- ((uint32_t *)data.dptr)[0] = node->num_perms;
- ((uint32_t *)data.dptr)[1] = node->datalen;
- ((uint32_t *)data.dptr)[2] = node->childlen;
- p = data.dptr + 3 * sizeof(uint32_t);
+ hdr = (void *)data.dptr;
+ hdr->num_perms = node->num_perms;
+ hdr->datalen = node->datalen;
+ hdr->childlen = node->childlen;
- memcpy(p, node->perms, node->num_perms*sizeof(node->perms[0]));
- p += node->num_perms*sizeof(node->perms[0]);
+ memcpy(hdr->perms, node->perms, node->num_perms*sizeof(node->perms[0]));
+ p = hdr->perms + node->num_perms;
memcpy(p, node->data, node->datalen);
p += node->datalen;
memcpy(p, node->children, node->childlen);
#include "talloc.h"
#include "utils.h"
-struct record_hdr {
- uint32_t num_perms;
- uint32_t datalen;
- uint32_t childlen;
- struct xs_permissions perms[0];
-};
-
-static uint32_t total_size(struct record_hdr *hdr)
+static uint32_t total_size(struct xs_tdb_record_hdr *hdr)
{
return sizeof(*hdr) + hdr->num_perms * sizeof(struct xs_permissions)
+ hdr->datalen + hdr->childlen;
key = tdb_firstkey(tdb);
while (key.dptr) {
TDB_DATA data;
- struct record_hdr *hdr;
+ struct xs_tdb_record_hdr *hdr;
data = tdb_fetch(tdb, key);
hdr = (void *)data.dptr;