aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2018-08-12 20:17:14 +0300
committerSergey Poznyakoff <gray@gnu.org>2018-08-12 20:17:14 +0300
commit4e23fa7b90b56408d480ba8c7556b190757ea2c7 (patch)
tree7763d0dee3681c0a733a490feaf6dbdcf54e3f8d
parent6311c6b4d7ebe989447151a3e0f8b8ae0b5997d3 (diff)
downloadgdbm-4e23fa7b90b56408d480ba8c7556b190757ea2c7.tar.gz
gdbm-4e23fa7b90b56408d480ba8c7556b190757ea2c7.tar.bz2
Bugfix
* src/gdbmdump.c (_gdbm_dump_ascii): Clear the GDBM_ITEM_NOT_FOUND error. * src/gdbmexp.c (gdbm_export_to_file): Likewise. * NEWS: Update.
-rw-r--r--NEWS9
-rw-r--r--src/gdbmdump.c14
-rw-r--r--src/gdbmexp.c7
3 files changed, 23 insertions, 7 deletions
diff --git a/NEWS b/NEWS
index b883bc7..1ca9a32 100644
--- a/NEWS
+++ b/NEWS
@@ -1,19 +1,24 @@
-GNU dbm NEWS -- history of user-visible changes. 2018-07-30
+GNU dbm NEWS -- history of user-visible changes. 2018-08-12
Copyright (C) 1990-2018 Free Software Foundation, Inc.
See the end of file for copying conditions.
Please send gdbm bug reports to <bug-gdbm@gnu.org>.
Version 1.17 - 2018-07-30
* int gdbm_close and gdbm_sync
Both functions now return 0 on success. On error, they return -1
and set gdbm_errno and errno to the appropriate error codes.
+* Fix bug in gdbm_dump function
+
+The function did not clear the GDBM_ITEM_NOT_FOUND error marker, which
+is set upon its normal termination.
+
Version 1.16 - 2018-06-27
* Maintain sorting order of the available block list after coalescing
This is a very long-standing bug, dated back to the time when optional
@@ -481,11 +486,11 @@ Copyright (C) 1990-2017 Free Software Foundation, Inc.
under the above conditions, provided also that they
carry prominent notices stating who last changed them.
Local variables:
mode: outline
paragraph-separate: "[ ]*$"
-eval: (add-hook 'write-file-hooks 'time-stamp)
+eval: (add-hook 'write-file-functions 'time-stamp)
time-stamp-start: "changes. "
time-stamp-format: "%:y-%02m-%02d"
time-stamp-end: "\n"
end:
diff --git a/src/gdbmdump.c b/src/gdbmdump.c
index daf6a43..2e6f5b0 100644
--- a/src/gdbmdump.c
+++ b/src/gdbmdump.c
@@ -109,23 +109,29 @@ _gdbm_dump_ascii (GDBM_FILE dbf, FILE *fp)
free (key.dptr);
free (data.dptr);
key = nextkey;
count++;
}
- if (rc == 0 && (rc = gdbm_last_errno (dbf)) == 0)
- {
-
/* FIXME: Something like that won't hurt, although load does not
use it currently. */
fprintf (fp, "#:count=%lu\n", (unsigned long) count);
fprintf (fp, "# End of data\n");
+
+ if (rc == 0)
+ {
+ rc = gdbm_last_errno (dbf);
+ if (rc == GDBM_ITEM_NOT_FOUND)
+ {
+ gdbm_clear_error (dbf);
+ gdbm_errno = GDBM_NO_ERROR;
+ rc = 0;
+ }
}
free (buffer);
-
return rc ? -1 : 0;
}
int
gdbm_dump_to_file (GDBM_FILE dbf, FILE *fp, int format)
{
diff --git a/src/gdbmexp.c b/src/gdbmexp.c
index 25ad5b2..56a792a 100644
--- a/src/gdbmexp.c
+++ b/src/gdbmexp.c
@@ -80,13 +80,18 @@ gdbm_export_to_file (GDBM_FILE dbf, FILE *fp)
free (key.dptr);
free (data.dptr);
key = nextkey;
count++;
}
- if (gdbm_errno != GDBM_ITEM_NOT_FOUND)
+ if (gdbm_last_errno (dbf) == GDBM_ITEM_NOT_FOUND)
+ {
+ gdbm_clear_error (dbf);
+ gdbm_errno = GDBM_NO_ERROR;
+ }
+ else
return -1;
return count;
write_fail:

Return to:

Send suggestions and report system problems to the System administrator.