summaryrefslogtreecommitdiffabout
path: root/doc
authorSergey Poznyakoff <gray@gnu.org.ua>2016-07-15 11:46:08 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2016-07-15 11:57:40 (GMT)
commit44ca2b760b393e993b2a42fc489fa170910ad810 (patch) (unidiff)
tree12aa7390b19bed8aba2535cedb04376c45f820a5 /doc
parent5580c3248794803a8e45dd58b45933a32637954d (diff)
downloadgdbm-44ca2b760b393e993b2a42fc489fa170910ad810.tar.gz
gdbm-44ca2b760b393e993b2a42fc489fa170910ad810.tar.bz2
gdbm_open adjusts requested block size to accomodate integer number of directory offsets.
* src/gdbm.h.in (GDBM_BSEXACT): New flag. * src/gdbmopen.c (compute_directory_size): New function. (gdbm_open): When creating new database, adjust the requested block size so that the block holds integer number of directory indices. Disable this behavior if GDBM_BSEXACT flag is set (this reverts to old behavior). Always unset GDBM_BSEXACT if using block size returned by stat(2). This makes sure gdbm_open succeeds on file systems reporting block sizes not divisible by 512. * src/gdbmconst.h (GDBM_MIN_BLOCK_SIZE): New constant. * src/gdbmimp.c (gdbm_import_from_file): Use GDBM_MIN_BLOCK_SIZE instead of the hardcoded value. * NEWS: Document GDBM_BSEXACT. * doc/gdbm.texi: Likewise.
Diffstat (limited to 'doc') (more/less context) (show whitespace changes)
-rw-r--r--doc/gdbm.texi21
1 files changed, 17 insertions, 4 deletions
diff --git a/doc/gdbm.texi b/doc/gdbm.texi
index d172ad7..8096215 100644
--- a/doc/gdbm.texi
+++ b/doc/gdbm.texi
@@ -258,9 +258,14 @@ characters to this name).
258It is used during initialization to determine the size of various 258It is used during initialization to determine the size of various
259constructs. It is the size of a single transfer from disk to 259constructs. It is the size of a single transfer from disk to
260memory. This parameter is ignored if the file has been previously 260memory. This parameter is ignored if the file has been previously
261initialized. The minimum size is 512. If the value is less than 512, 261initialized. If the value is less than 512, the file system block
262the file system block size is used, otherwise the value of 262size is used instead. The size is adjusted so that the block can hold
263@var{block_size} is used. 263exact number of directory entries, so that the effective block size
264can be slightly greater than requested. However, if the
265@samp{GDBM_BSEXACT} flag is set and the size needs to be adjusted, the
266function will return with error status, setting the @samp{gdbm_errno}
267variable to @samp{GDBM_BLOCK_SIZE_ERROR}.
268
264@item flags 269@item flags
265@kwindex GDBM_READER 270@kwindex GDBM_READER
266@kwindex GDBM_WRITER 271@kwindex GDBM_WRITER
@@ -287,6 +292,12 @@ from performing any locking on the database file, and @samp{GDBM_NOMMAP},
287which disables the memory mapping mechanism. The option @samp{GDBM_FAST} is 292which disables the memory mapping mechanism. The option @samp{GDBM_FAST} is
288now obsolete, since @code{gdbm} defaults to no-sync mode. 293now obsolete, since @code{gdbm} defaults to no-sync mode.
289 294
295@kwindex GDBM_BSEXACT
296If this flag is set and the requested @var{block_size} cannot be used
297without adjustment, @code{gdbm_open} will refuse to create the
298databases. In this case it will set the @samp{gdbm_errno}
299variable to @samp{GDBM_BLOCK_SIZE_ERROR} and return @samp{NULL}.
300
290@kwindex GDBM_CLOEXEC 301@kwindex GDBM_CLOEXEC
291@cindex close-on-exec 302@cindex close-on-exec
292If the host @samp{open} call 303If the host @samp{open} call
@@ -1233,9 +1244,11 @@ No error occurred.
1233Memory allocation failed. Not enough memory. 1244Memory allocation failed. Not enough memory.
1234 1245
1235@kwindex GDBM_BLOCK_SIZE_ERROR 1246@kwindex GDBM_BLOCK_SIZE_ERROR
1247@kwindex GDBM_BSEXACT
1236@item GDBM_BLOCK_SIZE_ERROR 1248@item GDBM_BLOCK_SIZE_ERROR
1237This error is set by the @code{gdbm_open} function (@pxref{Open}), if 1249This error is set by the @code{gdbm_open} function (@pxref{Open}), if
1238the value of its @var{block_size} argument is incorrect. 1250the value of its @var{block_size} argument is incorrect and the
1251@samp{GDBM_BSEXACT} flag is set.
1239 1252
1240@kwindex GDBM_FILE_OPEN_ERROR 1253@kwindex GDBM_FILE_OPEN_ERROR
1241@item GDBM_FILE_OPEN_ERROR 1254@item GDBM_FILE_OPEN_ERROR

Return to:

Send suggestions and report system problems to the System administrator.