]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/free.c
tdb2: make sure records with extra padding have a 0 byte.
[ccan] / ccan / tdb2 / free.c
index 97320b585d727d82796e725ef97d1f71e3461e30..e853d97eedce65dc8ae4b52313ac5a12ca2ba80d 100644 (file)
@@ -268,7 +268,6 @@ static tdb_off_t ftable_offset(struct tdb_context *tdb, unsigned int ftable)
        off = first_ftable(tdb);
        for (i = 0; i < ftable; i++) {
                if (TDB_OFF_IS_ERR(off)) {
-                       tdb->ecode = off;
                        break;
                }
                off = next_ftable(tdb, off);
@@ -392,7 +391,6 @@ static tdb_bool_err coalesce(struct tdb_context *tdb,
 
        ecode = add_free_record(tdb, off, end - off);
        if (ecode != TDB_SUCCESS) {
-               tdb->ecode = ecode;
                return ecode;
        }
        return true;
@@ -525,6 +523,15 @@ again:
                        goto unlock_err;
                }
 
+               /* For futureproofing, we put a 0 in any unused space. */
+               if (rec_extra_padding(&rec)) {
+                       ecode = tdb->methods->twrite(tdb, best_off + sizeof(rec)
+                                                    + keylen + datalen, "", 1);
+                       if (ecode != TDB_SUCCESS) {
+                               goto unlock_err;
+                       }
+               }
+
                /* Bucket of leftover will be <= current bucket, so nested
                 * locking is allowed. */
                if (leftover) {