aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bucket.c18
-rw-r--r--src/falloc.c5
-rw-r--r--src/findkey.c5
-rw-r--r--src/fullio.c23
-rw-r--r--src/gdbmdefs.h2
-rw-r--r--src/gdbmopen.c48
-rw-r--r--src/gdbmstore.c9
-rw-r--r--src/mmap.c6
-rw-r--r--src/recover.c20
-rw-r--r--src/update.c13
10 files changed, 79 insertions, 70 deletions
diff --git a/src/bucket.c b/src/bucket.c
index 912a7b4..9f423f4 100644
--- a/src/bucket.c
+++ b/src/bucket.c
@@ -108,14 +108,17 @@ _gdbm_get_bucket (GDBM_FILE dbf, int dir_index)
}
rc = GDBM_DEBUG_OVERRIDE ("_gdbm_get_bucket:read-failure",
_gdbm_full_read (dbf, dbf->bucket, dbf->header->bucket_size));
if (rc)
{
- _gdbm_fatal (dbf, gdbm_strerror (rc));
- GDBM_SET_ERRNO (dbf, rc, TRUE);
+ GDBM_DEBUG (GDBM_DEBUG_ERR,
+ "%s: error reading bucket: %s",
+ dbf->name, gdbm_db_strerror (dbf));
+ dbf->need_recovery = TRUE;
+ _gdbm_fatal (dbf, gdbm_db_strerror (dbf));
return -1;
}
}
return 0;
}
@@ -147,16 +150,17 @@ _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);
return -1;
}
- rc = _gdbm_full_read (dbf, bucket, size);
- if (rc)
+ if (_gdbm_full_read (dbf, bucket, size))
{
- GDBM_SET_ERRNO (dbf, rc, TRUE);
+ GDBM_DEBUG (GDBM_DEBUG_ERR,
+ "%s: error reading bucket: %s",
+ dbf->name, gdbm_db_strerror (dbf));
return -1;
}
return 0;
}
/* Split the current bucket. This includes moving all items in the bucket to
@@ -391,13 +395,15 @@ _gdbm_write_bucket (GDBM_FILE dbf, cache_elem *ca_entry)
return -1;
}
rc = GDBM_DEBUG_OVERRIDE ("_gdbm_write_bucket:write-failure",
_gdbm_full_write (dbf, ca_entry->ca_bucket, dbf->header->bucket_size));
if (rc)
{
- GDBM_SET_ERRNO (dbf, rc, TRUE);
+ GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
+ "%s: error writing bucket: %s",
+ dbf->name, gdbm_db_strerror (dbf));
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
ca_entry->ca_changed = FALSE;
ca_entry->ca_data.hash_val = -1;
diff --git a/src/falloc.c b/src/falloc.c
index c5ffdc3..516a197 100644
--- a/src/falloc.c
+++ b/src/falloc.c
@@ -199,13 +199,12 @@ pop_avail_block (GDBM_FILE dbf)
}
rc = GDBM_DEBUG_OVERRIDE ("pop_avail_block:read-failure",
_gdbm_full_read (dbf, new_blk, new_el.av_size));
if (rc)
{
- GDBM_SET_ERRNO (dbf, rc, TRUE);
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
/* Add the elements from the new block to the header. */
index = 0;
@@ -318,13 +317,15 @@ push_avail_block (GDBM_FILE dbf)
}
rc = GDBM_DEBUG_OVERRIDE ("push_avail_block:write-failure",
_gdbm_full_write (dbf, temp, av_size));
if (rc)
{
- GDBM_SET_ERRNO (dbf, rc, TRUE);
+ GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
+ "%s: error writing avail data: %s",
+ dbf->name, gdbm_db_strerror (dbf));
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
free (temp);
diff --git a/src/findkey.c b/src/findkey.c
index 135856b..b2e0e8c 100644
--- a/src/findkey.c
+++ b/src/findkey.c
@@ -76,13 +76,16 @@ _gdbm_read_entry (GDBM_FILE dbf, int elem_loc)
}
rc = GDBM_DEBUG_OVERRIDE ("_gdbm_read_entry:read-failure",
_gdbm_full_read (dbf, data_ca->dptr, key_size+data_size));
if (rc)
{
- GDBM_SET_ERRNO2 (dbf, rc, TRUE, GDBM_DEBUG_LOOKUP);
+ GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_LOOKUP|GDBM_DEBUG_READ,
+ "%s: error reading entry: %s",
+ dbf->name, gdbm_db_strerror (dbf));
+ dbf->need_recovery = TRUE;
_gdbm_fatal (dbf, gdbm_strerror (rc));
return NULL;
}
return data_ca->dptr;
}
diff --git a/src/fullio.c b/src/fullio.c
index adfff2c..0b65187 100644
--- a/src/fullio.c
+++ b/src/fullio.c
@@ -15,56 +15,61 @@
along with GDBM. If not, see <http://www.gnu.org/licenses/>. */
#include "autoconf.h"
#include "gdbmdefs.h"
/* Read exactly SIZE bytes of data into BUFFER. Return value is 0 on
- success, GDBM_FILE_EOF, if not enough data is available, and
- GDBM_FILE_READ_ERROR, if a read error occurs. In the latter case
- errno keeps actual system error code. */
+ success, and -1 on error. In the latter case, gdbm_errno is set to
+ GDBM_FILE_EOF, if not enough data is available, and to
+ GDBM_FILE_READ_ERROR, if a read error occurs. */
int
_gdbm_full_read (GDBM_FILE dbf, void *buffer, size_t size)
{
char *ptr = buffer;
while (size)
{
ssize_t rdbytes = __read (dbf, ptr, size);
if (rdbytes == -1)
{
if (errno == EINTR)
continue;
- return GDBM_FILE_READ_ERROR;
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_READ_ERROR, FALSE);
+ return -1;
}
if (rdbytes == 0)
- return GDBM_FILE_EOF;
+ {
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_EOF, FALSE);
+ return -1;
+ }
ptr += rdbytes;
size -= rdbytes;
}
return 0;
}
/* Write exactly SIZE bytes of data from BUFFER tp DBF. Return 0 on
- success, and GDBM_FILE_READ_ERROR on error. In the latter case errno
- will keep actual system error code. */
+ success, and -1 (setting gdbm_errno to GDBM_FILE_READ_ERROR) on error. */
int
_gdbm_full_write (GDBM_FILE dbf, void *buffer, size_t size)
{
char *ptr = buffer;
while (size)
{
ssize_t wrbytes = __write (dbf, ptr, size);
if (wrbytes == -1)
{
if (errno == EINTR)
continue;
- return GDBM_FILE_WRITE_ERROR;
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_WRITE_ERROR, TRUE);
+ return -1;
}
if (wrbytes == 0)
{
errno = ENOSPC;
- return GDBM_FILE_WRITE_ERROR;
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_WRITE_ERROR, TRUE);
+ return -1;
}
ptr += wrbytes;
size -= wrbytes;
}
return 0;
}
diff --git a/src/gdbmdefs.h b/src/gdbmdefs.h
index e1c143d..286f3fc 100644
--- a/src/gdbmdefs.h
+++ b/src/gdbmdefs.h
@@ -242,13 +242,13 @@ struct gdbm_file_info
/* Return immediately if the database needs recovery */
#define GDBM_ASSERT_CONSISTENCY(dbf, onerr) \
do \
{ \
if (dbf->need_recovery) \
{ \
- gdbm_set_errno (dbf, GDBM_NEED_RECOVERY, TRUE); \
+ GDBM_SET_ERRNO (dbf, GDBM_NEED_RECOVERY, TRUE); \
return onerr; \
} \
} \
while (0)
/* Debugging hooks */
diff --git a/src/gdbmopen.c b/src/gdbmopen.c
index 101d497..e444bc1 100644
--- a/src/gdbmopen.c
+++ b/src/gdbmopen.c
@@ -54,13 +54,12 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
int flags, void (*fatal_func) (const char *))
{
GDBM_FILE dbf; /* The record to return. */
struct stat file_stat; /* Space for the stat information. */
off_t file_pos; /* Used with seeks. */
int index; /* Used as a loop index. */
- int rc; /* temporary error code */
/* Initialize the gdbm_errno variable. */
gdbm_set_errno (NULL, GDBM_NO_ERROR, FALSE);
/* Get the status of the file. */
if (fstat (fd, &file_stat))
@@ -267,41 +266,44 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
dbf->header->avail.count = 0;
dbf->header->avail.next_block = 0;
dbf->header->next_block = 4*dbf->header->block_size;
/* Write initial configuration to the file. */
/* Block 0 is the file header and active avail block. */
- rc = _gdbm_full_write (dbf, dbf->header, dbf->header->block_size);
- if (rc)
+ if (_gdbm_full_write (dbf, dbf->header, dbf->header->block_size))
{
+ GDBM_DEBUG (GDBM_DEBUG_OPEN|GDBM_DEBUG_ERR,
+ "%s: error writing header: %s",
+ dbf->name, gdbm_db_strerror (dbf));
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_set_errno (NULL, rc, FALSE);
return NULL;
}
/* Block 1 is the initial bucket directory. */
- rc = _gdbm_full_write (dbf, dbf->dir, dbf->header->dir_size);
- if (rc)
+ if (_gdbm_full_write (dbf, dbf->dir, dbf->header->dir_size))
{
+ GDBM_DEBUG (GDBM_DEBUG_OPEN|GDBM_DEBUG_ERR,
+ "%s: error writing directory: %s",
+ dbf->name, gdbm_db_strerror (dbf));
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_set_errno (NULL, rc, FALSE);
return NULL;
}
/* Block 2 is the only bucket. */
- rc = _gdbm_full_write (dbf, dbf->bucket, dbf->header->bucket_size);
- if (rc)
+ if (_gdbm_full_write (dbf, dbf->bucket, dbf->header->bucket_size))
{
+ GDBM_DEBUG (GDBM_DEBUG_OPEN|GDBM_DEBUG_ERR,
+ "%s: error writing bucket: %s",
+ dbf->name, gdbm_db_strerror (dbf));
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_set_errno (NULL, rc, FALSE);
return NULL;
}
/* Wait for initial configuration to be written to disk. */
__fsync (dbf);
@@ -312,33 +314,27 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
/* This is an old database. Read in the information from the file
header and initialize the hash directory. */
gdbm_file_header partial_header; /* For the first part of it. */
/* Read the partial file header. */
- rc = _gdbm_full_read (dbf, &partial_header, sizeof (gdbm_file_header));
- if (rc)
+ if (_gdbm_full_read (dbf, &partial_header, sizeof (gdbm_file_header)))
{
GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_OPEN,
"%s: error reading partial header: %s",
- dbf->name, strerror (errno));
+ dbf->name, gdbm_db_strerror (dbf));
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_set_errno (NULL, rc, FALSE);
return NULL;
}
/* Is the magic number good? */
if (partial_header.header_magic != GDBM_MAGIC
&& partial_header.header_magic != GDBM_OMAGIC)
{
- GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_OPEN,
- "%s: unexpected magic: %#4x",
- dbf->name, partial_header.header_magic);
-
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
gdbm_close (dbf);
switch (partial_header.header_magic)
{
case GDBM_OMAGIC_SWAP:
@@ -367,23 +363,21 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
dbf->desc = -1;
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));
- rc = _gdbm_full_read (dbf, &dbf->header->avail.av_table[1],
- dbf->header->block_size - sizeof (gdbm_file_header));
- if (rc)
+ if (_gdbm_full_read (dbf, &dbf->header->avail.av_table[1],
+ dbf->header->block_size - sizeof (gdbm_file_header)))
{
GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_OPEN,
- "%s: error reading av_table",
- dbf->name);
+ "%s: error reading av_table: %s",
+ dbf->name, gdbm_db_strerror (dbf));
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_set_errno (NULL, rc, FALSE);
return NULL;
}
/* Allocate space for the hash table directory. */
dbf->dir = (off_t *) malloc (dbf->header->dir_size);
if (dbf->dir == NULL)
@@ -403,22 +397,20 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
dbf->desc = -1;
SAVE_ERRNO (gdbm_close (dbf));
GDBM_SET_ERRNO2 (NULL, GDBM_FILE_SEEK_ERROR, FALSE, GDBM_DEBUG_OPEN);
return NULL;
}
- rc = _gdbm_full_read (dbf, dbf->dir, dbf->header->dir_size);
- if (rc)
+ if (_gdbm_full_read (dbf, dbf->dir, dbf->header->dir_size))
{
GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_OPEN,
"%s: error reading dir: %s",
- dbf->name, strerror (errno));
+ dbf->name, gdbm_db_strerror (dbf));
if (!(flags & GDBM_CLOERROR))
dbf->desc = -1;
SAVE_ERRNO (gdbm_close (dbf));
- gdbm_set_errno (NULL, rc, FALSE);
return NULL;
}
}
#if HAVE_MMAP
diff --git a/src/gdbmstore.c b/src/gdbmstore.c
index 4cd7ad1..404687c 100644
--- a/src/gdbmstore.c
+++ b/src/gdbmstore.c
@@ -162,27 +162,26 @@ gdbm_store (GDBM_FILE dbf, datum key, datum content, int flags)
rc = GDBM_DEBUG_OVERRIDE ("gdbm_store:write-1-failure",
_gdbm_full_write (dbf, key.dptr, key.dsize));
if (rc)
{
GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
- "%s: writing key: %s", dbf->name, strerror (errno));
- gdbm_set_errno (dbf, rc, TRUE);
+ "%s: error writing key: %s",
+ dbf->name, gdbm_db_strerror (dbf));
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
rc = GDBM_DEBUG_OVERRIDE ("gdbm_store:write-2-failure",
_gdbm_full_write (dbf,
content.dptr, content.dsize));
if (rc)
{
GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
- "%s: writing content: %s",
- dbf->name, strerror (errno));
- gdbm_set_errno (dbf, rc, TRUE);
+ "%s: error writing content: %s",
+ dbf->name, gdbm_db_strerror (dbf));
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
/* Current bucket has changed. */
dbf->cache_entry->ca_changed = TRUE;
diff --git a/src/mmap.c b/src/mmap.c
index d5fe5c0..7ec5fe3 100644
--- a/src/mmap.c
+++ b/src/mmap.c
@@ -96,13 +96,13 @@ _gdbm_internal_remap (GDBM_FILE dbf, size_t size)
p = mmap (NULL, dbf->mapped_size, flags, MAP_SHARED,
dbf->desc, dbf->mapped_off);
if (p == MAP_FAILED)
{
dbf->mapped_region = NULL;
- gdbm_set_errno (dbf, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, FALSE);
return -1;
}
dbf->mapped_region = p;
return 0;
}
@@ -132,13 +132,13 @@ _gdbm_mapped_remap (GDBM_FILE dbf, off_t size, int flag)
{
off_t file_size, pos;
if (_gdbm_file_size (dbf, &file_size))
{
SAVE_ERRNO (_gdbm_mapped_unmap (dbf));
- gdbm_set_errno (dbf, GDBM_FILE_STAT_ERROR, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_STAT_ERROR, FALSE);
return -1;
}
if (flag == _REMAP_END && size < file_size)
size = file_size;
@@ -327,13 +327,13 @@ _gdbm_mapped_lseek (GDBM_FILE dbf, off_t offset, int whence)
case SEEK_END:
{
off_t file_size;
if (_gdbm_file_size (dbf, &file_size))
{
- gdbm_set_errno (dbf, GDBM_FILE_STAT_ERROR, FALSE);
+ GDBM_SET_ERRNO (dbf, GDBM_FILE_STAT_ERROR, FALSE);
return -1;
}
needle = file_size - offset;
break;
}
}
diff --git a/src/recover.c b/src/recover.c
index 69644f9..ecf47c5 100644
--- a/src/recover.c
+++ b/src/recover.c
@@ -23,23 +23,23 @@ int
gdbm_copy_meta (GDBM_FILE dst, GDBM_FILE src)
{
struct stat st;
if (fstat (src->desc, &st))
{
- gdbm_set_errno (src, GDBM_FILE_STAT_ERROR, src->need_recovery);
+ GDBM_SET_ERRNO (src, GDBM_FILE_STAT_ERROR, src->need_recovery);
return -1;
}
if (fchown (dst->desc, st.st_uid, st.st_gid))
{
- gdbm_set_errno (dst, GDBM_ERR_FILE_OWNER, dst->need_recovery);
+ GDBM_SET_ERRNO (dst, GDBM_ERR_FILE_OWNER, dst->need_recovery);
return -1;
}
if (fchmod (dst->desc, st.st_mode & 0777))
{
- gdbm_set_errno (dst, GDBM_ERR_FILE_MODE, dst->need_recovery);
+ GDBM_SET_ERRNO (dst, GDBM_ERR_FILE_MODE, dst->need_recovery);
return -1;
}
return 0;
}
static char *
@@ -114,29 +114,29 @@ _gdbm_finish_transfer (GDBM_FILE dbf, GDBM_FILE new_dbf,
if (flags & GDBM_RCVR_BACKUP)
{
char *bkname = backup_name (dbf->name);
if (!bkname)
{
SAVE_ERRNO (gdbm_close (new_dbf));
- gdbm_set_errno (NULL, GDBM_BACKUP_FAILED, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_BACKUP_FAILED, FALSE);
return -1;
}
if (rename (dbf->name, bkname) != 0)
{
SAVE_ERRNO (gdbm_close (new_dbf); free (bkname));
- gdbm_set_errno (NULL, GDBM_BACKUP_FAILED, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_BACKUP_FAILED, FALSE);
return -1;
}
rcvr->backup_name = bkname;
}
/* Move the new file to old name. */
if (rename (new_dbf->name, dbf->name) != 0)
{
- gdbm_set_errno (NULL, GDBM_REORGANIZE_FAILED, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_REORGANIZE_FAILED, FALSE);
gdbm_close (new_dbf);
return -1;
}
/* Fix up DBF to have the correct information for the new file. */
if (dbf->file_locking)
@@ -339,13 +339,13 @@ gdbm_recover (GDBM_FILE dbf, gdbm_recovery *rcvr, int flags)
int rc;
gdbm_recovery rs;
/* Readers can not reorganize! */
if (dbf->read_write == GDBM_READER)
{
- gdbm_set_errno (dbf, GDBM_READER_CANT_REORGANIZE, dbf->need_recovery);
+ GDBM_SET_ERRNO (dbf, GDBM_READER_CANT_REORGANIZE, dbf->need_recovery);
return -1;
}
/* Initialize gdbm_recovery structure */
if (!rcvr)
{
@@ -362,21 +362,21 @@ gdbm_recover (GDBM_FILE dbf, gdbm_recovery *rcvr, int flags)
if ((flags & GDBM_RCVR_FORCE) || check_db (dbf))
{
len = strlen (dbf->name);
new_name = malloc (len + sizeof (TMPSUF));
if (!new_name)
{
- gdbm_set_errno (NULL, GDBM_MALLOC_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_MALLOC_ERROR, FALSE);
return -1;
}
strcat (strcpy (new_name, dbf->name), TMPSUF);
fd = mkstemp (new_name);
if (fd == -1)
{
- gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE);
free (new_name);
return -1;
}
new_dbf = gdbm_fd_open (fd, new_name, dbf->header->block_size,
GDBM_WRCREAT
@@ -384,13 +384,13 @@ gdbm_recover (GDBM_FILE dbf, gdbm_recovery *rcvr, int flags)
| GDBM_CLOERROR, dbf->fatal_err);
SAVE_ERRNO (free (new_name));
if (new_dbf == NULL)
{
- gdbm_set_errno (NULL, GDBM_REORGANIZE_FAILED, FALSE);
+ GDBM_SET_ERRNO (NULL, GDBM_REORGANIZE_FAILED, FALSE);
return -1;
}
rc = run_recovery (dbf, new_dbf, rcvr, flags);
if (rc == 0)
diff --git a/src/update.c b/src/update.c
index 90a6524..eb9f33b 100644
--- a/src/update.c
+++ b/src/update.c
@@ -31,24 +31,25 @@ write_header (GDBM_FILE dbf)
int rc;
file_pos = GDBM_DEBUG_OVERRIDE ("write_header:lseek-failure",
__lseek (dbf, 0L, SEEK_SET));
if (file_pos != 0)
{
- 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;
}
rc = GDBM_DEBUG_OVERRIDE ("write_header:write-failure",
_gdbm_full_write (dbf, dbf->header, dbf->header->block_size));
if (rc)
{
- gdbm_set_errno (dbf, rc, TRUE);
- gdbm_set_errno (dbf, rc, TRUE);
+ GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
+ "%s: error writing header: %s",
+ dbf->name, gdbm_db_strerror (dbf));
return -1;
}
/* Sync the file if fast_write is FALSE. */
if (dbf->fast_write == FALSE)
__fsync (dbf);
@@ -96,22 +97,24 @@ _gdbm_end_update (GDBM_FILE dbf)
if (dbf->directory_changed)
{
file_pos = GDBM_DEBUG_OVERRIDE ("_gdbm_end_update:lseek-failure",
__lseek (dbf, dbf->header->dir, SEEK_SET));
if (file_pos != dbf->header->dir)
{
- 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;
}
rc = GDBM_DEBUG_OVERRIDE ("_gdbm_end_update:write-dir-failure",
_gdbm_full_write (dbf, dbf->dir, dbf->header->dir_size));
if (rc)
{
- gdbm_set_errno (dbf, rc, TRUE);
+ GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
+ "%s: error writing directory: %s",
+ dbf->name, gdbm_db_strerror (dbf));
_gdbm_fatal (dbf, gdbm_strerror (rc));
return -1;
}
dbf->directory_changed = FALSE;
if (!dbf->header_changed && dbf->fast_write == FALSE)

Return to:

Send suggestions and report system problems to the System administrator.