summaryrefslogtreecommitdiff
path: root/libdb
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2022-10-02 15:10:50 +0100
committerColin Watson <cjwatson@debian.org>2022-10-02 15:10:51 +0100
commit866c3571d34313c53193d5920de252f8c2c9af1e (patch)
treea086aa99853f0a109a7a72180ec0cf5c19635ceb /libdb
parentd1a5cb5c4819580aa59cd5dd7ceefbdd8248c1be (diff)
mandb: Fully reorganize databases
This allows us to produce bitwise-identical databases regardless of the order in which pages were scanned (at least with GDBM). `gdbm_reorganize` isn't enough for this, probably because entries end up in different positions in hash buckets depending on insertion order; but reading in the entire database and writing it back out in sorted order seems to do the job with negligible cost. Fixes Debian bug #1010957. * src/mandb.c (reorganize): New function: read all the items from a database in sorted order and write them back out. (mandb): Stop calling `MYDBM_REORG`, which saved space after deletions but didn't help with reproducibility. (process_manpath): Call `reorganize` if any changes were made to a database. * libdb/mydbm.h (MYDBM_REORG): Remove macro. * NEWS.md: Document this.
Diffstat (limited to 'libdb')
-rw-r--r--libdb/mydbm.h3
1 files changed, 0 insertions, 3 deletions
diff --git a/libdb/mydbm.h b/libdb/mydbm.h
index 068ea674..370a91a4 100644
--- a/libdb/mydbm.h
+++ b/libdb/mydbm.h
@@ -88,7 +88,6 @@ void man_gdbm_free (man_gdbm_wrapper wrap);
# define MYDBM_FIRSTKEY(db) man_gdbm_firstkey(db)
# define MYDBM_NEXTKEY(db, key) man_gdbm_nextkey(db, key)
# define MYDBM_GET_TIME(db) man_gdbm_get_time(db)
-# define MYDBM_REORG(db) gdbm_reorganize((db)->file)
# elif defined(NDBM) && !defined(GDBM) && !defined(BTREE)
@@ -131,7 +130,6 @@ extern void man_ndbm_free (man_ndbm_wrapper wrap);
# define MYDBM_FIRSTKEY(db) man_ndbm_firstkey(db)
# define MYDBM_NEXTKEY(db, key) man_ndbm_nextkey(db, key)
# define MYDBM_GET_TIME(db) man_ndbm_get_time(db)
-# define MYDBM_REORG(db) do {} while (0) /* not implemented */
# elif defined(BTREE) && !defined(NDBM) && !defined(GDBM)
@@ -180,7 +178,6 @@ extern struct timespec man_btree_get_time (man_btree_wrapper wrap);
# define MYDBM_FIRSTKEY(db) man_btree_firstkey(db)
# define MYDBM_NEXTKEY(db, key) man_btree_nextkey(db)
# define MYDBM_GET_TIME(db) man_btree_get_time(db)
-# define MYDBM_REORG(db) do {} while (0) /* not implemented */
# else /* not GDBM or NDBM or BTREE */
# error Define either GDBM, NDBM or BTREE before including mydbm.h