diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-07-01 10:08:55 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-07-01 10:19:36 +0300 |
commit | 030e685eb9df82f63d73a1bf206da84b7aa52374 (patch) | |
tree | dcfc6693121e332d2cdb7c579e65ed0f397dc78e /tests | |
parent | d6fe3b45bc669a6bc3f21e4bda69c6a052d78482 (diff) | |
download | gdbm-030e685eb9df82f63d73a1bf206da84b7aa52374.tar.gz gdbm-030e685eb9df82f63d73a1bf206da84b7aa52374.tar.bz2 |
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.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/closerr.at | 5 | ||||
-rw-r--r-- | tests/closerr.c | 56 | ||||
-rw-r--r-- | tests/gtdel.c | 8 | ||||
-rw-r--r-- | tests/gtdump.c | 8 | ||||
-rw-r--r-- | tests/gtfetch.c | 8 | ||||
-rw-r--r-- | tests/gtload.c | 7 | ||||
-rw-r--r-- | tests/gtopt.c | 8 | ||||
-rw-r--r-- | tests/gtrecover.c | 8 | ||||
-rw-r--r-- | tests/testsuite.at | 2 |
10 files changed, 106 insertions, 6 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 827af58..dbe17dd 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -51,12 +51,13 @@ TESTSUITE_AT = \ blocksize01.at\ blocksize02.at\ cloexec00.at\ cloexec01.at\ cloexec02.at\ cloexec03.at\ + closerr.at\ dbmcreate00.at\ dbmdel00.at\ dbmdel01.at\ dbmdel02.at\ dbmcvt.at\ dbmfetch00.at\ @@ -105,12 +106,13 @@ check-local: atconfig atlocal $(TESTSUITE) if COMPAT_OPT DBMINCLUDES = -I$(top_srcdir)/compat DBMPROGS = dtload dtdump dtfetch dtdel d_creat_ce endif check_PROGRAMS = \ + closerr\ fdop\ g_open_ce\ g_reorg_ce\ gtdel\ gtdump\ gtfetch\ diff --git a/tests/closerr.at b/tests/closerr.at new file mode 100644 index 0000000..5f5e208 --- /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 --- /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 <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <errno.h> +#include <assert.h> +#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 @@ -15,12 +15,13 @@ along with GDBM. If not, see <http://www.gnu.org/licenses/>. */ #include "autoconf.h" #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> #include "gdbm.h" #include "progname.h" int main (int argc, char **argv) { @@ -90,9 +91,14 @@ main (int argc, char **argv) { fprintf (stderr, "%s: cannot delete %s: %s\n", progname, arg, gdbm_strerror (gdbm_errno)); 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 @@ -15,12 +15,13 @@ along with GDBM. If not, see <http://www.gnu.org/licenses/>. */ #include "autoconf.h" #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> #include "gdbm.h" #include "progname.h" int main (int argc, char **argv) { @@ -112,9 +113,14 @@ main (int argc, char **argv) if (gdbm_errno != GDBM_ITEM_NOT_FOUND) { fprintf (stderr, "unexpected error: %s\n", gdbm_strerror (gdbm_errno)); 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 @@ -15,12 +15,13 @@ along with GDBM. If not, see <http://www.gnu.org/licenses/>. */ #include "autoconf.h" #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> #include "gdbm.h" #include "progname.h" void print_key (FILE *fp, datum key, int delim) { @@ -127,9 +128,14 @@ main (int argc, char **argv) fwrite (data.dptr, data.dsize - !!data_z, 1, stdout); free (data.dptr); 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 @@ -284,9 +284,14 @@ main (int argc, char **argv) else { 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/gtopt.c b/tests/gtopt.c index b461d56..236ae92 100644 --- a/tests/gtopt.c +++ b/tests/gtopt.c @@ -403,12 +403,18 @@ main (int argc, char **argv) rc = op->test (op->valptr); assert (rc >= 0 && rc < _res_max); puts (resstr[rc]); } } - 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 @@ -16,12 +16,13 @@ */ #include "autoconf.h" #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> +#include <errno.h> #include "gdbm.h" #include "progname.h" #include <assert.h> const char *progname; @@ -116,9 +117,14 @@ main (int argc, char **argv) fprintf (stderr, "gdbm_open failed: %s\n", gdbm_strerror (gdbm_errno)); exit (1); } 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 @@ -40,12 +40,14 @@ m4_include([fetch00.at]) m4_include([fetch01.at]) 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]) m4_include([blocksize02.at]) AT_BANNER([Compatibility library (dbm/ndbm)]) |