diff options
Diffstat (limited to 'src/gdbmclose.c')
-rw-r--r-- | src/gdbmclose.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/gdbmclose.c b/src/gdbmclose.c index ead9187..c438ec1 100644 --- a/src/gdbmclose.c +++ b/src/gdbmclose.c @@ -26,10 +26,13 @@ Before freeing members of DBF, check and make sure that they were allocated. */ -void +int gdbm_close (GDBM_FILE dbf) { int index; /* For freeing the bucket cache. */ + int syserrno; + + gdbm_set_errno (dbf, GDBM_NO_ERROR, FALSE); if (dbf->desc != -1) { @@ -44,9 +47,12 @@ gdbm_close (GDBM_FILE dbf) if (dbf->file_locking) _gdbm_unlock_file (dbf); - close (dbf->desc); + if (close (dbf->desc)) + GDBM_SET_ERRNO (dbf, GDBM_FILE_CLOSE_ERROR, FALSE); } + syserrno = gdbm_last_syserr (dbf); + gdbm_clear_error (dbf); free (dbf->name); @@ -63,4 +69,10 @@ gdbm_close (GDBM_FILE dbf) } free (dbf->header); free (dbf); + if (gdbm_errno) + { + errno = syserrno; + return -1; + } + return 0; } |