diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-09 08:40:04 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-09 08:47:16 +0300 |
commit | 479a469033903a76b9c073806037dd66176f3da0 (patch) | |
tree | 2841b611288f9343868e6ded82909b096a62e121 | |
parent | 2efd8358711ab3ea6c0ecaab75d195837b4b3e37 (diff) | |
download | gdbm-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-- | NEWS | 10 | ||||
-rw-r--r-- | compat/dbminit.c | 2 | ||||
-rw-r--r-- | compat/dbmopen.c | 24 | ||||
-rw-r--r-- | src/bucket.c | 8 | ||||
-rw-r--r-- | src/findkey.c | 2 | ||||
-rw-r--r-- | src/gdbm.h.in | 4 | ||||
-rw-r--r-- | src/gdbm_load.c | 6 | ||||
-rw-r--r-- | src/gdbmcount.c | 5 | ||||
-rw-r--r-- | src/gdbmdefs.h | 6 | ||||
-rw-r--r-- | src/gdbmdelete.c | 4 | ||||
-rw-r--r-- | src/gdbmdump.c | 18 | ||||
-rw-r--r-- | src/gdbmerrno.c | 36 | ||||
-rw-r--r-- | src/gdbmexists.c | 4 | ||||
-rw-r--r-- | src/gdbmexp.c | 12 | ||||
-rw-r--r-- | src/gdbmfetch.c | 4 | ||||
-rw-r--r-- | src/gdbmimp.c | 12 | ||||
-rw-r--r-- | src/gdbmload.c | 14 | ||||
-rw-r--r-- | src/gdbmopen.c | 65 | ||||
-rw-r--r-- | src/gdbmreorg.c | 20 | ||||
-rw-r--r-- | src/gdbmseq.c | 10 | ||||
-rw-r--r-- | src/gdbmsetopt.c | 79 | ||||
-rw-r--r-- | src/gdbmstore.c | 12 | ||||
-rw-r--r-- | src/gdbmsync.c | 6 | ||||
-rw-r--r-- | src/mmap.c | 8 |
24 files changed, 221 insertions, 150 deletions
@@ -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); |