summaryrefslogtreecommitdiffabout
path: root/src/gdbmstore.c
authorSergey Poznyakoff <gray@gnu.org.ua>2016-07-09 07:18:02 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2016-07-09 07:18:02 (GMT)
commit0eafbb93c82a489204f54259593f2aaeb9cdbfc4 (patch) (side-by-side diff)
treee7fad3689d9110d7132ee2fe5f9bdcc2011474ef /src/gdbmstore.c
parente4d2c56435a23ce1d3a0c06518231f632311de04 (diff)
downloadgdbm-0eafbb93c82a489204f54259593f2aaeb9cdbfc4.tar.gz
gdbm-0eafbb93c82a489204f54259593f2aaeb9cdbfc4.tar.bz2
All gdbm functions return immediately if the DB is in inconsistent sate (needs recovery).
* src/gdbm.h.in (GDBM_NEED_RECOVERY): New error code. * src/gdbmdefs.h (GDBM_ASSERT_CONSISTENCY): New macro. * src/gdbmerrno.c: Update. * src/gdbmopen.c (gdbm_open): Initialize need_recovery and last_error. * src/gdbmcount.c (gdbm_count): Return immediately if the database needs recovery. * src/gdbmdelete.c (gdbm_delete): Likewise. * src/gdbmdump.c (gdbm_dump_to_file, gdbm_dump): Likewise. * src/gdbmexists.c (gdbm_exists): Likewise. * src/gdbmexp.c (gdbm_export_to_file): Likewise. * src/gdbmfetch.c (gdbm_fetch): Likewise. * src/gdbmimp.c (gdbm_import_from_file): Likewise. * src/gdbmreorg.c (gdbm_reorganize): Likewise. * src/gdbmseq.c (gdbm_firstkey): Likewise. * src/gdbmsetopt.c (gdbm_nextkey): Likewise. * src/gdbmstore.c (gdbm_store): Likewise. * src/gdbmsync.c (gdbm_sync): Likewise.
Diffstat (limited to 'src/gdbmstore.c') (more/less context) (ignore whitespace changes)
-rw-r--r--src/gdbmstore.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gdbmstore.c b/src/gdbmstore.c
index f166ba9..ec4b96b 100644
--- a/src/gdbmstore.c
+++ b/src/gdbmstore.c
@@ -47,6 +47,9 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags)
int new_size; /* Used in allocating space. */
int rc;
+ /* Return immediately if the database needs recovery */
+ GDBM_ASSERT_CONSISTENCY (dbf, -1);
+
/* First check to make sure this guy is a writer. */
if (dbf->read_write == GDBM_READER)
{
@@ -99,7 +102,7 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags)
}
}
else if (gdbm_errno == GDBM_ITEM_NOT_FOUND)
- gdbm_set_errno (dbf, GDBM_NO_ERROR, 0); //clear error state
+ gdbm_set_errno (dbf, GDBM_NO_ERROR, 0); /* clear error state */
else
return -1;

Return to:

Send suggestions and report system problems to the System administrator.