aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2018-07-01 10:08:55 +0300
committerSergey Poznyakoff <gray@gnu.org>2018-07-01 10:19:36 +0300
commit030e685eb9df82f63d73a1bf206da84b7aa52374 (patch)
treedcfc6693121e332d2cdb7c579e65ed0f397dc78e /tests
parentd6fe3b45bc669a6bc3f21e4bda69c6a052d78482 (diff)
downloadgdbm-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.am2
-rw-r--r--tests/closerr.at5
-rw-r--r--tests/closerr.c56
-rw-r--r--tests/gtdel.c8
-rw-r--r--tests/gtdump.c8
-rw-r--r--tests/gtfetch.c8
-rw-r--r--tests/gtload.c7
-rw-r--r--tests/gtopt.c8
-rw-r--r--tests/gtrecover.c8
-rw-r--r--tests/testsuite.at2
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)])

Return to:

Send suggestions and report system problems to the System administrator.