wire->reqid = rec->reqid;
wire->keylen = rec->key.dsize;
wire->datalen = rec->data.dsize;
+ if (rec->header != NULL) {
+ wire->datalen += sizeof(struct ctdb_ltdb_header);
+ }
memcpy(wire->data, rec->key.dptr, rec->key.dsize);
offset = rec->key.dsize;
key->dptr = wire->data;
offset = wire->keylen;
- if (wire->length - n == sizeof(struct ctdb_ltdb_header)) {
- *header = (struct ctdb_ltdb_header *)&wire->data[offset];
- offset += sizeof(struct ctdb_ltdb_header);
- } else {
- *header = NULL;
- }
+ /* Always set header to NULL. If it is required, exact it using
+ * ctdb_rec_data_extract_header()
+ */
+ *header = NULL;
data->dsize = wire->datalen;
data->dptr = &wire->data[offset];
}
out->reqid = reqid;
-
- if (header != NULL) {
- out->header = talloc_memdup(mem_ctx, header,
- sizeof(struct ctdb_ltdb_header));
- if (out->header == NULL) {
- return ENOMEM;
- }
- } else {
- out->header = NULL;
- }
+ out->header = NULL;
out->key.dsize = key.dsize;
if (key.dsize > 0) {
static void verify_ctdb_rec_data(struct ctdb_rec_data *p1,
struct ctdb_rec_data *p2)
{
+ struct ctdb_ltdb_header header;
+
assert(p1->reqid == p2->reqid);
- if (p1->header == NULL || p2->header == NULL) {
- assert(p1->header == p2->header);
- } else {
- verify_ctdb_ltdb_header(p1->header, p2->header);
+ if (p1->header != NULL) {
+ assert(ctdb_ltdb_header_extract(&p2->data, &header) == 0);
+ verify_ctdb_ltdb_header(p1->header, &header);
}
verify_tdb_data(&p1->key, &p2->key);
verify_tdb_data(&p1->data, &p2->data);