diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-09 11:40:19 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-09 12:11:20 +0300 |
commit | e8cad816f36b1cad11bb67c96f0ce878cf30844e (patch) | |
tree | c971d9de6369f9e340a3764d848c24d4a2ce96e8 /src/gdbmseq.c | |
parent | 0eafbb93c82a489204f54259593f2aaeb9cdbfc4 (diff) | |
download | gdbm-e8cad816f36b1cad11bb67c96f0ce878cf30844e.tar.gz gdbm-e8cad816f36b1cad11bb67c96f0ce878cf30844e.tar.bz2 |
Don't bail out on fatal errors, unless the user defines the fatal_err function
* src/bucket.c (_gdbm_get_bucket)
(_gdbm_split_bucket, _gdbm_write_bucket): Return error code. All callers
updated.
* src/proto.h (_gdbm_get_bucket)
(_gdbm_split_bucket, _gdbm_write_bucket): Update declarations
* src/falloc.c (push_avail_block)
(pop_avail_block): Return error code. All callers
updated.
* src/update.c (_gdbm_fatal): Exit only if the user defined
fatal_err function.
* src/gdbmerrno.c (gdbm_needs_recovery): New function.
* src/gdbm.h.in (gdbm_needs_recovery): New proto.
* compat/dbminit.c: Set gdbm_errno on fatal errors.
* compat/dbmopen.c: Likewise.
* src/findkey.c: Likewise.
* src/gdbm_load.c: Likewise.
* src/gdbmcount.c: Likewise.
* src/gdbmdefs.h: Likewise.
* src/gdbmdelete.c: Likewise.
* src/gdbmdump.c: Likewise.
* src/gdbmexists.c: Likewise.
* src/gdbmexp.c: Likewise.
* src/gdbmfetch.c: Likewise.
* src/gdbmimp.c: Likewise.
* src/gdbmload.c: Likewise.
* src/gdbmopen.c: Likewise.
* src/gdbmreorg.c: Likewise.
* src/gdbmseq.c: Likewise.
* src/gdbmsetopt.c: Likewise.
* src/gdbmstore.c: Likewise.
* src/gdbmsync.c: Likewise.
* src/mmap.c: Likewise.
Diffstat (limited to 'src/gdbmseq.c')
-rw-r--r-- | src/gdbmseq.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/gdbmseq.c b/src/gdbmseq.c index 831339a..4320366 100644 --- a/src/gdbmseq.c +++ b/src/gdbmseq.c @@ -22,10 +22,6 @@ #include "gdbmdefs.h" -/* Special extern for this file. */ -extern char *_gdbm_read_entry (GDBM_FILE , int); - - /* Find and read the next entry in the hash structure for DBF starting at ELEM_LOC of the current bucket and using RETURN_VAL as the place to put the data that is found. @@ -61,11 +57,14 @@ get_next_key (GDBM_FILE dbf, int elem_loc, datum *return_val) /* Check to see if there was a next bucket. */ if (dbf->bucket_dir < GDBM_DIR_COUNT (dbf)) - _gdbm_get_bucket (dbf, dbf->bucket_dir); + { + if (_gdbm_get_bucket (dbf, dbf->bucket_dir)) + return; + } else { /* No next key, just return. */ - gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, 0); + gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, FALSE); return; } } @@ -74,6 +73,8 @@ get_next_key (GDBM_FILE dbf, int elem_loc, datum *return_val) /* Found the next key, read it into return_val. */ find_data = _gdbm_read_entry (dbf, elem_loc); + if (!find_data) + return; return_val->dsize = dbf->bucket->h_table[elem_loc].key_size; if (return_val->dsize == 0) return_val->dptr = (char *) malloc (1); @@ -82,7 +83,7 @@ get_next_key (GDBM_FILE dbf, int elem_loc, datum *return_val) if (return_val->dptr == NULL) { return_val->dsize = 0; - gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, 0); + gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, FALSE); } else memcpy (return_val->dptr, find_data, return_val->dsize); @@ -104,7 +105,7 @@ gdbm_firstkey (GDBM_FILE dbf) GDBM_ASSERT_CONSISTENCY (dbf, return_val); /* Initialize the gdbm_errno variable. */ - gdbm_set_errno (dbf, GDBM_NO_ERROR, 0); + gdbm_set_errno (dbf, GDBM_NO_ERROR, FALSE); /* Get the first bucket. */ _gdbm_get_bucket (dbf, 0); @@ -131,12 +132,12 @@ gdbm_nextkey (GDBM_FILE dbf, datum key) GDBM_ASSERT_CONSISTENCY (dbf, return_val); /* Initialize the gdbm_errno variable. */ - gdbm_set_errno (dbf, GDBM_NO_ERROR, 0); + gdbm_set_errno (dbf, GDBM_NO_ERROR, FALSE); /* Do we have a valid key? */ if (key.dptr == NULL) { - gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, 0); /* FIXME: special error code perhaps */ + gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, FALSE); /* FIXME: special error code perhaps */ return return_val; } |