aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/base64.c2
-rw-r--r--src/bucket.c14
-rw-r--r--src/falloc.c12
-rw-r--r--src/findkey.c9
-rw-r--r--src/gdbm_load.c4
-rw-r--r--src/gdbmdefs.h14
-rw-r--r--src/gdbmdelete.c2
-rw-r--r--src/gdbmdump.c14
-rw-r--r--src/gdbmexp.c12
-rw-r--r--src/gdbmfetch.c2
-rw-r--r--src/gdbmimp.c10
-rw-r--r--src/gdbmload.c12
-rw-r--r--src/gdbmopen.c57
-rw-r--r--src/gdbmseq.c9
-rw-r--r--src/gdbmsetopt.c38
-rw-r--r--src/gdbmstore.c17
-rw-r--r--src/gdbmtool.c8
17 files changed, 123 insertions, 113 deletions
diff --git a/src/base64.c b/src/base64.c
index a4edf49..b34e788 100644
--- a/src/base64.c
+++ b/src/base64.c
@@ -1,5 +1,5 @@
/* 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.
GDBM is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/bucket.c b/src/bucket.c
index cd9575c..912a7b4 100644
--- a/src/bucket.c
+++ b/src/bucket.c
@@ -103,7 +103,7 @@ _gdbm_get_bucket (GDBM_FILE dbf, int dir_index)
if (file_pos != bucket_adr)
{
_gdbm_fatal (dbf, _("lseek error"));
- gdbm_set_errno (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
return -1;
}
@@ -112,7 +112,7 @@ _gdbm_get_bucket (GDBM_FILE dbf, int dir_index)
if (rc)
{
_gdbm_fatal (dbf, gdbm_strerror (rc));
- gdbm_set_errno (dbf, rc, TRUE);
+ GDBM_SET_ERRNO (dbf, rc, TRUE);
return -1;
}
}
@@ -147,13 +147,13 @@ _gdbm_read_bucket_at (GDBM_FILE dbf, off_t off, hash_bucket *bucket,
file_pos = __lseek (dbf, off, SEEK_SET);
if (file_pos != off)
{
- gdbm_set_errno (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
return -1;
}
rc = _gdbm_full_read (dbf, bucket, size);
if (rc)
{
- gdbm_set_errno (dbf, rc, TRUE);
+ GDBM_SET_ERRNO (dbf, rc, TRUE);
return -1;
}
return 0;
@@ -254,7 +254,7 @@ _gdbm_split_bucket (GDBM_FILE dbf, int next_insert)
malloc (dir_size));
if (new_dir == NULL)
{
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE);
_gdbm_fatal (dbf, _("malloc error"));
return -1;
}
@@ -386,7 +386,7 @@ _gdbm_write_bucket (GDBM_FILE dbf, cache_elem *ca_entry)
__lseek (dbf, ca_entry->ca_adr, SEEK_SET));
if (file_pos != ca_entry->ca_adr)
{
- gdbm_set_errno (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
_gdbm_fatal (dbf, _("lseek error"));
return -1;
}
@@ -394,7 +394,7 @@ _gdbm_write_bucket (GDBM_FILE dbf, cache_elem *ca_entry)
_gdbm_full_write (dbf, ca_entry->ca_bucket, dbf->header->bucket_size));
if (rc)
{
- gdbm_set_errno (dbf, rc, TRUE);
+ GDBM_SET_ERRNO (dbf, rc, TRUE);
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
diff --git a/src/falloc.c b/src/falloc.c
index 8e53a61..c5ffdc3 100644
--- a/src/falloc.c
+++ b/src/falloc.c
@@ -183,7 +183,7 @@ pop_avail_block (GDBM_FILE dbf)
malloc (new_el.av_size));
if (new_blk == NULL)
{
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE);
_gdbm_fatal(dbf, _("malloc failed"));
return -1;
}
@@ -193,7 +193,7 @@ pop_avail_block (GDBM_FILE dbf)
__lseek (dbf, new_el.av_adr, SEEK_SET));
if (file_pos != new_el.av_adr)
{
- gdbm_set_errno (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
_gdbm_fatal (dbf, _("lseek error"));
return -1;
}
@@ -202,7 +202,7 @@ pop_avail_block (GDBM_FILE dbf)
_gdbm_full_read (dbf, new_blk, new_el.av_size));
if (rc)
{
- gdbm_set_errno (dbf, rc, TRUE);
+ GDBM_SET_ERRNO (dbf, rc, TRUE);
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
@@ -282,7 +282,7 @@ push_avail_block (GDBM_FILE dbf)
malloc (av_size));
if (temp == NULL)
{
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE);
_gdbm_fatal (dbf, _("malloc error"));
return -1;
}
@@ -312,7 +312,7 @@ push_avail_block (GDBM_FILE dbf)
__lseek (dbf, av_adr, SEEK_SET));
if (file_pos != av_adr)
{
- gdbm_set_errno (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
_gdbm_fatal (dbf, _("lseek error"));
return -1;
}
@@ -321,7 +321,7 @@ push_avail_block (GDBM_FILE dbf)
_gdbm_full_write (dbf, temp, av_size));
if (rc)
{
- gdbm_set_errno (dbf, rc, TRUE);
+ GDBM_SET_ERRNO (dbf, rc, TRUE);
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
diff --git a/src/findkey.c b/src/findkey.c
index a757d92..135856b 100644
--- a/src/findkey.c
+++ b/src/findkey.c
@@ -59,7 +59,7 @@ _gdbm_read_entry (GDBM_FILE dbf, int elem_loc)
data_ca->dptr = (char *) malloc (key_size + data_size);
if (data_ca->dptr == NULL)
{
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_LOOKUP);
_gdbm_fatal (dbf, _("malloc error"));
return NULL;
}
@@ -70,7 +70,7 @@ _gdbm_read_entry (GDBM_FILE dbf, int elem_loc)
SEEK_SET));
if (file_pos != dbf->bucket->h_table[elem_loc].data_pointer)
{
- gdbm_set_errno (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_FILE_SEEK_ERROR, TRUE, GDBM_DEBUG_LOOKUP);
_gdbm_fatal (dbf, _("lseek error"));
return NULL;
}
@@ -79,7 +79,7 @@ _gdbm_read_entry (GDBM_FILE dbf, int elem_loc)
_gdbm_full_read (dbf, data_ca->dptr, key_size+data_size));
if (rc)
{
- gdbm_set_errno (dbf, rc, TRUE);
+ GDBM_SET_ERRNO2 (dbf, rc, TRUE, GDBM_DEBUG_LOOKUP);
_gdbm_fatal (dbf, gdbm_strerror (rc));
return NULL;
}
@@ -184,8 +184,7 @@ _gdbm_findkey (GDBM_FILE dbf, datum key, char **ret_dptr, int *ret_hash_val)
}
/* If we get here, we never found the key. */
- GDBM_DEBUG (GDBM_DEBUG_LOOKUP, "%s: not found", dbf->name);
- gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, FALSE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_ITEM_NOT_FOUND, FALSE, GDBM_DEBUG_LOOKUP);
return -1;
}
diff --git a/src/gdbm_load.c b/src/gdbm_load.c
index c4b9ee6..c24e3c2 100644
--- a/src/gdbm_load.c
+++ b/src/gdbm_load.c
@@ -53,13 +53,13 @@ set_meta_info (GDBM_FILE dbf)
{
if (fchown (fd, owner_uid, owner_gid))
{
- gdbm_set_errno (dbf, GDBM_ERR_FILE_OWNER, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_ERR_FILE_OWNER, FALSE);
return 1;
}
}
if ((meta_mask & GDBM_META_MASK_MODE) && fchmod (fd, mode))
{
- gdbm_set_errno (dbf, GDBM_ERR_FILE_OWNER, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_ERR_FILE_OWNER, FALSE);
return 1;
}
}
diff --git a/src/gdbmdefs.h b/src/gdbmdefs.h
index 631c9cd..e1c143d 100644
--- a/src/gdbmdefs.h
+++ b/src/gdbmdefs.h
@@ -288,6 +288,16 @@ struct gdbm_file_info
} \
while (0)
+# define GDBM_SET_ERRNO2(dbf, ec, fatal, m) \
+ do \
+ { \
+ GDBM_DEBUG((m) | GDBM_DEBUG_ERR, "%s: error " #ec "%s", \
+ ((dbf) ? ((GDBM_FILE)dbf)->name : "<nodbf>"), \
+ ((fatal) ? " (needs recovery)" : "")); \
+ gdbm_set_errno(dbf, ec, fatal); \
+ } \
+ while (0)
+
typedef int (*gdbm_debug_hook) (char const *, int, char const *, void *);
extern void _gdbm_debug_hook_install (char const *, gdbm_debug_hook, void *);
extern void _gdbm_debug_hook_remove (char const *);
@@ -304,7 +314,11 @@ extern int _gdbm_debug_hook_val (char const *);
# define GDBM_DEBUG_HOOK(id) 0
# define GDBM_DEBUG_OVERRIDE(id, stmt) (stmt)
# define GDBM_DEBUG_ALLOC(id, stmt) (stmt)
+# define GDBM_SET_ERRNO2(dbf, ec, fatal, m) gdbm_set_errno (dbf, ec, fatal)
#endif
+
+# define GDBM_SET_ERRNO(dbf, ec, fatal) GDBM_SET_ERRNO2 (dbf, ec, fatal, 0)
+
/* Now define all the routines in use. */
#include "proto.h"
diff --git a/src/gdbmdelete.c b/src/gdbmdelete.c
index a735d0d..cb64210 100644
--- a/src/gdbmdelete.c
+++ b/src/gdbmdelete.c
@@ -41,7 +41,7 @@ gdbm_delete (GDBM_FILE dbf, datum key)
/* First check to make sure this guy is a writer. */
if (dbf->read_write == GDBM_READER)
{
- gdbm_set_errno (dbf, GDBM_READER_CANT_DELETE, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_READER_CANT_DELETE, FALSE);
return -1;
}
diff --git a/src/gdbmdump.c b/src/gdbmdump.c
index d4ec5b6..4779acb 100644
--- a/src/gdbmdump.c
+++ b/src/gdbmdump.c
@@ -99,7 +99,7 @@ _gdbm_dump_ascii (GDBM_FILE dbf, FILE *fp)
{
free (key.dptr);
free (data.dptr);
- gdbm_set_errno (dbf, rc, FALSE);
+ GDBM_SET_ERRNO (dbf, rc, FALSE);
break;
}
}
@@ -142,13 +142,13 @@ gdbm_dump_to_file (GDBM_FILE dbf, FILE *fp, int format)
break;
default:
- gdbm_set_errno (NULL, GDBM_BAD_OPEN_FLAGS, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_BAD_OPEN_FLAGS, FALSE);
return EINVAL;
}
if (rc == 0 && ferror (fp))
{
- gdbm_set_errno (NULL, GDBM_FILE_WRITE_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_WRITE_ERROR, FALSE);
rc = -1;
}
@@ -172,7 +172,7 @@ gdbm_dump (GDBM_FILE dbf, const char *filename, int fmt, int open_flags,
nfd = open (filename, O_WRONLY | O_CREAT | O_EXCL, mode);
if (nfd == -1)
{
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
return -1;
}
break;
@@ -180,12 +180,12 @@ gdbm_dump (GDBM_FILE dbf, const char *filename, int fmt, int open_flags,
nfd = open (filename, O_WRONLY | O_CREAT | O_TRUNC, mode);
if (nfd == -1)
{
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
return -1;
}
break;
default:
- gdbm_set_errno (NULL, GDBM_BAD_OPEN_FLAGS, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_BAD_OPEN_FLAGS, FALSE);
return -1;
}
@@ -193,7 +193,7 @@ gdbm_dump (GDBM_FILE dbf, const char *filename, int fmt, int open_flags,
if (!fp)
{
close (nfd);
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
return -1;
}
rc = gdbm_dump_to_file (dbf, fp, fmt);
diff --git a/src/gdbmexp.c b/src/gdbmexp.c
index 4092c62..668d6a0 100644
--- a/src/gdbmexp.c
+++ b/src/gdbmexp.c
@@ -84,7 +84,7 @@ gdbm_export_to_file (GDBM_FILE dbf, FILE *fp)
write_fail:
- gdbm_set_errno (NULL, GDBM_FILE_WRITE_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_WRITE_ERROR, FALSE);
return -1;
}
@@ -101,7 +101,7 @@ gdbm_export (GDBM_FILE dbf, const char *exportfile, int flags, int mode)
nfd = open (exportfile, O_WRONLY | O_CREAT | O_EXCL, mode);
if (nfd == -1)
{
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
return -1;
}
break;
@@ -109,15 +109,15 @@ gdbm_export (GDBM_FILE dbf, const char *exportfile, int flags, int mode)
nfd = open (exportfile, O_WRONLY | O_CREAT | O_TRUNC, mode);
if (nfd == -1)
{
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
return -1;
}
break;
default:
#ifdef GDBM_BAD_OPEN_FLAGS
- gdbm_set_errno (NULL, GDBM_BAD_OPEN_FLAGS, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_BAD_OPEN_FLAGS, FALSE);
#else
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
#endif
return -1;
}
@@ -126,7 +126,7 @@ gdbm_export (GDBM_FILE dbf, const char *exportfile, int flags, int mode)
if (!fp)
{
close (nfd);
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
return -1;
}
diff --git a/src/gdbmfetch.c b/src/gdbmfetch.c
index 4710cda..6a2fb25 100644
--- a/src/gdbmfetch.c
+++ b/src/gdbmfetch.c
@@ -59,7 +59,7 @@ gdbm_fetch (GDBM_FILE dbf, datum key)
return_val.dptr = (char *) malloc (return_val.dsize);
if (return_val.dptr == NULL)
{
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_READ);
return return_val;
}
memcpy (return_val.dptr, find_data, return_val.dsize);
diff --git a/src/gdbmimp.c b/src/gdbmimp.c
index fc2710d..09a408f 100644
--- a/src/gdbmimp.c
+++ b/src/gdbmimp.c
@@ -47,7 +47,7 @@ gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag)
{
if ((rret = fgetc (fp)) == -1)
{
- gdbm_set_errno (NULL, GDBM_FILE_READ_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_READ_ERROR, FALSE);
return -1;
}
@@ -69,7 +69,7 @@ gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag)
kbuffer = malloc (kbufsize);
if (kbuffer == NULL)
{
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_MALLOC_ERROR, FALSE);
return -1;
}
dbufsize = GDBM_MIN_BLOCK_SIZE;
@@ -77,7 +77,7 @@ gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag)
if (dbuffer == NULL)
{
free (kbuffer);
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_MALLOC_ERROR, FALSE);
return -1;
}
@@ -163,7 +163,7 @@ gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag)
if (ec == GDBM_NO_ERROR)
return count;
- gdbm_set_errno (NULL, ec, FALSE);
+ GDBM_SET_ERRNO (NULL, ec, FALSE);
return -1;
}
@@ -176,7 +176,7 @@ gdbm_import (GDBM_FILE dbf, const char *importfile, int flag)
fp = fopen (importfile, "r");
if (!fp)
{
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
return -1;
}
rc = gdbm_import_from_file (dbf, fp, flag);
diff --git a/src/gdbmload.c b/src/gdbmload.c
index ab250d7..7711d1e 100644
--- a/src/gdbmload.c
+++ b/src/gdbmload.c
@@ -374,13 +374,13 @@ _set_gdbm_meta_info (GDBM_FILE dbf, char *param, int meta_mask)
}
if (fchown (fd, owner_uid, owner_gid))
{
- gdbm_set_errno (dbf, GDBM_ERR_FILE_OWNER, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_ERR_FILE_OWNER, FALSE);
rc = 1;
}
}
if ((meta_flags & META_MODE) && fchmod (fd, mode))
{
- gdbm_set_errno (dbf, GDBM_ERR_FILE_OWNER, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_ERR_FILE_OWNER, FALSE);
rc = 1;
}
}
@@ -582,7 +582,7 @@ gdbm_load_from_file (GDBM_FILE *pdbf, FILE *fp, int replace,
*line = 0;
if (!*pdbf)
{
- gdbm_set_errno (NULL, GDBM_NO_DBNAME, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_NO_DBNAME, FALSE);
return -1;
}
if (gdbm_import_from_file (*pdbf, fp, replace) == -1)
@@ -597,7 +597,7 @@ gdbm_load_from_file (GDBM_FILE *pdbf, FILE *fp, int replace,
{
if (!*pdbf)
{
- gdbm_set_errno (NULL, GDBM_NO_DBNAME, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_NO_DBNAME, FALSE);
return -1;
}
rc = gdbm_load_bdb_dump (&df, *pdbf, replace);
@@ -609,7 +609,7 @@ gdbm_load_from_file (GDBM_FILE *pdbf, FILE *fp, int replace,
{
if (line)
*line = df.line;
- gdbm_set_errno (NULL, rc, FALSE);
+ GDBM_SET_ERRNO (NULL, rc, FALSE);
return -1;
}
return 0;
@@ -626,7 +626,7 @@ gdbm_load (GDBM_FILE *pdbf, const char *filename, int replace,
fp = fopen (filename, "r");
if (!fp)
{
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
return -1;
}
rc = gdbm_load_from_file (pdbf, fp, replace, meta_mask, line);
diff --git a/src/gdbmopen.c b/src/gdbmopen.c
index ce739c2..101d497 100644
--- a/src/gdbmopen.c
+++ b/src/gdbmopen.c
@@ -67,7 +67,7 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
{
if (flags & GDBM_CLOERROR)
SAVE_ERRNO (close (fd));
- gdbm_set_errno (NULL, GDBM_FILE_STAT_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_FILE_STAT_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
@@ -77,7 +77,7 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
{
if (flags & GDBM_CLOERROR)
SAVE_ERRNO (close (fd));
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
@@ -105,7 +105,7 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
if (flags & GDBM_CLOERROR)
close (fd);
free (dbf);
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
@@ -142,7 +142,7 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
close (dbf->desc);
free (dbf->name);
free (dbf);
- gdbm_set_errno (NULL, GDBM_EMPTY_DATABASE, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_EMPTY_DATABASE, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
@@ -158,9 +158,11 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
close (dbf->desc);
free (dbf->name);
free (dbf);
- gdbm_set_errno (NULL,
- (flags & GDBM_OPENMASK) == GDBM_READER
- ? GDBM_CANT_BE_READER : GDBM_CANT_BE_WRITER, 0);
+ GDBM_SET_ERRNO2 (NULL,
+ (flags & GDBM_OPENMASK) == GDBM_READER
+ ? GDBM_CANT_BE_READER : GDBM_CANT_BE_WRITER,
+ FALSE,
+ GDBM_DEBUG_OPEN);
return NULL;
}
}
@@ -196,7 +198,8 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
gdbm_close (dbf);
- gdbm_set_errno (NULL, GDBM_BLOCK_SIZE_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_BLOCK_SIZE_ERROR, FALSE,
+ GDBM_DEBUG_OPEN);
return NULL;
}
else
@@ -212,7 +215,7 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
gdbm_close (dbf);
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
@@ -229,7 +232,7 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
gdbm_close (dbf);
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
dbf->header->dir = dbf->header->block_size;
@@ -245,7 +248,7 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
gdbm_close (dbf);
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
_gdbm_new_bucket (dbf, dbf->bucket, 0);
@@ -341,14 +344,17 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
case GDBM_OMAGIC_SWAP:
case GDBM_MAGIC32_SWAP:
case GDBM_MAGIC64_SWAP:
- gdbm_set_errno (NULL, GDBM_BYTE_SWAPPED, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_BYTE_SWAPPED, FALSE,
+ GDBM_DEBUG_OPEN);
break;
case GDBM_MAGIC32:
case GDBM_MAGIC64:
- gdbm_set_errno (NULL, GDBM_BAD_FILE_OFFSET, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_BAD_FILE_OFFSET, FALSE,
+ GDBM_DEBUG_OPEN);
break;
default:
- gdbm_set_errno (NULL, GDBM_BAD_MAGIC_NUMBER, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_BAD_MAGIC_NUMBER, FALSE,
+ GDBM_DEBUG_OPEN);
}
return NULL;
}
@@ -357,13 +363,10 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
dbf->header = (gdbm_file_header *) malloc (partial_header.block_size);
if (dbf->header == NULL)
{
- GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_OPEN,
- "%s: can't allocate header",
- dbf->name);
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
- gdbm_close (dbf);
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ SAVE_ERRNO (gdbm_close (dbf));
+ GDBM_SET_ERRNO2 (NULL, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
memcpy (dbf->header, &partial_header, sizeof (gdbm_file_header));
@@ -385,13 +388,10 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
dbf->dir = (off_t *) malloc (dbf->header->dir_size);
if (dbf->dir == NULL)
{
- GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_OPEN,
- "%s: can't allocate directory",
- dbf->name);
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
gdbm_close (dbf);
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
@@ -399,13 +399,10 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
file_pos = __lseek (dbf, dbf->header->dir, SEEK_SET);
if (file_pos != dbf->header->dir)
{
- GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_OPEN,
- "%s: __lseek: %s",
- dbf->name, strerror (errno));
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_set_errno (NULL, GDBM_FILE_SEEK_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_FILE_SEEK_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
@@ -512,7 +509,7 @@ gdbm_open (const char *file, int block_size, int flags, int mode,
fd = open (file, fbits, mode);
if (fd < 0)
{
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (NULL, GDBM_FILE_OPEN_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
return gdbm_fd_open (fd, file, block_size, flags | GDBM_CLOERROR,
@@ -531,7 +528,7 @@ _gdbm_init_cache (GDBM_FILE dbf, size_t size)
malloc (sizeof(cache_elem) * size));
if (dbf->bucket_cache == NULL)
{
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE);
return -1;
}
dbf->cache_size = size;
@@ -543,7 +540,7 @@ _gdbm_init_cache (GDBM_FILE dbf, size_t size)
malloc (dbf->header->bucket_size));
if ((dbf->bucket_cache[index]).ca_bucket == NULL)
{
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, TRUE);
+ GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE);
return -1;
}
(dbf->bucket_cache[index]).ca_adr = 0;
diff --git a/src/gdbmseq.c b/src/gdbmseq.c
index 08a8f10..29a34b1 100644
--- a/src/gdbmseq.c
+++ b/src/gdbmseq.c
@@ -64,7 +64,8 @@ get_next_key (GDBM_FILE dbf, int elem_loc, datum *return_val)
else
{
/* No next key, just return. */
- gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, FALSE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_ITEM_NOT_FOUND, FALSE,
+ GDBM_DEBUG_LOOKUP);
return;
}
}
@@ -83,7 +84,7 @@ get_next_key (GDBM_FILE dbf, int elem_loc, datum *return_val)
if (return_val->dptr == NULL)
{
return_val->dsize = 0;
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_MALLOC_ERROR, FALSE, GDBM_DEBUG_LOOKUP);
}
else
memcpy (return_val->dptr, find_data, return_val->dsize);
@@ -147,7 +148,9 @@ gdbm_nextkey (GDBM_FILE dbf, datum key)
if (key.dptr == NULL)
{
GDBM_DEBUG (GDBM_DEBUG_READ, "%s: key not found", dbf->name);
- gdbm_set_errno (dbf, GDBM_ITEM_NOT_FOUND, FALSE); /* FIXME: special error code perhaps */
+ GDBM_SET_ERRNO2 (dbf, GDBM_ITEM_NOT_FOUND, /* FIXME: special error code perhaps */
+ FALSE,
+ GDBM_DEBUG_LOOKUP);
return return_val;
}
diff --git a/src/gdbmsetopt.c b/src/gdbmsetopt.c
index f2cf55e..ddd033e 100644
--- a/src/gdbmsetopt.c
+++ b/src/gdbmsetopt.c
@@ -57,13 +57,13 @@ setopt_gdbm_setcachesize (GDBM_FILE dbf, void *optval, int optlen)
/* Optval will point to the new size of the cache. */
if (dbf->bucket_cache != NULL)
{
- gdbm_set_errno (dbf, GDBM_OPT_ALREADY_SET, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ALREADY_SET, FALSE);
return -1;
}
if (get_size (optval, optlen, &sz))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
return _gdbm_init_cache (dbf, (sz > 9) ? sz : 10);
@@ -74,7 +74,7 @@ setopt_gdbm_getcachesize (GDBM_FILE dbf, void *optval, int optlen)
{
if (!optval || optlen != sizeof (size_t))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
*(size_t*) optval = dbf->cache_size;
@@ -89,7 +89,7 @@ setopt_gdbm_fastmode (GDBM_FILE dbf, void *optval, int optlen)
if ((n = getbool (optval, optlen)) == -1)
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
dbf->fast_write = n;
@@ -104,7 +104,7 @@ setopt_gdbm_setsyncmode (GDBM_FILE dbf, void *optval, int optlen)
/* Optval will point to either true or false. */
if ((n = getbool (optval, optlen)) == -1)
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
dbf->fast_write = !n;
@@ -116,7 +116,7 @@ setopt_gdbm_getsyncmode (GDBM_FILE dbf, void *optval, int optlen)
{
if (!optval || optlen != sizeof (int))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
*(int*) optval = !dbf->fast_write;
@@ -132,7 +132,7 @@ setopt_gdbm_setcentfree (GDBM_FILE dbf, void *optval, int optlen)
/* Optval will point to either true or false. */
if ((n = getbool (optval, optlen)) == -1)
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
dbf->central_free = n;
@@ -144,7 +144,7 @@ setopt_gdbm_getcentfree (GDBM_FILE dbf, void *optval, int optlen)
{
if (!optval || optlen != sizeof (int))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
*(int*) optval = !dbf->central_free;
@@ -160,7 +160,7 @@ setopt_gdbm_setcoalesceblks (GDBM_FILE dbf, void *optval, int optlen)
/* Optval will point to either true or false. */
if ((n = getbool (optval, optlen)) == -1)
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
dbf->coalesce_blocks = n;
@@ -172,7 +172,7 @@ setopt_gdbm_getcoalesceblks (GDBM_FILE dbf, void *optval, int optlen)
{
if (!optval || optlen != sizeof (int))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
*(int*) optval = dbf->coalesce_blocks;
@@ -187,7 +187,7 @@ setopt_gdbm_setmmap (GDBM_FILE dbf, void *optval, int optlen)
if ((n = getbool (optval, optlen)) == -1)
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
__fsync (dbf);
@@ -213,7 +213,7 @@ setopt_gdbm_getmmap (GDBM_FILE dbf, void *optval, int optlen)
{
if (!optval || optlen != sizeof (int))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
*(int*) optval = dbf->memory_mapping;
@@ -229,7 +229,7 @@ setopt_gdbm_setmaxmapsize (GDBM_FILE dbf, void *optval, int optlen)
if (get_size (optval, optlen, &sz))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
dbf->mapped_size_max = ((sz + page_size - 1) / page_size) * page_size;
@@ -242,7 +242,7 @@ setopt_gdbm_getmaxmapsize (GDBM_FILE dbf, void *optval, int optlen)
{
if (!optval || optlen != sizeof (size_t))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
*(size_t*) optval = dbf->mapped_size_max;
@@ -254,7 +254,7 @@ setopt_gdbm_getflags (GDBM_FILE dbf, void *optval, int optlen)
{
if (!optval || optlen != sizeof (int))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
else
@@ -277,7 +277,7 @@ setopt_gdbm_getdbname (GDBM_FILE dbf, void *optval, int optlen)
{
if (!optval || optlen != sizeof (char*))
{
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
else
@@ -285,7 +285,7 @@ setopt_gdbm_getdbname (GDBM_FILE dbf, void *optval, int optlen)
char *p = strdup (dbf->name);
if (!p)
{
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, FALSE);
return -1;
}
*(char**) optval = p;
@@ -302,7 +302,7 @@ setopt_gdbm_getblocksize (GDBM_FILE dbf, void *optval, int optlen)
return 0;
}
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
@@ -339,6 +339,6 @@ gdbm_setopt (GDBM_FILE dbf, int optflag, void *optval, int optlen)
&& optflag < sizeof (setopt_handler_tab) / sizeof (setopt_handler_tab[0]))
return setopt_handler_tab[optflag] (dbf, optval, optlen);
- gdbm_set_errno (dbf, GDBM_OPT_ILLEGAL, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
diff --git a/src/gdbmstore.c b/src/gdbmstore.c
index 050b0a9..4cd7ad1 100644
--- a/src/gdbmstore.c
+++ b/src/gdbmstore.c
@@ -55,9 +55,8 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags)
/* First check to make sure this guy is a writer. */
if (dbf->read_write == GDBM_READER)
{
- GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
- "%s: can't store: not a writer", dbf->name);
- gdbm_set_errno (dbf, GDBM_READER_CANT_STORE, FALSE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_READER_CANT_STORE, FALSE,
+ GDBM_DEBUG_STORE);
return -1;
}
@@ -65,9 +64,8 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags)
NULL dptr returned by a lookup procedure indicates an error. */
if ((key.dptr == NULL) || (content.dptr == NULL))
{
- GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
- "%s: can't store: invalid key or content", dbf->name);
- gdbm_set_errno (dbf, GDBM_ILLEGAL_DATA, FALSE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_ILLEGAL_DATA, FALSE,
+ GDBM_DEBUG_STORE);
return -1;
}
@@ -103,9 +101,8 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags)
}
else
{
- GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
- "%s: cannot replace", dbf->name);
- gdbm_set_errno (dbf, GDBM_CANNOT_REPLACE, FALSE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_CANNOT_REPLACE, FALSE,
+ GDBM_DEBUG_STORE);
return 1;
}
}
@@ -158,7 +155,7 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags)
{
GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
"%s: lseek: %s", dbf->name, strerror (errno));
- gdbm_set_errno (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
+ GDBM_SET_ERRNO2 (dbf, GDBM_FILE_SEEK_ERROR, TRUE, GDBM_DEBUG_STORE);
_gdbm_fatal (dbf, _("lseek error"));
return -1;
}
diff --git a/src/gdbmtool.c b/src/gdbmtool.c
index a1bcfcd..53b4e36 100644
--- a/src/gdbmtool.c
+++ b/src/gdbmtool.c
@@ -1031,7 +1031,7 @@ status_handler (struct handler_param *param)
dsprint (param->fp, DS_CONTENT, dsdef[DS_CONTENT]);
}
-#ifdef GDBM_DEBUG_ENABLE
+#if GDBM_DEBUG_ENABLE
static int
debug_flag_printer (void *data, int flag, char const *tok)
{
@@ -1044,7 +1044,7 @@ debug_flag_printer (void *data, int flag, char const *tok)
void
debug_handler (struct h