diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gdbmtool.c | 15 | ||||
-rw-r--r-- | src/var.c | 2 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/gdbmtool.c b/src/gdbmtool.c index e99547d..5ae668c 100644 --- a/src/gdbmtool.c +++ b/src/gdbmtool.c @@ -84,13 +84,13 @@ opendb (char *dbname) if (!variable_is_true ("lock")) flags |= GDBM_NOLOCK; if (!variable_is_true ("mmap")) flags |= GDBM_NOMMAP; if (variable_is_true ("sync")) flags |= GDBM_SYNC; - + if (open_mode == GDBM_NEWDB) { if (interactive () && variable_is_true ("confirm") && access (dbname, F_OK) == 0) { if (!getyn (_("database %s already exists; overwrite"), dbname)) @@ -111,12 +111,25 @@ opendb (char *dbname) } if (cache_size && gdbm_setopt (db, GDBM_CACHESIZE, &cache_size, sizeof (int)) == -1) terror (_("gdbm_setopt failed: %s"), gdbm_strerror (gdbm_errno)); + if (variable_is_true ("coalesce")) + { + int t = 1; + if (gdbm_setopt (db, GDBM_SETCOALESCEBLKS, &t, sizeof (t)) == -1) + terror (_("gdbm_setopt failed: %s"), gdbm_strerror (gdbm_errno)); + } + if (variable_is_true ("centfree")) + { + int t = 1; + if (gdbm_setopt (db, GDBM_SETCENTFREE, &t, sizeof (t)) == -1) + terror (_("gdbm_setopt failed: %s"), gdbm_strerror (gdbm_errno)); + } + if (gdbm_file) gdbm_close (gdbm_file); gdbm_file = db; return 0; } @@ -56,12 +56,14 @@ static struct variable vartab[] = { { "cachesize", VART_INT, VARF_DFL }, { "blocksize", VART_INT, VARF_DFL }, { "open", VART_STRING, VARF_DFL, { NULL }, open_hook }, { "lock", VART_BOOL, VARF_INIT, { .bool = 1 } }, { "mmap", VART_BOOL, VARF_INIT, { .bool = 1 } }, { "sync", VART_BOOL, VARF_INIT, { .bool = 0 } }, + { "coalesce", VART_BOOL, VARF_INIT, { .bool = 0 } }, + { "centfree", VART_BOOL, VARF_INIT, { .bool = 0 } }, { "filemode", VART_INT, VARF_INIT|VARF_OCTAL|VARF_PROT, { .num = 0644 } }, { "pager", VART_STRING, VARF_DFL }, { "quiet", VART_BOOL, VARF_DFL }, { NULL } }; |