diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-09 08:40:04 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-09 08:47:16 +0300 |
commit | 479a469033903a76b9c073806037dd66176f3da0 (patch) | |
tree | 2841b611288f9343868e6ded82909b096a62e121 /src/gdbmstore.c | |
parent | 2efd8358711ab3ea6c0ecaab75d195837b4b3e37 (diff) | |
download | gdbm-479a469033903a76b9c073806037dd66176f3da0.tar.gz gdbm-479a469033903a76b9c073806037dd66176f3da0.tar.bz2 |
Per-database error state.
Last error code is stored in the database file structure as
well as in the global gdbm_errno. Special functions are provided
for retrieving and clearing the last error state.
* src/gdbmdefs.h (gdbm_file_info): New member: last_error
* src/gdbm.h.in (gdbm_last_errno, gdbm_set_errno)
(gdbm_clear_error): New protos.
* src/gdbmerrno.c (gdbm_last_errno, gdbm_set_errno)
(gdbm_clear_error): New functions
* NEWS: Update.
* compat/dbminit.c: Use gdbm_set_errno to set error state.
* compat/dbmopen.c: Likewise.
* src/bucket.c: Likewise.
* src/findkey.c: Likewise.
* src/gdbm_load.c: Likewise.
* src/gdbmcount.c: 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/gdbmstore.c')
-rw-r--r-- | src/gdbmstore.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/gdbmstore.c b/src/gdbmstore.c index 3ba882e..f166ba9 100644 --- a/src/gdbmstore.c +++ b/src/gdbmstore.c @@ -50,7 +50,7 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags) /* First check to make sure this guy is a writer. */ if (dbf->read_write == GDBM_READER) { - gdbm_errno = GDBM_READER_CANT_STORE; + gdbm_set_errno (dbf, GDBM_READER_CANT_STORE, 0); return -1; } @@ -58,12 +58,12 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags) NULL dptr returned by a lookup procedure indicates an error. */ if ((key.dptr == NULL) || (content.dptr == NULL)) { - gdbm_errno = GDBM_ILLEGAL_DATA; + gdbm_set_errno (dbf, GDBM_ILLEGAL_DATA, 0); return -1; } /* Initialize the gdbm_errno variable. */ - gdbm_errno = GDBM_NO_ERROR; + gdbm_set_errno (dbf, GDBM_NO_ERROR, 0); /* Look for the key in the file. A side effect loads the correct bucket and calculates the hash value. */ @@ -94,11 +94,13 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags) } else { - gdbm_errno = GDBM_CANNOT_REPLACE; + gdbm_set_errno (dbf, GDBM_CANNOT_REPLACE, 0); return 1; } } - else if (gdbm_errno != GDBM_ITEM_NOT_FOUND) + else if (gdbm_errno == GDBM_ITEM_NOT_FOUND) + gdbm_set_errno (dbf, GDBM_NO_ERROR, 0); //clear error state + else return -1; /* Get the file address for the new space. |