aboutsummaryrefslogtreecommitdiff
path: root/src/gdbmclose.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gdbmclose.c')
-rw-r--r--src/gdbmclose.c16
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;
}

Return to:

Send suggestions and report system problems to the System administrator.