diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-15 14:46:08 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-15 14:57:40 +0300 |
commit | 44ca2b760b393e993b2a42fc489fa170910ad810 (patch) | |
tree | 12aa7390b19bed8aba2535cedb04376c45f820a5 /doc | |
parent | 5580c3248794803a8e45dd58b45933a32637954d (diff) | |
download | gdbm-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')
-rw-r--r-- | doc/gdbm.texi | 21 |
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). | |||
258 | It is used during initialization to determine the size of various | 258 | It is used during initialization to determine the size of various |
259 | constructs. It is the size of a single transfer from disk to | 259 | constructs. It is the size of a single transfer from disk to |
260 | memory. This parameter is ignored if the file has been previously | 260 | memory. This parameter is ignored if the file has been previously |
261 | initialized. The minimum size is 512. If the value is less than 512, | 261 | initialized. If the value is less than 512, the file system block |
262 | the file system block size is used, otherwise the value of | 262 | size is used instead. The size is adjusted so that the block can hold |
263 | @var{block_size} is used. | 263 | exact number of directory entries, so that the effective block size |
264 | can be slightly greater than requested. However, if the | ||
265 | @samp{GDBM_BSEXACT} flag is set and the size needs to be adjusted, the | ||
266 | function will return with error status, setting the @samp{gdbm_errno} | ||
267 | variable 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}, | |||
287 | which disables the memory mapping mechanism. The option @samp{GDBM_FAST} is | 292 | which disables the memory mapping mechanism. The option @samp{GDBM_FAST} is |
288 | now obsolete, since @code{gdbm} defaults to no-sync mode. | 293 | now obsolete, since @code{gdbm} defaults to no-sync mode. |
289 | 294 | ||
295 | @kwindex GDBM_BSEXACT | ||
296 | If this flag is set and the requested @var{block_size} cannot be used | ||
297 | without adjustment, @code{gdbm_open} will refuse to create the | ||
298 | databases. In this case it will set the @samp{gdbm_errno} | ||
299 | variable 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 |
292 | If the host @samp{open} call | 303 | If the host @samp{open} call |
@@ -1233,9 +1244,11 @@ No error occurred. | |||
1233 | Memory allocation failed. Not enough memory. | 1244 | Memory 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 |
1237 | This error is set by the @code{gdbm_open} function (@pxref{Open}), if | 1249 | This error is set by the @code{gdbm_open} function (@pxref{Open}), if |
1238 | the value of its @var{block_size} argument is incorrect. | 1250 | the 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 |