aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2016-07-09 08:40:04 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2016-07-09 08:47:16 +0300
commit479a469033903a76b9c073806037dd66176f3da0 (patch)
tree2841b611288f9343868e6ded82909b096a62e121
parent2efd8358711ab3ea6c0ecaab75d195837b4b3e37 (diff)
downloadgdbm-479a469033903a76b9c073806037dd66176f3da0.tar.gz
gdbm-479a469033903a76b9c073806037dd66176f3da0.tar.bz2
Per-database error state.
Last error code is stored in the database file structure as well as in the global gdbm_errno. Special functions are provided for retrieving and clearing the last error state. * src/gdbmdefs.h (gdbm_file_info): New member: last_error * src/gdbm.h.in (gdbm_last_errno, gdbm_set_errno) (gdbm_clear_error): New protos. * src/gdbmerrno.c (gdbm_last_errno, gdbm_set_errno) (gdbm_clear_error): New functions * NEWS: Update. * compat/dbminit.c: Use gdbm_set_errno to set error state. * compat/dbmopen.c: Likewise. * src/bucket.c: Likewise. * src/findkey.c: Likewise. * src/gdbm_load.c: Likewise. * src/gdbmcount.c: Likewise. * src/gdbmdelete.c: Likewise. * src/gdbmdump.c: Likewise. * src/gdbmexists.c: Likewise. * src/gdbmexp.c: Likewise. * src/gdbmfetch.c: Likewise. * src/gdbmimp.c: Likewise. * src/gdbmload.c: Likewise. * src/gdbmopen.c: Likewise. * src/gdbmreorg.c: Likewise. * src/gdbmseq.c: Likewise. * src/gdbmsetopt.c: Likewise. * src/gdbmstore.c: Likewise. * src/gdbmsync.c: Likewise. * src/mmap.c: Likewise.
-rw-r--r--NEWS10
-rw-r--r--compat/dbminit.c2
-rw-r--r--compat/dbmopen.c24
-rw-r--r--src/bucket.c8
-rw-r--r--src/findkey.c2
-rw-r--r--src/gdbm.h.in4
-rw-r--r--src/gdbm_load.c6
-rw-r--r--src/gdbmcount.c5
-rw-r--r--src/gdbmdefs.h6
-rw-r--r--src/gdbmdelete.c4
-rw-r--r--src/gdbmdump.c18
-rw-r--r--src/gdbmerrno.c36
-rw-r--r--src/gdbmexists.c4
-rw-r--r--src/gdbmexp.c12
-rw-r--r--src/gdbmfetch.c4
-rw-r--r--src/gdbmimp.c12
-rw-r--r--src/gdbmload.c14
-rw-r--r--src/gdbmopen.c65
-rw-r--r--src/gdbmreorg.c20
-rw-r--r--src/gdbmseq.c10
-rw-r--r--src/gdbmsetopt.c79
-rw-r--r--src/gdbmstore.c12
-rw-r--r--src/gdbmsync.c6
-rw-r--r--src/mmap.c8
24 files changed, 221 insertions, 150 deletions
diff --git a/NEWS b/NEWS
index a4f1129..4efabdb 100644
--- a/NEWS
+++ b/NEWS
@@ -1,2 +1,2 @@
-GNU dbm NEWS -- history of user-visible changes. 2016-07-08
+GNU dbm NEWS -- history of user-visible changes. 2016-07-09
Copyright (C) 1990-2016 Free Software Foundation, Inc.
@@ -23,2 +23,10 @@ Instead it sets gdbm_errno to GDBM_MALLOC_ERROR and returns NULL datum.
+* Per-database error codes
+
+* New functions
+
+** gdbm_last_errno
+
+** gdbm_clear_error
+
diff --git a/compat/dbminit.c b/compat/dbminit.c
index 94ddc22..f5c5a65 100644
--- a/compat/dbminit.c
+++ b/compat/dbminit.c
@@ -50,3 +50,3 @@ dbminit (char *file)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 1);
return -1;
diff --git a/compat/dbmopen.c b/compat/dbmopen.c
index 7a5127e..f8df3e3 100644
--- a/compat/dbmopen.c
+++ b/compat/dbmopen.c
@@ -73,3 +73,3 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR; /* FIXME: special code? */
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 1); /* FIXME: special code? */
return -1;
@@ -91,3 +91,3 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 1);
return -1;
@@ -98,3 +98,3 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 1);
return -1;
@@ -106,3 +106,3 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode)
{
- gdbm_errno = GDBM_BAD_MAGIC_NUMBER;
+ gdbm_set_errno (NULL, GDBM_BAD_MAGIC_NUMBER, 1);
return -1;
@@ -114,3 +114,3 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 1);
return fd;
@@ -120,3 +120,3 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 1);
close (fd);
@@ -137,3 +137,3 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode)
close (fd);
- gdbm_errno = GDBM_BAD_MAGIC_NUMBER;
+ gdbm_set_errno (NULL, GDBM_BAD_MAGIC_NUMBER, 1);
return -1;
@@ -153,3 +153,3 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode)
{
- gdbm_errno = GDBM_FILE_WRITE_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_WRITE_ERROR, 1);
close (fd);
@@ -170,3 +170,3 @@ ndbm_open_dir_file (const char *base, int pagfd, int mode)
{
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 1);
return -1;
@@ -214,3 +214,3 @@ dbm_open (char *file, int flags, int mode)
{
- gdbm_errno = GDBM_MALLOC_ERROR; /* For the hell of it. */
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 1); /* For the hell of it. */
return NULL;
@@ -252,3 +252,3 @@ dbm_open (char *file, int flags, int mode)
free (pag_file);
- gdbm_errno = GDBM_MALLOC_ERROR; /* For the hell of it. */
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 1); /* For the hell of it. */
return NULL;
@@ -261,3 +261,3 @@ dbm_open (char *file, int flags, int mode)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (dbm, GDBM_FILE_OPEN_ERROR, 1);
free (dbm);
diff --git a/src/bucket.c b/src/bucket.c
index c9a951c..ee0e157 100644
--- a/src/bucket.c
+++ b/src/bucket.c
@@ -3,4 +3,4 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 1990, 1991, 1993, 2007, 2011, 2013 Free Software Foundation,
- Inc.
+ Copyright (C) 1990, 1991, 1993, 2007, 2011, 2013,
+ 2016 Free Software Foundation, Inc.
@@ -133,3 +133,3 @@ _gdbm_read_bucket_at (GDBM_FILE dbf, off_t off, hash_bucket *bucket,
{
- gdbm_errno = GDBM_FILE_SEEK_ERROR;
+ gdbm_set_errno (dbf, GDBM_FILE_SEEK_ERROR, 1);
return -1;
@@ -139,3 +139,3 @@ _gdbm_read_bucket_at (GDBM_FILE dbf, off_t off, hash_bucket *bucket,
{
- gdbm_errno = rc;
+ gdbm_set_errno (dbf, rc, 1);
return -1;
diff --git a/src/findkey.c b/src/findkey.c
index b4b3bd2..6b13fbf 100644
--- a/src/findkey.c
+++ b/src/findkey.c
@@ -151,3 +151,3 @@ _gdbm_findkey (GDBM_FILE dbf, datum key, char **ret_dptr, int *ret_hash_val)
/* If we get here, we never found the key. */
- gdbm_errno = GDBM_ITEM_NOT_FOUND;
+ gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, 0);
return -1;
diff --git a/src/gdbm.h.in b/src/gdbm.h.in
index f8238b9..07ac4dc 100644
--- a/src/gdbm.h.in
+++ b/src/gdbm.h.in
@@ -179,2 +179,6 @@ extern const char * const gdbm_errlist[];
+extern int gdbm_last_errno (GDBM_FILE dbf);
+extern void gdbm_set_errno (GDBM_FILE dbf, gdbm_error ec, int fatal);
+extern void gdbm_clear_error (GDBM_FILE dbf);
+
/* extra prototypes */
diff --git a/src/gdbm_load.c b/src/gdbm_load.c
index 260a601..fd404b9 100644
--- a/src/gdbm_load.c
+++ b/src/gdbm_load.c
@@ -1,3 +1,3 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 2011, 2013 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2013, 2016 Free Software Foundation, Inc.
@@ -55,3 +55,3 @@ set_meta_info (GDBM_FILE dbf)
{
- gdbm_errno = GDBM_ERR_FILE_OWNER;
+ gdbm_set_errno (dbf, GDBM_ERR_FILE_OWNER, 0);
return 1;
@@ -61,3 +61,3 @@ set_meta_info (GDBM_FILE dbf)
{
- gdbm_errno = GDBM_ERR_FILE_OWNER;
+ gdbm_set_errno (dbf, GDBM_ERR_FILE_OWNER, 0);
return 1;
diff --git a/src/gdbmcount.c b/src/gdbmcount.c
index 8e22213..17016b2 100644
--- a/src/gdbmcount.c
+++ b/src/gdbmcount.c
@@ -3,3 +3,4 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 1993, 1994, 2007, 2011, 2013 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 2007, 2011, 2013,
+ 2016 Free Software Foundation, Inc.
@@ -44,3 +45,3 @@ gdbm_count (GDBM_FILE dbf, gdbm_count_t *pcount)
{
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, 0);
return -1;
diff --git a/src/gdbmdefs.h b/src/gdbmdefs.h
index c62413b..e873117 100644
--- a/src/gdbmdefs.h
+++ b/src/gdbmdefs.h
@@ -161,2 +161,8 @@ struct gdbm_file_info {
unsigned cloexec :1;
+
+ /* Last error was fatal */
+ unsigned fatal :1;
+
+ /* Last error number */
+ int last_error;
diff --git a/src/gdbmdelete.c b/src/gdbmdelete.c
index 4396b14..7e2867d 100644
--- a/src/gdbmdelete.c
+++ b/src/gdbmdelete.c
@@ -41,3 +41,3 @@ gdbm_delete (GDBM_FILE dbf, datum key)
{
- gdbm_errno = GDBM_READER_CANT_DELETE;
+ gdbm_set_errno (dbf, GDBM_READER_CANT_DELETE, 0);
return -1;
@@ -46,3 +46,3 @@ gdbm_delete (GDBM_FILE dbf, datum key)
/* Initialize the gdbm_errno variable. */
- gdbm_errno = GDBM_NO_ERROR;
+ gdbm_set_errno (dbf, GDBM_NO_ERROR, 0);
diff --git a/src/gdbmdump.c b/src/gdbmdump.c
index 1b374f3..cf1e2fc 100644
--- a/src/gdbmdump.c
+++ b/src/gdbmdump.c
@@ -1,3 +1,3 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 2011, 2013 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2013, 2016 Free Software Foundation, Inc.
@@ -101,3 +101,3 @@ _gdbm_dump_ascii (GDBM_FILE dbf, FILE *fp)
free (data.dptr);
- gdbm_errno = rc;
+ gdbm_set_errno (dbf, rc, 0);
break;
@@ -141,2 +141,3 @@ gdbm_dump_to_file (GDBM_FILE dbf, FILE *fp, int format)
default:
+ gdbm_set_errno (NULL, GDBM_BAD_OPEN_FLAGS, 0);
return EINVAL;
@@ -145,3 +146,6 @@ gdbm_dump_to_file (GDBM_FILE dbf, FILE *fp, int format)
if (rc == 0 && ferror (fp))
- rc = gdbm_errno = GDBM_FILE_WRITE_ERROR;
+ {
+ gdbm_set_errno (NULL, GDBM_FILE_WRITE_ERROR, 0);
+ rc = -1;
+ }
@@ -164,3 +168,3 @@ gdbm_dump (GDBM_FILE dbf, const char *filename, int fmt, int open_flags,
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return -1;
@@ -172,3 +176,3 @@ gdbm_dump (GDBM_FILE dbf, const char *filename, int fmt, int open_flags,
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return -1;
@@ -177,3 +181,3 @@ gdbm_dump (GDBM_FILE dbf, const char *filename, int fmt, int open_flags,
default:
- gdbm_errno = GDBM_BAD_OPEN_FLAGS;
+ gdbm_set_errno (NULL, GDBM_BAD_OPEN_FLAGS, 0);
return -1;
@@ -185,3 +189,3 @@ gdbm_dump (GDBM_FILE dbf, const char *filename, int fmt, int open_flags,
close (nfd);
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return -1;
diff --git a/src/gdbmerrno.c b/src/gdbmerrno.c
index 3b5cf4c..2ff647f 100644
--- a/src/gdbmerrno.c
+++ b/src/gdbmerrno.c
@@ -3,3 +3,3 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 1993, 2007, 2011, 2013 Free Software Foundation, Inc.
+ Copyright (C) 1993, 2007, 2011, 2013, 2016 Free Software Foundation, Inc.
@@ -26,2 +26,36 @@ gdbm_error gdbm_errno = GDBM_NO_ERROR;
+/* Store error code EC in the database structure DBF and in the
+ global variable gdbm_error.
+*/
+void
+gdbm_set_errno (GDBM_FILE dbf, gdbm_error ec, int fatal)
+{
+ if (dbf)
+ {
+ dbf->last_error = ec;
+ dbf->fatal = fatal;
+ }
+ gdbm_errno = ec;
+}
+
+/* Retrieve last error code for the database DBF. */
+int
+gdbm_last_errno (GDBM_FILE dbf)
+{
+ if (!dbf)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ return dbf->last_error;
+}
+
+/* Clear error state for the database DBF. */
+void
+gdbm_clear_error (GDBM_FILE dbf)
+{
+ if (dbf)
+ dbf->last_error = GDBM_NO_ERROR;
+}
+
/* this is not static so that applications may access the array if they
diff --git a/src/gdbmexists.c b/src/gdbmexists.c
index 9bbd308..0d551c0 100644
--- a/src/gdbmexists.c
+++ b/src/gdbmexists.c
@@ -3,3 +3,3 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 1993, 2007, 2011, 2013 Free Software Foundation, Inc.
+ Copyright (C) 1993, 2007, 2011, 2013, 2016 Free Software Foundation, Inc.
@@ -32,3 +32,3 @@ gdbm_exists (GDBM_FILE dbf, datum key)
if (gdbm_errno == GDBM_ITEM_NOT_FOUND)
- gdbm_errno = GDBM_NO_ERROR;
+ gdbm_set_errno (dbf, GDBM_NO_ERROR, 0);
return 0;
diff --git a/src/gdbmexp.c b/src/gdbmexp.c
index e68457f..613166e 100644
--- a/src/gdbmexp.c
+++ b/src/gdbmexp.c
@@ -83,3 +83,3 @@ gdbm_export_to_file (GDBM_FILE dbf, FILE *fp)
- gdbm_errno = GDBM_FILE_WRITE_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_WRITE_ERROR, 0);
return -1;
@@ -100,3 +100,3 @@ gdbm_export (GDBM_FILE dbf, const char *exportfile, int flags, int mode)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return -1;
@@ -108,3 +108,3 @@ gdbm_export (GDBM_FILE dbf, const char *exportfile, int flags, int mode)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return -1;
@@ -114,5 +114,5 @@ gdbm_export (GDBM_FILE dbf, const char *exportfile, int flags, int mode)
#ifdef GDBM_BAD_OPEN_FLAGS
- gdbm_errno = GDBM_BAD_OPEN_FLAGS;
+ gdbm_set_errno (NULL, GDBM_BAD_OPEN_FLAGS, 0);
#else
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
#endif
@@ -125,3 +125,3 @@ gdbm_export (GDBM_FILE dbf, const char *exportfile, int flags, int mode)
close (nfd);
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return -1;
diff --git a/src/gdbmfetch.c b/src/gdbmfetch.c
index a765c52..ca82550 100644
--- a/src/gdbmfetch.c
+++ b/src/gdbmfetch.c
@@ -40,3 +40,3 @@ gdbm_fetch (GDBM_FILE dbf, datum key)
/* Initialize the gdbm_errno variable. */
- gdbm_errno = GDBM_NO_ERROR;
+ gdbm_set_errno (dbf, GDBM_NO_ERROR, 0);
@@ -56,3 +56,3 @@ gdbm_fetch (GDBM_FILE dbf, datum key)
{
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, 0);
return return_val;
diff --git a/src/gdbmimp.c b/src/gdbmimp.c
index 31092aa..96c774f 100644
--- a/src/gdbmimp.c
+++ b/src/gdbmimp.c
@@ -3,3 +3,3 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 2007, 2011, 2013 Free Software Foundation, Inc.
+ Copyright (C) 2007, 2011, 2013, 2016 Free Software Foundation, Inc.
@@ -46,3 +46,3 @@ gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag)
{
- gdbm_errno = GDBM_FILE_READ_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_READ_ERROR, 0);
return -1;
@@ -68,3 +68,3 @@ gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag)
{
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return -1;
@@ -76,3 +76,3 @@ gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag)
free (kbuffer);
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return -1;
@@ -162,3 +162,3 @@ gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag)
- gdbm_errno = ec;
+ gdbm_set_errno (NULL, ec, 0);
return -1;
@@ -175,3 +175,3 @@ gdbm_import (GDBM_FILE dbf, const char *importfile, int flag)
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return -1;
diff --git a/src/gdbmload.c b/src/gdbmload.c
index 19ee0fb..5723b95 100644
--- a/src/gdbmload.c
+++ b/src/gdbmload.c
@@ -1,3 +1,3 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 2011, 2013 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2013, 2016 Free Software Foundation, Inc.
@@ -375,3 +375,3 @@ _set_gdbm_meta_info (GDBM_FILE dbf, char *param, int meta_mask)
{
- gdbm_errno = GDBM_ERR_FILE_OWNER;
+ gdbm_set_errno (dbf, GDBM_ERR_FILE_OWNER, 0);
rc = 1;
@@ -381,3 +381,3 @@ _set_gdbm_meta_info (GDBM_FILE dbf, char *param, int meta_mask)
{
- gdbm_errno = GDBM_ERR_FILE_OWNER;
+ gdbm_set_errno (dbf, GDBM_ERR_FILE_OWNER, 0);
rc = 1;
@@ -583,3 +583,3 @@ gdbm_load_from_file (GDBM_FILE *pdbf, FILE *fp, int replace,
{
- gdbm_errno = GDBM_NO_DBNAME;
+ gdbm_set_errno (NULL, GDBM_NO_DBNAME, 0);
return -1;
@@ -598,3 +598,3 @@ gdbm_load_from_file (GDBM_FILE *pdbf, FILE *fp, int replace,
{
- gdbm_errno = GDBM_NO_DBNAME;
+ gdbm_set_errno (NULL, GDBM_NO_DBNAME, 0);
return -1;
@@ -610,3 +610,3 @@ gdbm_load_from_file (GDBM_FILE *pdbf, FILE *fp, int replace,
*line = df.line;
- gdbm_errno = rc;
+ gdbm_set_errno (NULL, rc, 0);
return -1;
@@ -627,3 +627,3 @@ gdbm_load (GDBM_FILE *pdbf, const char *filename, int replace,
{
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return -1;
diff --git a/src/gdbmopen.c b/src/gdbmopen.c
index 14c687d..b8b14e3 100644
--- a/src/gdbmopen.c
+++ b/src/gdbmopen.c
@@ -3,4 +3,4 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 1990, 1991, 1993, 2007, 2011, 2013 Free Software Foundation,
- Inc.
+ Copyright (C) 1990, 1991, 1993, 2007, 2011, 2013,
+ 2016 Free Software Foundation, Inc.
@@ -69,3 +69,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
/* Initialize the gdbm_errno variable. */
- gdbm_errno = GDBM_NO_ERROR;
+ gdbm_set_errno (NULL, GDBM_NO_ERROR, 0);
@@ -75,3 +75,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
{
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return NULL;
@@ -100,3 +100,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
free (dbf);
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return NULL;
@@ -157,3 +157,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
free (dbf));
- gdbm_errno = GDBM_FILE_OPEN_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, 0);
return NULL;
@@ -167,3 +167,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
free (dbf));
- gdbm_errno = GDBM_FILE_STAT_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_STAT_ERROR, 0);
return NULL;
@@ -177,3 +177,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
free (dbf);
- gdbm_errno = GDBM_EMPTY_DATABASE;
+ gdbm_set_errno (NULL, GDBM_EMPTY_DATABASE, 0);
return NULL;
@@ -192,6 +192,5 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
free (dbf);
- if ((flags & GDBM_OPENMASK) == GDBM_READER)
- gdbm_errno = GDBM_CANT_BE_READER;
- else
- gdbm_errno = GDBM_CANT_BE_WRITER;
+ gdbm_set_errno (NULL,
+ (flags & GDBM_OPENMASK) == GDBM_READER
+ ? GDBM_CANT_BE_READER : GDBM_CANT_BE_WRITER, 0);
return NULL;
@@ -226,3 +225,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
gdbm_close (dbf);
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return NULL;
@@ -247,3 +246,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
gdbm_close (dbf);
- gdbm_errno = GDBM_BLOCK_SIZE_ERROR;
+ gdbm_set_errno (NULL, GDBM_BLOCK_SIZE_ERROR, 0);
return NULL;
@@ -256,3 +255,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
gdbm_close (dbf);
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return NULL;
@@ -270,3 +269,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
gdbm_close (dbf);
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return NULL;
@@ -296,3 +295,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_errno = rc;
+ gdbm_set_errno (NULL, rc, 0);
return NULL;
@@ -305,3 +304,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_errno = rc;
+ gdbm_set_errno (NULL, rc, 0);
return NULL;
@@ -314,3 +313,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_errno = rc;
+ gdbm_set_errno (NULL, rc, 0);
return NULL;
@@ -335,3 +334,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_errno = rc;
+ gdbm_set_errno (NULL, rc, 0);
return NULL;
@@ -349,3 +348,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
case GDBM_MAGIC64_SWAP:
- gdbm_errno = GDBM_BYTE_SWAPPED;
+ gdbm_set_errno (NULL, GDBM_BYTE_SWAPPED, 0);
break;
@@ -353,6 +352,6 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
case GDBM_MAGIC64:
- gdbm_errno = GDBM_BAD_FILE_OFFSET;
+ gdbm_set_errno (NULL, GDBM_BAD_FILE_OFFSET, 0);
break;
default:
- gdbm_errno = GDBM_BAD_MAGIC_NUMBER;
+ gdbm_set_errno (NULL, GDBM_BAD_MAGIC_NUMBER, 0);
}
@@ -366,3 +365,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
gdbm_close (dbf);
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return NULL;
@@ -375,3 +374,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_errno = rc;
+ gdbm_set_errno (NULL, rc, 0);
return NULL;
@@ -384,3 +383,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
gdbm_close (dbf);
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, 0);
return NULL;
@@ -393,3 +392,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_errno = GDBM_FILE_SEEK_ERROR;
+ gdbm_set_errno (NULL, GDBM_FILE_SEEK_ERROR, 0);
return NULL;
@@ -401,3 +400,3 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_errno = rc;
+ gdbm_set_errno (NULL, rc, 0);
return NULL;
@@ -415,5 +414,5 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
/* gdbm_errno should already be set. */
- close (dbf->desc);
- free (dbf->name);
- free (dbf);
+ SAVE_ERRNO (close (dbf->desc);
+ free (dbf->name);
+ free (dbf));
return NULL;
@@ -450,3 +449,3 @@ _gdbm_init_cache(GDBM_FILE dbf, size_t size)
{
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, 1);
return -1;
@@ -461,3 +460,3 @@ _gdbm_init_cache(GDBM_FILE dbf, size_t size)
{
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, 1);
return -1;
diff --git a/src/gdbmreorg.c b/src/gdbmreorg.c
index 7e554cb..360f5c8 100644
--- a/src/gdbmreorg.c
+++ b/src/gdbmreorg.c
@@ -3,4 +3,4 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 1990, 1991, 1993, 2007, 2011, 2013 Free Software Foundation,
- Inc.
+ Copyright (C) 1990, 1991, 1993, 2007, 2011, 2013,
+ 2016 Free Software Foundation, Inc.
@@ -71,3 +71,3 @@ gdbm_reorganize (GDBM_FILE dbf)
{
- gdbm_errno = GDBM_READER_CANT_REORGANIZE;
+ gdbm_set_errno (dbf, GDBM_READER_CANT_REORGANIZE, 0);
return -1;
@@ -78,3 +78,3 @@ gdbm_reorganize (GDBM_FILE dbf)
{
- gdbm_errno = GDBM_FILE_STAT_ERROR;
+ gdbm_set_errno (dbf, GDBM_FILE_STAT_ERROR, 0);
return -1;
@@ -83,3 +83,3 @@ gdbm_reorganize (GDBM_FILE dbf)
/* Initialize the gdbm_errno variable. */
- gdbm_errno = GDBM_NO_ERROR;
+ gdbm_set_errno (dbf, GDBM_NO_ERROR, 0);
@@ -90,3 +90,3 @@ gdbm_reorganize (GDBM_FILE dbf)
{
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, 0);
return -1;
@@ -111,3 +111,3 @@ gdbm_reorganize (GDBM_FILE dbf)
free (new_name);
- gdbm_errno = GDBM_REORGANIZE_FAILED;
+ gdbm_set_errno (NULL, GDBM_REORGANIZE_FAILED, 0);
return -1;
@@ -128,3 +128,3 @@ gdbm_reorganize (GDBM_FILE dbf)
gdbm_close (new_dbf);
- gdbm_errno = GDBM_REORGANIZE_FAILED;
+ gdbm_set_errno (NULL, GDBM_REORGANIZE_FAILED, 0);
unlink (new_name);
@@ -138,3 +138,3 @@ gdbm_reorganize (GDBM_FILE dbf)
gdbm_close (new_dbf);
- gdbm_errno = GDBM_REORGANIZE_FAILED;
+ gdbm_set_errno (NULL, GDBM_REORGANIZE_FAILED, 0);
unlink (new_name);
@@ -161,3 +161,3 @@ gdbm_reorganize (GDBM_FILE dbf)
{
- gdbm_errno = GDBM_REORGANIZE_FAILED;
+ gdbm_set_errno (NULL, GDBM_REORGANIZE_FAILED, 0);
gdbm_close (new_dbf);
diff --git a/src/gdbmseq.c b/src/gdbmseq.c
index 0742383..c62a13b 100644
--- a/src/gdbmseq.c
+++ b/src/gdbmseq.c
@@ -67,3 +67,3 @@ get_next_key (GDBM_FILE dbf, int elem_loc, datum *return_val)
/* No next key, just return. */
- gdbm_errno = GDBM_ITEM_NOT_FOUND;
+ gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, 0);
return;
@@ -84,3 +84,3 @@ get_next_key (GDBM_FILE dbf, int elem_loc, datum *return_val)
return_val->dsize = 0;
- gdbm_errno = GDBM_MALLOC_ERROR;
+ gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, 0);
}
@@ -103,3 +103,3 @@ gdbm_firstkey (GDBM_FILE dbf)
/* Initialize the gdbm_errno variable. */
- gdbm_errno = GDBM_NO_ERROR;
+ gdbm_set_errno (dbf, GDBM_NO_ERROR, 0);
@@ -124,3 +124,3 @@ gdbm_nextkey (GDBM_FILE dbf, datum key)
/* Initialize the gdbm_errno variable. */
- gdbm_errno = GDBM_NO_ERROR;
+ gdbm_set_errno (dbf, GDBM_NO_ERROR, 0);
@@ -132,3 +132,3 @@ gdbm_nextkey (GDBM_FILE dbf, datum key)
{
- gdbm_errno = GDBM_ITEM_NOT_FOUND; /* FIXME: special error code perhaps */
+ gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, 0); /* FIXME: special error code perhaps */
return return_val;
diff --git a/src/gdbmsetopt.c b/src/gdbmsetopt.c
index 23cdd9a..e372a92 100644
--- a/src/gdbmsetopt.c
+++ b/src/gdbmsetopt.c
@@ -3,3 +3,4 @@
/* This file is part of GDBM, the GNU data base manager.
- Copyright (C) 1993, 1994, 2007, 2011, 2013 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 2007, 2011, 2013,
+ 2016 Free Software Foundation, Inc.
@@ -32,6 +33,3 @@ getbool (void *optval, int optlen)
(((n = *(int*)optval) != TRUE) && n != FALSE))
- {
- gdbm_errno = GDBM_OPT_ILLEGAL;
- return -1;
- }
+ return -1;
return n;
@@ -43,6 +41,3 @@ get_size (void *optval, int optlen, size_t *ret)
if (!optval)
- {
- gdbm_errno = GDBM_OPT_ILLEGAL;
- return -1;
- }
+ return -1;
if (optlen == sizeof (unsigned))
@@ -54,6 +49,3 @@ get_size (void *optval, int optlen, size_t *ret)
else
- {
- gdbm_errno = GDBM_OPT_ILLEGAL;
- return -1;
- }
+ return -1;
return 0;
@@ -75,3 +67,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ALREADY_SET;
+ gdbm_set_errno (dbf, GDBM_OPT_ALREADY_SET, 0);
return -1;
@@ -80,3 +72,6 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
if (get_size (optval, optlen, &sz))
- return -1;
+ {
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
+ return -1;
+ }
return _gdbm_init_cache (dbf, (sz > 9) ? sz : 10);
@@ -86,3 +81,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -95,3 +90,6 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
if ((n = getbool (optval, optlen)) == -1)
- return -1;
+ {
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
+ return -1;
+ }
dbf->fast_write = n;
@@ -104,3 +102,6 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
if ((n = getbool (optval, optlen)) == -1)
- return -1;
+ {
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
+ return -1;
+ }
dbf->fast_write = !n;
@@ -111,3 +112,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -121,3 +122,6 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
if ((n = getbool (optval, optlen)) == -1)
- return -1;
+ {
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
+ return -1;
+ }
dbf->central_free = n;
@@ -128,3 +132,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -138,3 +142,6 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
if ((n = getbool (optval, optlen)) == -1)
- return -1;
+ {
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
+ return -1;
+ }
dbf->coalesce_blocks = n;
@@ -145,3 +152,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (NULL, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -155,3 +162,6 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
if ((n = getbool (optval, optlen)) == -1)
- return -1;
+ {
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
+ return -1;
+ }
__fsync (dbf);
@@ -172,3 +182,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
#else
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -180,3 +190,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -193,3 +203,6 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
if (get_size (optval, optlen, &sz))
- return -1;
+ {
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
+ return -1;
+ }
dbf->mapped_size_max = ((sz + page_size - 1) / page_size) *
@@ -200,3 +213,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
#else
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -207,3 +220,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -217,3 +230,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);
return -1;
@@ -236,3 +249,3 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
{
- gdbm_errno = GDBM_OPT_ILLEGAL;
+ gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, 0);