From a7659db9f8b537d9908b56be65e68e88a5755cabf7921ac17b2a4907990c2877 Mon Sep 17 00:00:00 2001 From: Adam Majer Date: Tue, 19 Jun 2018 06:29:44 +0000 Subject: [PATCH 1/6] Accepting request 617307 from home:AndreasStieger:branches:devel:libraries:c_c++ gdbm 1.15 OBS-URL: https://build.opensuse.org/request/show/617307 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gdbm?expand=0&rev=53 --- baselibs.conf | 4 ++-- gdbm-1.14.1.tar.gz | 3 --- gdbm-1.14.1.tar.gz.sig | 7 ------- gdbm-1.15.tar.gz | 3 +++ gdbm-1.15.tar.gz.sig | 7 +++++++ gdbm-no-build-date.patch | 2 +- gdbm.changes | 12 ++++++++++++ gdbm.spec | 4 ++-- 8 files changed, 27 insertions(+), 15 deletions(-) delete mode 100644 gdbm-1.14.1.tar.gz delete mode 100644 gdbm-1.14.1.tar.gz.sig create mode 100644 gdbm-1.15.tar.gz create mode 100644 gdbm-1.15.tar.gz.sig diff --git a/baselibs.conf b/baselibs.conf index 814b45e..91df768 100644 --- a/baselibs.conf +++ b/baselibs.conf @@ -1,7 +1,7 @@ -libgdbm5 +libgdbm6 obsoletes "gdbm- < " libgdbm_compat4 conflicts "libgdbm3-" gdbm-devel - requires "libgdbm5- = " + requires "libgdbm6- = " requires "libgdbm_compat4- = " diff --git a/gdbm-1.14.1.tar.gz b/gdbm-1.14.1.tar.gz deleted file mode 100644 index 2a6591b..0000000 --- a/gdbm-1.14.1.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cdceff00ffe014495bed3aed71c7910aa88bf29379f795abc0f46d4ee5f8bc5f -size 894412 diff --git a/gdbm-1.14.1.tar.gz.sig b/gdbm-1.14.1.tar.gz.sig deleted file mode 100644 index 9df4a94..0000000 --- a/gdbm-1.14.1.tar.gz.sig +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.15 (GNU/Linux) - -iEYEABECAAYFAlpM/RMACgkQNgKwf1XQxzJ/VACghGZzncnAAgNRdtWl0Q6J1WR+ -i1EAn1yWMe7Y31thdTCnZumJAOs6Cl6Y -=Ixl8 ------END PGP SIGNATURE----- diff --git a/gdbm-1.15.tar.gz b/gdbm-1.15.tar.gz new file mode 100644 index 0000000..9afdd15 --- /dev/null +++ b/gdbm-1.15.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9fde3207f67ed8a5a5ddd8ad5e7acf7b27c2cf0f20dfbdde876dcd6e3d2dc0e +size 928945 diff --git a/gdbm-1.15.tar.gz.sig b/gdbm-1.15.tar.gz.sig new file mode 100644 index 0000000..2b01cc1 --- /dev/null +++ b/gdbm-1.15.tar.gz.sig @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iG4EABECAC4WIQQyX2UMTCtq1YgHMno2ArB/VdDHMgUCWyUxuRAcZ3JheUBnbnUu +b3JnLnVhAAoJEDYCsH9V0McyMAcAoKEk7sHGXLHr1ImiWKNNqobi91lNAJ9gRlO5 +3NysFXgeFgAGxGcskNSdwQ== +=2y19 +-----END PGP SIGNATURE----- diff --git a/gdbm-no-build-date.patch b/gdbm-no-build-date.patch index 441080e..e1ef85c 100644 --- a/gdbm-no-build-date.patch +++ b/gdbm-no-build-date.patch @@ -5,7 +5,7 @@ Index: src/version.c @@ -25,9 +25,6 @@ making the distdir. */ const char * gdbm_version = "GDBM version " PACKAGE_VERSION ". " - "03/01/2018" + "16/06/2018" -#if defined(__STDC__) && defined(__DATE__) && defined(__TIME__) - " (built " __DATE__ " " __TIME__ ")" -#endif diff --git a/gdbm.changes b/gdbm.changes index 33ac0ee..fb21de3 100644 --- a/gdbm.changes +++ b/gdbm.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Sun Jun 17 13:57:31 UTC 2018 - astieger@suse.com + +- update to 1.15: + * Extensive database consistency checking + * Improved error checking + * Removed gdbm-1.8.3 compatibility layer + * Commands can be given to gdbmtool in the command line + * Fixed data conversion bugs in storing structured keys or content + * New member in the gdbm_recovery structure: duplicate_keys + * New error codes + ------------------------------------------------------------------- Wed May 23 08:20:32 UTC 2018 - tchvatal@suse.com diff --git a/gdbm.spec b/gdbm.spec index 297b6e4..6b06334 100644 --- a/gdbm.spec +++ b/gdbm.spec @@ -16,10 +16,10 @@ # -%define lname libgdbm5 +%define lname libgdbm6 %define lcompat libgdbm_compat4 Name: gdbm -Version: 1.14.1 +Version: 1.15 Release: 0 Summary: GNU dbm key/data database License: GPL-3.0-or-later From 86239aab04d028ced4b77d1fed327ed844a1c1f28c0e656f71b0f94cb78c60d1 Mon Sep 17 00:00:00 2001 From: Petr Gajdos Date: Mon, 16 Jul 2018 09:26:50 +0000 Subject: [PATCH 2/6] - update to 1.16: * Fix typo * New gdbmtool variables: coalesce and centfree * src/falloc.c (avail_lookup): Remove the start parameter. OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gdbm?expand=0&rev=54 --- gdbm-1.15.tar.gz | 3 --- gdbm-1.15.tar.gz.sig | 7 ------- gdbm-1.16.tar.gz | 3 +++ gdbm-1.16.tar.gz.sig | 7 +++++++ gdbm-no-build-date.patch | 8 ++++---- gdbm.changes | 8 ++++++++ gdbm.spec | 4 ++-- 7 files changed, 24 insertions(+), 16 deletions(-) delete mode 100644 gdbm-1.15.tar.gz delete mode 100644 gdbm-1.15.tar.gz.sig create mode 100644 gdbm-1.16.tar.gz create mode 100644 gdbm-1.16.tar.gz.sig diff --git a/gdbm-1.15.tar.gz b/gdbm-1.15.tar.gz deleted file mode 100644 index 9afdd15..0000000 --- a/gdbm-1.15.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f9fde3207f67ed8a5a5ddd8ad5e7acf7b27c2cf0f20dfbdde876dcd6e3d2dc0e -size 928945 diff --git a/gdbm-1.15.tar.gz.sig b/gdbm-1.15.tar.gz.sig deleted file mode 100644 index 2b01cc1..0000000 --- a/gdbm-1.15.tar.gz.sig +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iG4EABECAC4WIQQyX2UMTCtq1YgHMno2ArB/VdDHMgUCWyUxuRAcZ3JheUBnbnUu -b3JnLnVhAAoJEDYCsH9V0McyMAcAoKEk7sHGXLHr1ImiWKNNqobi91lNAJ9gRlO5 -3NysFXgeFgAGxGcskNSdwQ== -=2y19 ------END PGP SIGNATURE----- diff --git a/gdbm-1.16.tar.gz b/gdbm-1.16.tar.gz new file mode 100644 index 0000000..b589687 --- /dev/null +++ b/gdbm-1.16.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8a18bc6259da0c3eefefb018f8aa298fddc6f86c6fc0f0dec73270896ab512f +size 936526 diff --git a/gdbm-1.16.tar.gz.sig b/gdbm-1.16.tar.gz.sig new file mode 100644 index 0000000..1a38f41 --- /dev/null +++ b/gdbm-1.16.tar.gz.sig @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iG4EABECAC4WIQQyX2UMTCtq1YgHMno2ArB/VdDHMgUCWzPg2hAcZ3JheUBnbnUu +b3JnLnVhAAoJEDYCsH9V0McyjcoAn3DTuDAPFYsRv+sbZ4wZbUWuupKqAJ9Uzkwj +5kkd5PRCPdUUWx0wj8SQBQ== +=EEa4 +-----END PGP SIGNATURE----- diff --git a/gdbm-no-build-date.patch b/gdbm-no-build-date.patch index e1ef85c..cb11b90 100644 --- a/gdbm-no-build-date.patch +++ b/gdbm-no-build-date.patch @@ -1,11 +1,11 @@ -Index: src/version.c +Index: gdbm-1.16/src/version.c =================================================================== ---- src/version.c.orig -+++ src/version.c +--- gdbm-1.16.orig/src/version.c 2018-07-16 11:21:00.084356582 +0200 ++++ gdbm-1.16/src/version.c 2018-07-16 11:23:03.453571017 +0200 @@ -25,9 +25,6 @@ making the distdir. */ const char * gdbm_version = "GDBM version " PACKAGE_VERSION ". " - "16/06/2018" + "27/06/2018" -#if defined(__STDC__) && defined(__DATE__) && defined(__TIME__) - " (built " __DATE__ " " __TIME__ ")" -#endif diff --git a/gdbm.changes b/gdbm.changes index fb21de3..551896e 100644 --- a/gdbm.changes +++ b/gdbm.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Mon Jul 16 09:24:48 UTC 2018 - pgajdos@suse.com + +- update to 1.16: + * Fix typo + * New gdbmtool variables: coalesce and centfree + * src/falloc.c (avail_lookup): Remove the start parameter. + ------------------------------------------------------------------- Sun Jun 17 13:57:31 UTC 2018 - astieger@suse.com diff --git a/gdbm.spec b/gdbm.spec index 6b06334..a329ae2 100644 --- a/gdbm.spec +++ b/gdbm.spec @@ -19,7 +19,7 @@ %define lname libgdbm6 %define lcompat libgdbm_compat4 Name: gdbm -Version: 1.15 +Version: 1.16 Release: 0 Summary: GNU dbm key/data database License: GPL-3.0-or-later @@ -104,7 +104,7 @@ to develop applications that require these. %prep %setup -q -%patch4 +%patch4 -p1 %build %configure \ From 852e755c761ed42fc7db3069d15746df3e2d54cc80bd466bf5517444864d4375 Mon Sep 17 00:00:00 2001 From: Petr Gajdos Date: Mon, 16 Jul 2018 09:29:50 +0000 Subject: [PATCH 3/6] (_gdbm_put_av_elem): Rewrite the "can_merge" loop. OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gdbm?expand=0&rev=55 --- gdbm.changes | 1 + 1 file changed, 1 insertion(+) diff --git a/gdbm.changes b/gdbm.changes index 551896e..b29c13c 100644 --- a/gdbm.changes +++ b/gdbm.changes @@ -5,6 +5,7 @@ Mon Jul 16 09:24:48 UTC 2018 - pgajdos@suse.com * Fix typo * New gdbmtool variables: coalesce and centfree * src/falloc.c (avail_lookup): Remove the start parameter. + (_gdbm_put_av_elem): Rewrite the "can_merge" loop. ------------------------------------------------------------------- Sun Jun 17 13:57:31 UTC 2018 - astieger@suse.com From e0a668e3a007b8aae2f119ad71fdefa544c2fe8bf96daf1c5d15181d00ce5201 Mon Sep 17 00:00:00 2001 From: Petr Gajdos Date: Mon, 16 Jul 2018 09:55:40 +0000 Subject: [PATCH 4/6] - added gdbm-close-and-sync-return-value.patch see https://puszcza.gnu.org.ua/bugs/index.php?399 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gdbm?expand=0&rev=56 --- gdbm-close-and-sync-return-value.patch | 603 +++++++++++++++++++++++++ gdbm.changes | 2 + gdbm.spec | 11 + 3 files changed, 616 insertions(+) create mode 100644 gdbm-close-and-sync-return-value.patch diff --git a/gdbm-close-and-sync-return-value.patch b/gdbm-close-and-sync-return-value.patch new file mode 100644 index 0000000..e2d6046 --- /dev/null +++ b/gdbm-close-and-sync-return-value.patch @@ -0,0 +1,603 @@ +From 030e685eb9df82f63d73a1bf206da84b7aa52374 Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Sun, 01 Jul 2018 07:08:55 +0000 +Subject: Change return value of gdbm_close and gdbm_sync + +* src/gdbm.h.in (gdbm_close, gdbm_sync): Return int +(GDBM_FILE_CLOSE_ERROR, GDBM_FILE_SYNC_ERROR): New error codes. +* src/gdbmclose.c (gdbm_close): Return 0 on success, -1 on failure. +Set gdbm_errno and errno. +* src/gdbmsync.c (gdbm_sync): Likewise. +* src/gdbmerrno.c: Handle new error codes. +* src/mmap.c (_gdbm_mapped_sync): Set gdbm_errno. +* src/proto.h (gdbm_file_sync): Set gdbm_errno. + +* doc/gdbm.3: Document changes. +* doc/gdbm.texi: Document changes. +* NEWS: Document changes. +* configure.ac: Set patchlevel. + +* tests/Makefile.am: Add new test. +* tests/testsuite.at: Add new test. +* tests/closerr.at: New test case. +* tests/closerr.c: New test program. +* tests/gtdel.c: Check gdbm_close return. +* tests/gtdump.c: Likewise. +* tests/gtfetch.c: Likewise. +* tests/gtload.c: Likewise. +* tests/gtopt.c: Likewise. +* tests/gtrecover.c: Likewise. +--- +diff --git a/NEWS b/NEWS +index 3093d10..f81a442 100644 +--- a/NEWS ++++ b/NEWS +@@ -1,9 +1,17 @@ +-GNU dbm NEWS -- history of user-visible changes. 2018-06-27 ++GNU dbm NEWS -- history of user-visible changes. 2018-07-01 + Copyright (C) 1990-2018 Free Software Foundation, Inc. + See the end of file for copying conditions. + + Please send gdbm bug reports to . + ++Version 1.16.90 (Git) ++ ++* 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. ++ ++ + Version 1.16 - 2018-06-27 + + * Maintain sorting order of the available block list after coalescing +diff --git a/configure.ac b/configure.ac +index 4306bcd..3ca6252 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -17,7 +17,7 @@ + + m4_define([_GDBM_VERSION_MAJOR], 1) + m4_define([_GDBM_VERSION_MINOR], 16) +-dnl m4_define([_GDBM_VERSION_PATCH], 0) ++m4_define([_GDBM_VERSION_PATCH], 90) + + AC_INIT([gdbm], + _GDBM_VERSION_MAJOR._GDBM_VERSION_MINOR[]m4_ifdef([_GDBM_VERSION_PATCH],._GDBM_VERSION_PATCH), +diff --git a/doc/gdbm.3 b/doc/gdbm.3 +index 6107d9a..d803748 100644 +--- a/doc/gdbm.3 ++++ b/doc/gdbm.3 +@@ -13,7 +13,7 @@ + .\" + .\" You should have received a copy of the GNU General Public License + .\" along with GDBM. If not, see . */ +-.TH GDBM 3 "July 8, 2016" "GDBM" "GDBM User Reference" ++.TH GDBM 3 "July 1, 2018" "GDBM" "GDBM User Reference" + .SH NAME + GDBM \- The GNU database manager. Includes \fBdbm\fR and \fBndbm\fR + compatibility. +@@ -31,7 +31,7 @@ compatibility. + .ti +21 + .BI "void (*" fatal_func ")(const char *))"; + .br +-.BI "void gdbm_close (GDBM_FILE " dbf ");" ++.BI "int gdbm_close (GDBM_FILE " dbf ");" + .br + .BI "int gdbm_store (GDBM_FILE " dbf ", datum " key ", datum " content ", int " flag ); + .br +@@ -45,7 +45,7 @@ compatibility. + .br + .BI "int gdbm_reorganize (GDBM_FILE " dbf ");" + .br +-.BI "void gdbm_sync (GDBM_FILE " dbf ");" ++.BI "int gdbm_sync (GDBM_FILE " dbf ");" + .br + .BI "int gdbm_exists (GDBM_FILE " dbf ", datum " key ); + .br +@@ -183,7 +183,7 @@ returned from \fBgdbm_open\fR. + It is important that every file opened is also closed. This is needed to + update the reader/writer count on the file. This is done by: + +-.BI "void gdbm_close (GDBM_FILE " dbf ");" ++.BI "int gdbm_close (GDBM_FILE " dbf ");" + + The database is used by 3 primary routines. The first stores data in the + database. +@@ -308,7 +308,7 @@ wait for writes to be flushed to the disk before continuing. + The following routine can be used to guarantee that the database is + physically written to the disk file. + +-.BI "void gdbm_sync (GDBM_FILE " dbf ");" ++.BI "int gdbm_sync (GDBM_FILE " dbf ");" + + It will not return until the disk file state is syncronized with the + in-memory state of the database. +diff --git a/doc/gdbm.texi b/doc/gdbm.texi +index b5ba53d..4a0b1a7 100644 +--- a/doc/gdbm.texi ++++ b/doc/gdbm.texi +@@ -215,14 +215,14 @@ contains a definition of these functions. + #include + + GDBM_FILE gdbm_open(name, block_size, flags, mode, fatal_func); +-void gdbm_close(dbf); ++int gdbm_close(dbf); + int gdbm_store(dbf, key, content, flag); + datum gdbm_fetch(dbf, key); + int gdbm_delete(dbf, key); + datum gdbm_firstkey(dbf); + datum gdbm_nextkey(dbf, key); + int gdbm_reorganize(dbf); +-void gdbm_sync(dbf); ++int gdbm_sync(dbf); + int gdbm_exists(dbf, key); + char *gdbm_strerror(errno); + int gdbm_setopt(dbf, option, value, size); +@@ -369,7 +369,7 @@ Copy file ownership and mode from @var{src} to @var{dst}. + It is important that every file opened is also closed. This is needed to + update the reader/writer count on the file: + +-@deftypefn {gdbm interface} void gdbm_close (GDBM_FILE @var{dbf}) ++@deftypefn {gdbm interface} int gdbm_close (GDBM_FILE @var{dbf}) + This function closes the @code{gdbm} file and frees all memory + associated with it. The parameter is: + +@@ -377,6 +377,10 @@ associated with it. The parameter is: + @item dbf + The pointer returned by @code{gdbm_open}. + @end table ++ ++@code{Gdbm_close} returns 0 on success. On error, it sets ++@code{gdbm_errno} and system @code{errno} variables to the codes ++describing the error and returns -1. + @end deftypefn + + @node Count +@@ -678,7 +682,7 @@ abnormal fashion. The following function allows the programmer to + make sure the disk version of the database has been completely updated + with all changes to the current time. + +-@deftypefn {gdbm interface} void gdbm_sync (GDBM_FILE @var{dbf}) ++@deftypefn {gdbm interface} int gdbm_sync (GDBM_FILE @var{dbf}) + Synchronizes the changes in @var{dbf} with its disk file. The + parameter is a pointer returned by @code{gdbm_open}. + +@@ -687,6 +691,10 @@ have been made to the database and before some long waiting time. + The @code{gdbm_close} function automatically calls the equivalent of + @code{gdbm_sync} so no call is needed if the database is to be closed + immediately after the set of changes have been made. ++ ++@code{Gdbm_sync} returns 0 on success. On error, it sets ++@code{gdbm_errno} and system @code{errno} variables to the codes ++describing the error and returns -1. + @end deftypefn + + @node Flat files +diff --git a/src/gdbm.h.in b/src/gdbm.h.in +index e6bdc58..6318ad8 100644 +--- a/src/gdbm.h.in ++++ b/src/gdbm.h.in +@@ -113,7 +113,7 @@ extern GDBM_FILE gdbm_fd_open (int fd, const char *file_name, int block_size, + int flags, void (*fatal_func) (const char *)); + extern GDBM_FILE gdbm_open (const char *, int, int, int, + void (*)(const char *)); +-extern void gdbm_close (GDBM_FILE); ++extern int gdbm_close (GDBM_FILE); + extern int gdbm_store (GDBM_FILE, datum, datum, int); + extern datum gdbm_fetch (GDBM_FILE, datum); + extern int gdbm_delete (GDBM_FILE, datum); +@@ -121,7 +121,7 @@ extern datum gdbm_firstkey (GDBM_FILE); + extern datum gdbm_nextkey (GDBM_FILE, datum); + extern int gdbm_reorganize (GDBM_FILE); + +-extern void gdbm_sync (GDBM_FILE); ++extern int gdbm_sync (GDBM_FILE); + extern int gdbm_exists (GDBM_FILE, datum); + extern int gdbm_setopt (GDBM_FILE, int, void *, int); + extern int gdbm_fdesc (GDBM_FILE); +@@ -225,9 +225,11 @@ extern int gdbm_copy_meta (GDBM_FILE dst, GDBM_FILE src); + # define GDBM_BAD_AVAIL 34 + # define GDBM_BAD_HASH_TABLE 35 + # define GDBM_BAD_DIR_ENTRY 36 +- ++# define GDBM_FILE_CLOSE_ERROR 37 ++# define GDBM_FILE_SYNC_ERROR 38 ++ + # define _GDBM_MIN_ERRNO 0 +-# define _GDBM_MAX_ERRNO GDBM_BAD_DIR_ENTRY ++# define _GDBM_MAX_ERRNO GDBM_FILE_SYNC_ERROR + + /* This one was never used and will be removed in the future */ + # define GDBM_UNKNOWN_UPDATE GDBM_UNKNOWN_ERROR +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; + } +diff --git a/src/gdbmerrno.c b/src/gdbmerrno.c +index 8e24b82..4ce7f9d 100644 +--- a/src/gdbmerrno.c ++++ b/src/gdbmerrno.c +@@ -136,7 +136,9 @@ const char * const gdbm_errlist[_GDBM_MAX_ERRNO+1] = { + [GDBM_BAD_HEADER] = N_("Malformed database file header"), + [GDBM_BAD_AVAIL] = N_("Malformed avail_block"), + [GDBM_BAD_HASH_TABLE] = N_("Malformed hash table"), +- [GDBM_BAD_DIR_ENTRY] = N_("Invalid directory entry") ++ [GDBM_BAD_DIR_ENTRY] = N_("Invalid directory entry"), ++ [GDBM_FILE_CLOSE_ERROR] = N_("Error closing file"), ++ [GDBM_FILE_SYNC_ERROR] = N_("Error synchronizing file") + }; + + const char * +@@ -178,7 +180,9 @@ int const gdbm_syserr[_GDBM_MAX_ERRNO+1] = { + [GDBM_FILE_SEEK_ERROR] = 1, + [GDBM_FILE_READ_ERROR] = 1, + [GDBM_FILE_STAT_ERROR] = 1, +- [GDBM_BACKUP_FAILED] = 1 ++ [GDBM_BACKUP_FAILED] = 1, ++ [GDBM_FILE_CLOSE_ERROR] = 1, ++ [GDBM_FILE_SYNC_ERROR] = 1 + }; + + /* Returns true if system errno value is meaningful for GDBM error +diff --git a/src/gdbmsync.c b/src/gdbmsync.c +index 5d94cbe..a8d1002 100644 +--- a/src/gdbmsync.c ++++ b/src/gdbmsync.c +@@ -24,7 +24,7 @@ + + /* Make sure the database is all on disk. */ + +-void ++int + gdbm_sync (GDBM_FILE dbf) + { + /* Return immediately if the database needs recovery */ +@@ -34,6 +34,5 @@ gdbm_sync (GDBM_FILE dbf) + gdbm_set_errno (dbf, GDBM_NO_ERROR, FALSE); + + /* Do the sync on the file. */ +- gdbm_file_sync (dbf); +- ++ return gdbm_file_sync (dbf); + } +diff --git a/src/mmap.c b/src/mmap.c +index 008a0f8..48e84ae 100644 +--- a/src/mmap.c ++++ b/src/mmap.c +@@ -392,12 +392,16 @@ _gdbm_mapped_lseek (GDBM_FILE dbf, off_t offset, int whence) + int + _gdbm_mapped_sync (GDBM_FILE dbf) + { ++ int rc; ++ + if (dbf->mapped_region) +- { +- return msync (dbf->mapped_region, dbf->mapped_size, +- MS_SYNC | MS_INVALIDATE); +- } +- return fsync (dbf->desc); ++ rc = msync (dbf->mapped_region, dbf->mapped_size, ++ MS_SYNC | MS_INVALIDATE); ++ else ++ rc = fsync (dbf->desc); ++ if (rc) ++ GDBM_SET_ERRNO (dbf, GDBM_FILE_SYNC_ERROR, TRUE); ++ return rc; + } + + #endif +diff --git a/src/proto.h b/src/proto.h +index 22f29e4..02f6f9b 100644 +--- a/src/proto.h ++++ b/src/proto.h +@@ -115,16 +115,21 @@ gdbm_file_seek (GDBM_FILE dbf, off_t off, int whence) + #endif + } + +-static inline void ++static inline int + gdbm_file_sync (GDBM_FILE dbf) + { + #if HAVE_MMAP +- _gdbm_mapped_sync (dbf); ++ return _gdbm_mapped_sync (dbf); + #elif HAVE_FSYNC +- fsync (dbf->desc); ++ if (fsync (dbf->desc)) ++ { ++ GDBM_SET_ERRNO (dbf, GDBM_FILE_SYNC_ERROR, TRUE); ++ return 1; ++ } + #else + sync (); + sync (); ++ return 0; + #endif + } + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 827af58..dbe17dd 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -54,6 +54,7 @@ TESTSUITE_AT = \ + cloexec01.at\ + cloexec02.at\ + cloexec03.at\ ++ closerr.at\ + dbmcreate00.at\ + dbmdel00.at\ + dbmdel01.at\ +@@ -108,6 +109,7 @@ if COMPAT_OPT + endif + + check_PROGRAMS = \ ++ closerr\ + fdop\ + g_open_ce\ + g_reorg_ce\ +diff --git a/tests/closerr.at b/tests/closerr.at +new file mode 100644 +index 0000000..5f5e208 +--- a/dev/null ++++ b/tests/closerr.at +@@ -0,0 +1,5 @@ ++# This file is part of GDBM testsuite. -*- autoconf -*- ++AT_SETUP([gdbm_close error]) ++AT_KEYWORDS([close]) ++AT_CHECK(closerr,1,[],[ignore]) ++AT_CLEANUP +diff --git a/tests/closerr.c b/tests/closerr.c +new file mode 100644 +index 0000000..5bc8fdc +--- a/dev/null ++++ b/tests/closerr.c +@@ -0,0 +1,56 @@ ++/* This file is part of GDBM test suite. ++ Copyright (C) 2018 Free Software Foundation, Inc. ++ ++ GDBM is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GDBM is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GDBM. If not, see . ++*/ ++#include "autoconf.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#include "gdbm.h" ++ ++int ++main (int argc, char **argv) ++{ ++ GDBM_FILE dbf; ++ char dbname[] = "junk.gdbm"; ++ int rc; ++ ++ assert (argc == 1); ++ ++ dbf = gdbm_open (dbname, 0, GDBM_NEWDB, 0600, NULL); ++ if (!dbf) ++ { ++ fprintf (stderr, "gdbm_open: %s; %s\n", gdbm_strerror (gdbm_errno), ++ strerror (errno)); ++ return 1; ++ } ++ if (close (gdbm_fdesc (dbf))) ++ { ++ perror ("close"); ++ return 77; ++ } ++ ++ if (gdbm_close (dbf)) ++ { ++ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), ++ strerror (errno)); ++ return 1; ++ } ++ ++ return 0; ++} +diff --git a/tests/gtdel.c b/tests/gtdel.c +index 729086c..d0c711d 100644 +--- a/tests/gtdel.c ++++ b/tests/gtdel.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include "gdbm.h" + #include "progname.h" + +@@ -93,6 +94,11 @@ main (int argc, char **argv) + rc = 2; + } + } +- gdbm_close (dbf); ++ if (gdbm_close (dbf)) ++ { ++ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), ++ strerror (errno)); ++ rc = 3; ++ } + exit (rc); + } +diff --git a/tests/gtdump.c b/tests/gtdump.c +index dcc27ac..fb27997 100644 +--- a/tests/gtdump.c ++++ b/tests/gtdump.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include "gdbm.h" + #include "progname.h" + +@@ -115,6 +116,11 @@ main (int argc, char **argv) + exit (1); + } + +- gdbm_close (dbf); ++ if (gdbm_close (dbf)) ++ { ++ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), ++ strerror (errno)); ++ exit (3); ++ } + exit (0); + } +diff --git a/tests/gtfetch.c b/tests/gtfetch.c +index c1ea45e..5070fcc 100644 +--- a/tests/gtfetch.c ++++ b/tests/gtfetch.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include "gdbm.h" + #include "progname.h" + +@@ -130,6 +131,11 @@ main (int argc, char **argv) + fputc ('\n', stdout); + } + +- gdbm_close (dbf); ++ if (gdbm_close (dbf)) ++ { ++ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), ++ strerror (errno)); ++ rc = 3; ++ } + exit (rc); + } +diff --git a/tests/gtload.c b/tests/gtload.c +index 21c89b2..1493236 100644 +--- a/tests/gtload.c ++++ b/tests/gtload.c +@@ -287,6 +287,11 @@ main (int argc, char **argv) + } + } + } +- gdbm_close (dbf); ++ if (gdbm_close (dbf)) ++ { ++ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), ++ strerror (errno)); ++ exit (3); ++ } + exit (0); + } +diff --git a/tests/gtopt.c b/tests/gtopt.c +index b461d56..236ae92 100644 +--- a/tests/gtopt.c ++++ b/tests/gtopt.c +@@ -406,7 +406,13 @@ main (int argc, char **argv) + } + } + +- gdbm_close (dbf); ++ if (gdbm_close (dbf)) ++ { ++ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), ++ strerror (errno)); ++ exit (3); ++ } ++ + exit (0); + } + +diff --git a/tests/gtrecover.c b/tests/gtrecover.c +index 0527c53..f5e6f97 100644 +--- a/tests/gtrecover.c ++++ b/tests/gtrecover.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + #include "gdbm.h" + #include "progname.h" + #include +@@ -119,6 +120,11 @@ main (int argc, char **argv) + + rc = gdbm_recover (dbf, &rcvr, rcvr_flags); + +- gdbm_close (dbf); ++ if (gdbm_close (dbf)) ++ { ++ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), ++ strerror (errno)); ++ rc = 3; ++ } + exit (rc); + } +diff --git a/tests/testsuite.at b/tests/testsuite.at +index b7b1e4e..efc2705 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -43,6 +43,8 @@ m4_include([delete00.at]) + m4_include([delete01.at]) + m4_include([delete02.at]) + ++m4_include([closerr.at]) ++ + AT_BANNER([Block size selection]) + m4_include([blocksize00.at]) + m4_include([blocksize01.at]) +-- +cgit v0.9.0.3 + diff --git a/gdbm.changes b/gdbm.changes index b29c13c..a935dc5 100644 --- a/gdbm.changes +++ b/gdbm.changes @@ -6,6 +6,8 @@ Mon Jul 16 09:24:48 UTC 2018 - pgajdos@suse.com * New gdbmtool variables: coalesce and centfree * src/falloc.c (avail_lookup): Remove the start parameter. (_gdbm_put_av_elem): Rewrite the "can_merge" loop. +- added gdbm-close-and-sync-return-value.patch + see https://puszcza.gnu.org.ua/bugs/index.php?399 ------------------------------------------------------------------- Sun Jun 17 13:57:31 UTC 2018 - astieger@suse.com diff --git a/gdbm.spec b/gdbm.spec index a329ae2..a462388 100644 --- a/gdbm.spec +++ b/gdbm.spec @@ -31,9 +31,16 @@ Source2: baselibs.conf Source4: %{name}.keyring # PATCH-FIX-SUSE: remove the build date from src/version.c Patch4: gdbm-no-build-date.patch +# should be fixed in 1.17 +# remove autoreconf with this patch +# https://puszcza.gnu.org.ua/bugs/index.php?399 +# http://git.gnu.org.ua/cgit/gdbm.git/commit/?id=030e685eb9df82f63d73a1bf206da84b7aa52374 +Patch5: gdbm-close-and-sync-return-value.patch BuildRequires: libtool BuildRequires: makeinfo BuildRequires: readline-devel +# gdbm-close-and-sync-return-value.patch +BuildRequires: automake %lang_package %description @@ -105,8 +112,12 @@ to develop applications that require these. %prep %setup -q %patch4 -p1 +%patch5 -p1 %build + +# gdbm-close-and-sync-return-value.patch +autoreconf -fiv %configure \ --disable-static \ --disable-silent-rules \ From a8d30d1d280d7de4003d1d6341b903bdc549552d85243d93051a4a9bf060a089 Mon Sep 17 00:00:00 2001 From: Petr Gajdos Date: Thu, 23 Aug 2018 06:39:25 +0000 Subject: [PATCH 5/6] Accepting request 630977 from home:AndreasStieger:branches:devel:libraries:c_c++ GNU dbm 1.18 OBS-URL: https://build.opensuse.org/request/show/630977 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gdbm?expand=0&rev=57 --- gdbm-1.16.tar.gz | 3 - gdbm-1.16.tar.gz.sig | 7 - gdbm-1.18.tar.gz | 3 + gdbm-1.18.tar.gz.sig | 7 + gdbm-close-and-sync-return-value.patch | 603 ------------------------- gdbm-no-build-date.patch | 8 +- gdbm.changes | 17 + gdbm.spec | 12 +- 8 files changed, 32 insertions(+), 628 deletions(-) delete mode 100644 gdbm-1.16.tar.gz delete mode 100644 gdbm-1.16.tar.gz.sig create mode 100644 gdbm-1.18.tar.gz create mode 100644 gdbm-1.18.tar.gz.sig delete mode 100644 gdbm-close-and-sync-return-value.patch diff --git a/gdbm-1.16.tar.gz b/gdbm-1.16.tar.gz deleted file mode 100644 index b589687..0000000 --- a/gdbm-1.16.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8a18bc6259da0c3eefefb018f8aa298fddc6f86c6fc0f0dec73270896ab512f -size 936526 diff --git a/gdbm-1.16.tar.gz.sig b/gdbm-1.16.tar.gz.sig deleted file mode 100644 index 1a38f41..0000000 --- a/gdbm-1.16.tar.gz.sig +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iG4EABECAC4WIQQyX2UMTCtq1YgHMno2ArB/VdDHMgUCWzPg2hAcZ3JheUBnbnUu -b3JnLnVhAAoJEDYCsH9V0McyjcoAn3DTuDAPFYsRv+sbZ4wZbUWuupKqAJ9Uzkwj -5kkd5PRCPdUUWx0wj8SQBQ== -=EEa4 ------END PGP SIGNATURE----- diff --git a/gdbm-1.18.tar.gz b/gdbm-1.18.tar.gz new file mode 100644 index 0000000..014687f --- /dev/null +++ b/gdbm-1.18.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8822cb4769e2d759c828c06f196614936c88c141c3132b18252fe25c2b635ce +size 939352 diff --git a/gdbm-1.18.tar.gz.sig b/gdbm-1.18.tar.gz.sig new file mode 100644 index 0000000..c7ef10e --- /dev/null +++ b/gdbm-1.18.tar.gz.sig @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iG4EABECAC4WIQQyX2UMTCtq1YgHMno2ArB/VdDHMgUCW3v10hAcZ3JheUBnbnUu +b3JnLnVhAAoJEDYCsH9V0Mcy9NUAn0Wj4Ryl8ltvQgXOf+SEQ7JVgVPKAJ9HMK+y +AZmz97Q3HcCXTNpNC5Vz7g== +=Tu3S +-----END PGP SIGNATURE----- diff --git a/gdbm-close-and-sync-return-value.patch b/gdbm-close-and-sync-return-value.patch deleted file mode 100644 index e2d6046..0000000 --- a/gdbm-close-and-sync-return-value.patch +++ /dev/null @@ -1,603 +0,0 @@ -From 030e685eb9df82f63d73a1bf206da84b7aa52374 Mon Sep 17 00:00:00 2001 -From: Sergey Poznyakoff -Date: Sun, 01 Jul 2018 07:08:55 +0000 -Subject: Change return value of gdbm_close and gdbm_sync - -* src/gdbm.h.in (gdbm_close, gdbm_sync): Return int -(GDBM_FILE_CLOSE_ERROR, GDBM_FILE_SYNC_ERROR): New error codes. -* src/gdbmclose.c (gdbm_close): Return 0 on success, -1 on failure. -Set gdbm_errno and errno. -* src/gdbmsync.c (gdbm_sync): Likewise. -* src/gdbmerrno.c: Handle new error codes. -* src/mmap.c (_gdbm_mapped_sync): Set gdbm_errno. -* src/proto.h (gdbm_file_sync): Set gdbm_errno. - -* doc/gdbm.3: Document changes. -* doc/gdbm.texi: Document changes. -* NEWS: Document changes. -* configure.ac: Set patchlevel. - -* tests/Makefile.am: Add new test. -* tests/testsuite.at: Add new test. -* tests/closerr.at: New test case. -* tests/closerr.c: New test program. -* tests/gtdel.c: Check gdbm_close return. -* tests/gtdump.c: Likewise. -* tests/gtfetch.c: Likewise. -* tests/gtload.c: Likewise. -* tests/gtopt.c: Likewise. -* tests/gtrecover.c: Likewise. ---- -diff --git a/NEWS b/NEWS -index 3093d10..f81a442 100644 ---- a/NEWS -+++ b/NEWS -@@ -1,9 +1,17 @@ --GNU dbm NEWS -- history of user-visible changes. 2018-06-27 -+GNU dbm NEWS -- history of user-visible changes. 2018-07-01 - Copyright (C) 1990-2018 Free Software Foundation, Inc. - See the end of file for copying conditions. - - Please send gdbm bug reports to . - -+Version 1.16.90 (Git) -+ -+* 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. -+ -+ - Version 1.16 - 2018-06-27 - - * Maintain sorting order of the available block list after coalescing -diff --git a/configure.ac b/configure.ac -index 4306bcd..3ca6252 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -17,7 +17,7 @@ - - m4_define([_GDBM_VERSION_MAJOR], 1) - m4_define([_GDBM_VERSION_MINOR], 16) --dnl m4_define([_GDBM_VERSION_PATCH], 0) -+m4_define([_GDBM_VERSION_PATCH], 90) - - AC_INIT([gdbm], - _GDBM_VERSION_MAJOR._GDBM_VERSION_MINOR[]m4_ifdef([_GDBM_VERSION_PATCH],._GDBM_VERSION_PATCH), -diff --git a/doc/gdbm.3 b/doc/gdbm.3 -index 6107d9a..d803748 100644 ---- a/doc/gdbm.3 -+++ b/doc/gdbm.3 -@@ -13,7 +13,7 @@ - .\" - .\" You should have received a copy of the GNU General Public License - .\" along with GDBM. If not, see . */ --.TH GDBM 3 "July 8, 2016" "GDBM" "GDBM User Reference" -+.TH GDBM 3 "July 1, 2018" "GDBM" "GDBM User Reference" - .SH NAME - GDBM \- The GNU database manager. Includes \fBdbm\fR and \fBndbm\fR - compatibility. -@@ -31,7 +31,7 @@ compatibility. - .ti +21 - .BI "void (*" fatal_func ")(const char *))"; - .br --.BI "void gdbm_close (GDBM_FILE " dbf ");" -+.BI "int gdbm_close (GDBM_FILE " dbf ");" - .br - .BI "int gdbm_store (GDBM_FILE " dbf ", datum " key ", datum " content ", int " flag ); - .br -@@ -45,7 +45,7 @@ compatibility. - .br - .BI "int gdbm_reorganize (GDBM_FILE " dbf ");" - .br --.BI "void gdbm_sync (GDBM_FILE " dbf ");" -+.BI "int gdbm_sync (GDBM_FILE " dbf ");" - .br - .BI "int gdbm_exists (GDBM_FILE " dbf ", datum " key ); - .br -@@ -183,7 +183,7 @@ returned from \fBgdbm_open\fR. - It is important that every file opened is also closed. This is needed to - update the reader/writer count on the file. This is done by: - --.BI "void gdbm_close (GDBM_FILE " dbf ");" -+.BI "int gdbm_close (GDBM_FILE " dbf ");" - - The database is used by 3 primary routines. The first stores data in the - database. -@@ -308,7 +308,7 @@ wait for writes to be flushed to the disk before continuing. - The following routine can be used to guarantee that the database is - physically written to the disk file. - --.BI "void gdbm_sync (GDBM_FILE " dbf ");" -+.BI "int gdbm_sync (GDBM_FILE " dbf ");" - - It will not return until the disk file state is syncronized with the - in-memory state of the database. -diff --git a/doc/gdbm.texi b/doc/gdbm.texi -index b5ba53d..4a0b1a7 100644 ---- a/doc/gdbm.texi -+++ b/doc/gdbm.texi -@@ -215,14 +215,14 @@ contains a definition of these functions. - #include - - GDBM_FILE gdbm_open(name, block_size, flags, mode, fatal_func); --void gdbm_close(dbf); -+int gdbm_close(dbf); - int gdbm_store(dbf, key, content, flag); - datum gdbm_fetch(dbf, key); - int gdbm_delete(dbf, key); - datum gdbm_firstkey(dbf); - datum gdbm_nextkey(dbf, key); - int gdbm_reorganize(dbf); --void gdbm_sync(dbf); -+int gdbm_sync(dbf); - int gdbm_exists(dbf, key); - char *gdbm_strerror(errno); - int gdbm_setopt(dbf, option, value, size); -@@ -369,7 +369,7 @@ Copy file ownership and mode from @var{src} to @var{dst}. - It is important that every file opened is also closed. This is needed to - update the reader/writer count on the file: - --@deftypefn {gdbm interface} void gdbm_close (GDBM_FILE @var{dbf}) -+@deftypefn {gdbm interface} int gdbm_close (GDBM_FILE @var{dbf}) - This function closes the @code{gdbm} file and frees all memory - associated with it. The parameter is: - -@@ -377,6 +377,10 @@ associated with it. The parameter is: - @item dbf - The pointer returned by @code{gdbm_open}. - @end table -+ -+@code{Gdbm_close} returns 0 on success. On error, it sets -+@code{gdbm_errno} and system @code{errno} variables to the codes -+describing the error and returns -1. - @end deftypefn - - @node Count -@@ -678,7 +682,7 @@ abnormal fashion. The following function allows the programmer to - make sure the disk version of the database has been completely updated - with all changes to the current time. - --@deftypefn {gdbm interface} void gdbm_sync (GDBM_FILE @var{dbf}) -+@deftypefn {gdbm interface} int gdbm_sync (GDBM_FILE @var{dbf}) - Synchronizes the changes in @var{dbf} with its disk file. The - parameter is a pointer returned by @code{gdbm_open}. - -@@ -687,6 +691,10 @@ have been made to the database and before some long waiting time. - The @code{gdbm_close} function automatically calls the equivalent of - @code{gdbm_sync} so no call is needed if the database is to be closed - immediately after the set of changes have been made. -+ -+@code{Gdbm_sync} returns 0 on success. On error, it sets -+@code{gdbm_errno} and system @code{errno} variables to the codes -+describing the error and returns -1. - @end deftypefn - - @node Flat files -diff --git a/src/gdbm.h.in b/src/gdbm.h.in -index e6bdc58..6318ad8 100644 ---- a/src/gdbm.h.in -+++ b/src/gdbm.h.in -@@ -113,7 +113,7 @@ extern GDBM_FILE gdbm_fd_open (int fd, const char *file_name, int block_size, - int flags, void (*fatal_func) (const char *)); - extern GDBM_FILE gdbm_open (const char *, int, int, int, - void (*)(const char *)); --extern void gdbm_close (GDBM_FILE); -+extern int gdbm_close (GDBM_FILE); - extern int gdbm_store (GDBM_FILE, datum, datum, int); - extern datum gdbm_fetch (GDBM_FILE, datum); - extern int gdbm_delete (GDBM_FILE, datum); -@@ -121,7 +121,7 @@ extern datum gdbm_firstkey (GDBM_FILE); - extern datum gdbm_nextkey (GDBM_FILE, datum); - extern int gdbm_reorganize (GDBM_FILE); - --extern void gdbm_sync (GDBM_FILE); -+extern int gdbm_sync (GDBM_FILE); - extern int gdbm_exists (GDBM_FILE, datum); - extern int gdbm_setopt (GDBM_FILE, int, void *, int); - extern int gdbm_fdesc (GDBM_FILE); -@@ -225,9 +225,11 @@ extern int gdbm_copy_meta (GDBM_FILE dst, GDBM_FILE src); - # define GDBM_BAD_AVAIL 34 - # define GDBM_BAD_HASH_TABLE 35 - # define GDBM_BAD_DIR_ENTRY 36 -- -+# define GDBM_FILE_CLOSE_ERROR 37 -+# define GDBM_FILE_SYNC_ERROR 38 -+ - # define _GDBM_MIN_ERRNO 0 --# define _GDBM_MAX_ERRNO GDBM_BAD_DIR_ENTRY -+# define _GDBM_MAX_ERRNO GDBM_FILE_SYNC_ERROR - - /* This one was never used and will be removed in the future */ - # define GDBM_UNKNOWN_UPDATE GDBM_UNKNOWN_ERROR -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; - } -diff --git a/src/gdbmerrno.c b/src/gdbmerrno.c -index 8e24b82..4ce7f9d 100644 ---- a/src/gdbmerrno.c -+++ b/src/gdbmerrno.c -@@ -136,7 +136,9 @@ const char * const gdbm_errlist[_GDBM_MAX_ERRNO+1] = { - [GDBM_BAD_HEADER] = N_("Malformed database file header"), - [GDBM_BAD_AVAIL] = N_("Malformed avail_block"), - [GDBM_BAD_HASH_TABLE] = N_("Malformed hash table"), -- [GDBM_BAD_DIR_ENTRY] = N_("Invalid directory entry") -+ [GDBM_BAD_DIR_ENTRY] = N_("Invalid directory entry"), -+ [GDBM_FILE_CLOSE_ERROR] = N_("Error closing file"), -+ [GDBM_FILE_SYNC_ERROR] = N_("Error synchronizing file") - }; - - const char * -@@ -178,7 +180,9 @@ int const gdbm_syserr[_GDBM_MAX_ERRNO+1] = { - [GDBM_FILE_SEEK_ERROR] = 1, - [GDBM_FILE_READ_ERROR] = 1, - [GDBM_FILE_STAT_ERROR] = 1, -- [GDBM_BACKUP_FAILED] = 1 -+ [GDBM_BACKUP_FAILED] = 1, -+ [GDBM_FILE_CLOSE_ERROR] = 1, -+ [GDBM_FILE_SYNC_ERROR] = 1 - }; - - /* Returns true if system errno value is meaningful for GDBM error -diff --git a/src/gdbmsync.c b/src/gdbmsync.c -index 5d94cbe..a8d1002 100644 ---- a/src/gdbmsync.c -+++ b/src/gdbmsync.c -@@ -24,7 +24,7 @@ - - /* Make sure the database is all on disk. */ - --void -+int - gdbm_sync (GDBM_FILE dbf) - { - /* Return immediately if the database needs recovery */ -@@ -34,6 +34,5 @@ gdbm_sync (GDBM_FILE dbf) - gdbm_set_errno (dbf, GDBM_NO_ERROR, FALSE); - - /* Do the sync on the file. */ -- gdbm_file_sync (dbf); -- -+ return gdbm_file_sync (dbf); - } -diff --git a/src/mmap.c b/src/mmap.c -index 008a0f8..48e84ae 100644 ---- a/src/mmap.c -+++ b/src/mmap.c -@@ -392,12 +392,16 @@ _gdbm_mapped_lseek (GDBM_FILE dbf, off_t offset, int whence) - int - _gdbm_mapped_sync (GDBM_FILE dbf) - { -+ int rc; -+ - if (dbf->mapped_region) -- { -- return msync (dbf->mapped_region, dbf->mapped_size, -- MS_SYNC | MS_INVALIDATE); -- } -- return fsync (dbf->desc); -+ rc = msync (dbf->mapped_region, dbf->mapped_size, -+ MS_SYNC | MS_INVALIDATE); -+ else -+ rc = fsync (dbf->desc); -+ if (rc) -+ GDBM_SET_ERRNO (dbf, GDBM_FILE_SYNC_ERROR, TRUE); -+ return rc; - } - - #endif -diff --git a/src/proto.h b/src/proto.h -index 22f29e4..02f6f9b 100644 ---- a/src/proto.h -+++ b/src/proto.h -@@ -115,16 +115,21 @@ gdbm_file_seek (GDBM_FILE dbf, off_t off, int whence) - #endif - } - --static inline void -+static inline int - gdbm_file_sync (GDBM_FILE dbf) - { - #if HAVE_MMAP -- _gdbm_mapped_sync (dbf); -+ return _gdbm_mapped_sync (dbf); - #elif HAVE_FSYNC -- fsync (dbf->desc); -+ if (fsync (dbf->desc)) -+ { -+ GDBM_SET_ERRNO (dbf, GDBM_FILE_SYNC_ERROR, TRUE); -+ return 1; -+ } - #else - sync (); - sync (); -+ return 0; - #endif - } - -diff --git a/tests/Makefile.am b/tests/Makefile.am -index 827af58..dbe17dd 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -54,6 +54,7 @@ TESTSUITE_AT = \ - cloexec01.at\ - cloexec02.at\ - cloexec03.at\ -+ closerr.at\ - dbmcreate00.at\ - dbmdel00.at\ - dbmdel01.at\ -@@ -108,6 +109,7 @@ if COMPAT_OPT - endif - - check_PROGRAMS = \ -+ closerr\ - fdop\ - g_open_ce\ - g_reorg_ce\ -diff --git a/tests/closerr.at b/tests/closerr.at -new file mode 100644 -index 0000000..5f5e208 ---- a/dev/null -+++ b/tests/closerr.at -@@ -0,0 +1,5 @@ -+# This file is part of GDBM testsuite. -*- autoconf -*- -+AT_SETUP([gdbm_close error]) -+AT_KEYWORDS([close]) -+AT_CHECK(closerr,1,[],[ignore]) -+AT_CLEANUP -diff --git a/tests/closerr.c b/tests/closerr.c -new file mode 100644 -index 0000000..5bc8fdc ---- a/dev/null -+++ b/tests/closerr.c -@@ -0,0 +1,56 @@ -+/* This file is part of GDBM test suite. -+ Copyright (C) 2018 Free Software Foundation, Inc. -+ -+ GDBM is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2, or (at your option) -+ any later version. -+ -+ GDBM is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with GDBM. If not, see . -+*/ -+#include "autoconf.h" -+#include -+#include -+#include -+#include -+#include -+#include -+#include "gdbm.h" -+ -+int -+main (int argc, char **argv) -+{ -+ GDBM_FILE dbf; -+ char dbname[] = "junk.gdbm"; -+ int rc; -+ -+ assert (argc == 1); -+ -+ dbf = gdbm_open (dbname, 0, GDBM_NEWDB, 0600, NULL); -+ if (!dbf) -+ { -+ fprintf (stderr, "gdbm_open: %s; %s\n", gdbm_strerror (gdbm_errno), -+ strerror (errno)); -+ return 1; -+ } -+ if (close (gdbm_fdesc (dbf))) -+ { -+ perror ("close"); -+ return 77; -+ } -+ -+ if (gdbm_close (dbf)) -+ { -+ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), -+ strerror (errno)); -+ return 1; -+ } -+ -+ return 0; -+} -diff --git a/tests/gtdel.c b/tests/gtdel.c -index 729086c..d0c711d 100644 ---- a/tests/gtdel.c -+++ b/tests/gtdel.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include "gdbm.h" - #include "progname.h" - -@@ -93,6 +94,11 @@ main (int argc, char **argv) - rc = 2; - } - } -- gdbm_close (dbf); -+ if (gdbm_close (dbf)) -+ { -+ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), -+ strerror (errno)); -+ rc = 3; -+ } - exit (rc); - } -diff --git a/tests/gtdump.c b/tests/gtdump.c -index dcc27ac..fb27997 100644 ---- a/tests/gtdump.c -+++ b/tests/gtdump.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include "gdbm.h" - #include "progname.h" - -@@ -115,6 +116,11 @@ main (int argc, char **argv) - exit (1); - } - -- gdbm_close (dbf); -+ if (gdbm_close (dbf)) -+ { -+ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), -+ strerror (errno)); -+ exit (3); -+ } - exit (0); - } -diff --git a/tests/gtfetch.c b/tests/gtfetch.c -index c1ea45e..5070fcc 100644 ---- a/tests/gtfetch.c -+++ b/tests/gtfetch.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include "gdbm.h" - #include "progname.h" - -@@ -130,6 +131,11 @@ main (int argc, char **argv) - fputc ('\n', stdout); - } - -- gdbm_close (dbf); -+ if (gdbm_close (dbf)) -+ { -+ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), -+ strerror (errno)); -+ rc = 3; -+ } - exit (rc); - } -diff --git a/tests/gtload.c b/tests/gtload.c -index 21c89b2..1493236 100644 ---- a/tests/gtload.c -+++ b/tests/gtload.c -@@ -287,6 +287,11 @@ main (int argc, char **argv) - } - } - } -- gdbm_close (dbf); -+ if (gdbm_close (dbf)) -+ { -+ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), -+ strerror (errno)); -+ exit (3); -+ } - exit (0); - } -diff --git a/tests/gtopt.c b/tests/gtopt.c -index b461d56..236ae92 100644 ---- a/tests/gtopt.c -+++ b/tests/gtopt.c -@@ -406,7 +406,13 @@ main (int argc, char **argv) - } - } - -- gdbm_close (dbf); -+ if (gdbm_close (dbf)) -+ { -+ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), -+ strerror (errno)); -+ exit (3); -+ } -+ - exit (0); - } - -diff --git a/tests/gtrecover.c b/tests/gtrecover.c -index 0527c53..f5e6f97 100644 ---- a/tests/gtrecover.c -+++ b/tests/gtrecover.c -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - #include "gdbm.h" - #include "progname.h" - #include -@@ -119,6 +120,11 @@ main (int argc, char **argv) - - rc = gdbm_recover (dbf, &rcvr, rcvr_flags); - -- gdbm_close (dbf); -+ if (gdbm_close (dbf)) -+ { -+ fprintf (stderr, "gdbm_close: %s; %s\n", gdbm_strerror (gdbm_errno), -+ strerror (errno)); -+ rc = 3; -+ } - exit (rc); - } -diff --git a/tests/testsuite.at b/tests/testsuite.at -index b7b1e4e..efc2705 100644 ---- a/tests/testsuite.at -+++ b/tests/testsuite.at -@@ -43,6 +43,8 @@ m4_include([delete00.at]) - m4_include([delete01.at]) - m4_include([delete02.at]) - -+m4_include([closerr.at]) -+ - AT_BANNER([Block size selection]) - m4_include([blocksize00.at]) - m4_include([blocksize01.at]) --- -cgit v0.9.0.3 - diff --git a/gdbm-no-build-date.patch b/gdbm-no-build-date.patch index cb11b90..2a40aef 100644 --- a/gdbm-no-build-date.patch +++ b/gdbm-no-build-date.patch @@ -1,11 +1,11 @@ -Index: gdbm-1.16/src/version.c +Index: gdbm-1.18/src/version.c =================================================================== ---- gdbm-1.16.orig/src/version.c 2018-07-16 11:21:00.084356582 +0200 -+++ gdbm-1.16/src/version.c 2018-07-16 11:23:03.453571017 +0200 +--- gdbm-1.18.orig/src/version.c ++++ gdbm-1.18/src/version.c @@ -25,9 +25,6 @@ making the distdir. */ const char * gdbm_version = "GDBM version " PACKAGE_VERSION ". " - "27/06/2018" + "21/08/2018" -#if defined(__STDC__) && defined(__DATE__) && defined(__TIME__) - " (built " __DATE__ " " __TIME__ ")" -#endif diff --git a/gdbm.changes b/gdbm.changes index a935dc5..d049c7c 100644 --- a/gdbm.changes +++ b/gdbm.changes @@ -1,3 +1,20 @@ +------------------------------------------------------------------- +Wed Aug 22 17:24:47 UTC 2018 - astieger@suse.com + +- update to 1.18: + * Fix directory entry validation + * Fix improper use of GDBM_DEBUG macro + * Fix spurious error from gdbm_dump and gdbm_export + * Make sure gdbm_sync always returns a meaningful value +- includes changes from 1.17: + * Fix bug in gdbm_dump function, it did not clear the + GDBM_ITEM_NOT_FOUND error marker, which is set upon its normal + termination +- changes upstreamed: + * gdbm_close() and gdbm_sync() now return 0 on success. On error, + they return -1 and set gdbm_errno and errno to the appropriate + error codes - drop gdbm-close-and-sync-return-value.patch + ------------------------------------------------------------------- Mon Jul 16 09:24:48 UTC 2018 - pgajdos@suse.com diff --git a/gdbm.spec b/gdbm.spec index a462388..a1f9608 100644 --- a/gdbm.spec +++ b/gdbm.spec @@ -19,7 +19,7 @@ %define lname libgdbm6 %define lcompat libgdbm_compat4 Name: gdbm -Version: 1.16 +Version: 1.18 Release: 0 Summary: GNU dbm key/data database License: GPL-3.0-or-later @@ -31,16 +31,9 @@ Source2: baselibs.conf Source4: %{name}.keyring # PATCH-FIX-SUSE: remove the build date from src/version.c Patch4: gdbm-no-build-date.patch -# should be fixed in 1.17 -# remove autoreconf with this patch -# https://puszcza.gnu.org.ua/bugs/index.php?399 -# http://git.gnu.org.ua/cgit/gdbm.git/commit/?id=030e685eb9df82f63d73a1bf206da84b7aa52374 -Patch5: gdbm-close-and-sync-return-value.patch BuildRequires: libtool BuildRequires: makeinfo BuildRequires: readline-devel -# gdbm-close-and-sync-return-value.patch -BuildRequires: automake %lang_package %description @@ -112,12 +105,9 @@ to develop applications that require these. %prep %setup -q %patch4 -p1 -%patch5 -p1 %build -# gdbm-close-and-sync-return-value.patch -autoreconf -fiv %configure \ --disable-static \ --disable-silent-rules \ From e256e6ef42999de3518bfdd9aa6133ca3c29328dedeaa20e481bb134675ab344 Mon Sep 17 00:00:00 2001 From: Petr Gajdos Date: Wed, 31 Oct 2018 07:15:52 +0000 Subject: [PATCH 6/6] - update to 1.18.1: * Fix debian bug 910911: This restores backward compatibility with databases created by version 1.8 (and some later versions, with mmapped I/O disabled). OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gdbm?expand=0&rev=58 --- gdbm-1.18.1.tar.gz | 3 +++ gdbm-1.18.1.tar.gz.sig | 7 +++++++ gdbm-1.18.tar.gz | 3 --- gdbm-1.18.tar.gz.sig | 7 ------- gdbm-no-build-date.patch | 8 ++++---- gdbm.changes | 8 ++++++++ gdbm.spec | 4 ++-- 7 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 gdbm-1.18.1.tar.gz create mode 100644 gdbm-1.18.1.tar.gz.sig delete mode 100644 gdbm-1.18.tar.gz delete mode 100644 gdbm-1.18.tar.gz.sig diff --git a/gdbm-1.18.1.tar.gz b/gdbm-1.18.1.tar.gz new file mode 100644 index 0000000..3508a42 --- /dev/null +++ b/gdbm-1.18.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86e613527e5dba544e73208f42b78b7c022d4fa5a6d5498bf18c8d6f745b91dc +size 941863 diff --git a/gdbm-1.18.1.tar.gz.sig b/gdbm-1.18.1.tar.gz.sig new file mode 100644 index 0000000..acb07ca --- /dev/null +++ b/gdbm-1.18.1.tar.gz.sig @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iG4EABECAC4WIQQyX2UMTCtq1YgHMno2ArB/VdDHMgUCW9QDDRAcZ3JheUBnbnUu +b3JnLnVhAAoJEDYCsH9V0Mcy6mAAnA8dtoJ6zkcTKu7hJxIcG74KvjIVAJ94zjC9 +htwPjn3VFpXHwl5V72qunw== +=xDhc +-----END PGP SIGNATURE----- diff --git a/gdbm-1.18.tar.gz b/gdbm-1.18.tar.gz deleted file mode 100644 index 014687f..0000000 --- a/gdbm-1.18.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b8822cb4769e2d759c828c06f196614936c88c141c3132b18252fe25c2b635ce -size 939352 diff --git a/gdbm-1.18.tar.gz.sig b/gdbm-1.18.tar.gz.sig deleted file mode 100644 index c7ef10e..0000000 --- a/gdbm-1.18.tar.gz.sig +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iG4EABECAC4WIQQyX2UMTCtq1YgHMno2ArB/VdDHMgUCW3v10hAcZ3JheUBnbnUu -b3JnLnVhAAoJEDYCsH9V0Mcy9NUAn0Wj4Ryl8ltvQgXOf+SEQ7JVgVPKAJ9HMK+y -AZmz97Q3HcCXTNpNC5Vz7g== -=Tu3S ------END PGP SIGNATURE----- diff --git a/gdbm-no-build-date.patch b/gdbm-no-build-date.patch index 2a40aef..b4a174b 100644 --- a/gdbm-no-build-date.patch +++ b/gdbm-no-build-date.patch @@ -1,11 +1,11 @@ -Index: gdbm-1.18/src/version.c +Index: gdbm-1.18.1/src/version.c =================================================================== ---- gdbm-1.18.orig/src/version.c -+++ gdbm-1.18/src/version.c +--- gdbm-1.18.1.orig/src/version.c 2018-10-31 08:08:40.768558994 +0100 ++++ gdbm-1.18.1/src/version.c 2018-10-31 08:09:58.052905389 +0100 @@ -25,9 +25,6 @@ making the distdir. */ const char * gdbm_version = "GDBM version " PACKAGE_VERSION ". " - "21/08/2018" + "27/10/2018" -#if defined(__STDC__) && defined(__DATE__) && defined(__TIME__) - " (built " __DATE__ " " __TIME__ ")" -#endif diff --git a/gdbm.changes b/gdbm.changes index d049c7c..28a378e 100644 --- a/gdbm.changes +++ b/gdbm.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Wed Oct 31 07:14:06 UTC 2018 - Petr Gajdos + +- update to 1.18.1: + * Fix debian bug 910911: This restores backward compatibility with + databases created by version 1.8 (and some later versions, with + mmapped I/O disabled). + ------------------------------------------------------------------- Wed Aug 22 17:24:47 UTC 2018 - astieger@suse.com diff --git a/gdbm.spec b/gdbm.spec index a1f9608..2195bdb 100644 --- a/gdbm.spec +++ b/gdbm.spec @@ -12,14 +12,14 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # %define lname libgdbm6 %define lcompat libgdbm_compat4 Name: gdbm -Version: 1.18 +Version: 1.18.1 Release: 0 Summary: GNU dbm key/data database License: GPL-3.0-or-later