aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2016-07-26 10:43:34 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2016-07-26 10:43:34 +0300
commit7fb0d1cbbf7842f2632b7dca0451d6f3918dd7ab (patch)
tree899bdcd5c62eb632de6fb3c660a192c1929446c9
parent465e893bfa0cdfb8f260500599fc3af458047a76 (diff)
downloadgdbm-7fb0d1cbbf7842f2632b7dca0451d6f3918dd7ab.tar.gz
gdbm-7fb0d1cbbf7842f2632b7dca0451d6f3918dd7ab.tar.bz2
Fix remaining uses of gdbm_set_errno function.
Use the GDBM_SET_ERRNO and GDBM_SET_ERRNO2 macros to make sure the error gets reported in debug output. * src/fullio.c (_gdbm_full_read) (_gdbm_full_write): Return -1 and set gdbm_errno on error. * src/bucket.c: Use GDBM_SET_ERRNO(2?) or GDBM_DEBUG where necessary. * src/falloc.c: Likewise. * src/findkey.c: Likewise. * src/gdbmdefs.h: Likewise. * src/gdbmopen.c: Likewise. * src/gdbmstore.c: Likewise. * src/mmap.c: Likewise. * src/recover.c: Likewise. * src/update.c: Likewise.
-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
@@ -111,8 +111,11 @@ _gdbm_get_bucket (GDBM_FILE dbf, int dir_index)
111 _gdbm_full_read (dbf, dbf->bucket, dbf->header->bucket_size)); 111 _gdbm_full_read (dbf, dbf->bucket, dbf->header->bucket_size));
112 if (rc) 112 if (rc)
113 { 113 {
114 _gdbm_fatal (dbf, gdbm_strerror (rc)); 114 GDBM_DEBUG (GDBM_DEBUG_ERR,
115 GDBM_SET_ERRNO (dbf, rc, TRUE); 115 "%s: error reading bucket: %s",
116 dbf->name, gdbm_db_strerror (dbf));
117 dbf->need_recovery = TRUE;
118 _gdbm_fatal (dbf, gdbm_db_strerror (dbf));
116 return -1; 119 return -1;
117 } 120 }
118 } 121 }
@@ -150,10 +153,11 @@ _gdbm_read_bucket_at (GDBM_FILE dbf, off_t off, hash_bucket *bucket,
150 GDBM_SET_ERRNO (dbf, GDBM_FILE_SEEK_ERROR, TRUE); 153 GDBM_SET_ERRNO (dbf, GDBM_FILE_SEEK_ERROR, TRUE);
151 return -1; 154 return -1;
152 } 155 }
153 rc = _gdbm_full_read (dbf, bucket, size); 156 if (_gdbm_full_read (dbf, bucket, size))
154 if (rc)
155 { 157 {
156 GDBM_SET_ERRNO (dbf, rc, TRUE); 158 GDBM_DEBUG (GDBM_DEBUG_ERR,
159 "%s: error reading bucket: %s",
160 dbf->name, gdbm_db_strerror (dbf));
157 return -1; 161 return -1;
158 } 162 }
159 return 0; 163 return 0;
@@ -394,7 +398,9 @@ _gdbm_write_bucket (GDBM_FILE dbf, cache_elem *ca_entry)
394 _gdbm_full_write (dbf, ca_entry->ca_bucket, dbf->header->bucket_size)); 398 _gdbm_full_write (dbf, ca_entry->ca_bucket, dbf->header->bucket_size));
395 if (rc) 399 if (rc)
396 { 400 {
397 GDBM_SET_ERRNO (dbf, rc, TRUE); 401 GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
402 "%s: error writing bucket: %s",
403 dbf->name, gdbm_db_strerror (dbf));
398 _gdbm_fatal (dbf, gdbm_strerror (rc)); 404 _gdbm_fatal (dbf, gdbm_strerror (rc));
399 return -1; 405 return -1;
400 } 406 }
diff --git a/src/falloc.c b/src/falloc.c
index c5ffdc3..516a197 100644
--- a/src/falloc.c
+++ b/src/falloc.c
@@ -202,7 +202,6 @@ pop_avail_block (GDBM_FILE dbf)
202 _gdbm_full_read (dbf, new_blk, new_el.av_size)); 202 _gdbm_full_read (dbf, new_blk, new_el.av_size));
203 if (rc) 203 if (rc)
204 { 204 {
205 GDBM_SET_ERRNO (dbf, rc, TRUE);
206 _gdbm_fatal (dbf, gdbm_strerror (rc)); 205 _gdbm_fatal (dbf, gdbm_strerror (rc));
207 return -1; 206 return -1;
208 } 207 }
@@ -321,7 +320,9 @@ push_avail_block (GDBM_FILE dbf)
321 _gdbm_full_write (dbf, temp, av_size)); 320 _gdbm_full_write (dbf, temp, av_size));
322 if (rc) 321 if (rc)
323 { 322 {
324 GDBM_SET_ERRNO (dbf, rc, TRUE); 323 GDBM_DEBUG (GDBM_DEBUG_STORE|GDBM_DEBUG_ERR,
324 "%s: error writing avail data: %s",
325 dbf->name, gdbm_db_strerror (dbf));
325 _gdbm_fatal (dbf, gdbm_strerror (rc)); 326 _gdbm_fatal (dbf, gdbm_strerror (rc));
326 return -1; 327 return -1;
327 } 328 }
diff --git a/src/findkey.c b/src/findkey.c
index 135856b..b2e0e8c 100644
--- a/src/findkey.c
+++ b/src/findkey.c
@@ -79,7 +79,10 @@ _gdbm_read_entry (GDBM_FILE dbf, int elem_loc)
79 _gdbm_full_read (dbf, data_ca->dptr, key_size+data_size)); 79 _gdbm_full_read (dbf, data_ca->dptr, key_size+data_size));
80 if (rc) 80 if (rc)
81 { 81 {
82 GDBM_SET_ERRNO2 (dbf, rc, TRUE, GDBM_DEBUG_LOOKUP); 82 GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_LOOKUP|GDBM_DEBUG_READ,
83 "%s: error reading entry: %s",
84 dbf->name, gdbm_db_strerror (dbf));
85 dbf->need_recovery = TRUE;
83 _gdbm_fatal (dbf, gdbm_strerror (rc)); 86 _gdbm_fatal (dbf, gdbm_strerror (rc));
84 return NULL; 87 return NULL;
85 } 88 }
diff --git a/src/fullio.c b/src/fullio.c
index adfff2c..0b65187 100644
--- a/src/fullio.c
+++ b/src/fullio.c
@@ -18,9 +18,9 @@
18#include "gdbmdefs.h" 18#include "gdbmdefs.h"
19 19
20/* Read exactly SIZE bytes of data into BUFFER. Return value is 0 on 20/* Read exactly SIZE bytes of data into BUFFER. Return value is 0 on
21 success, GDBM_FILE_EOF, if not enough data is available, and 21 success, and -1 on error. In the latter case, gdbm_errno is set to
22 GDBM_FILE_READ_ERROR, if a read error occurs. In the latter case 22 GDBM_FILE_EOF, if not enough data is available, and to
23 errno keeps actual system error code. */ 23 GDBM_FILE_READ_ERROR, if a read error occurs. */
24int 24int
25_gdbm_full_read (GDBM_FILE dbf, void *buffer, size_t size) 25_gdbm_full_read (GDBM_FILE dbf, void *buffer, size_t size)
26{ 26{
@@ -32,10 +32,14 @@ _gdbm_full_read (GDBM_FILE dbf, void *buffer, size_t size)
32 { 32 {
33 if (errno == EINTR) 33 if (errno == EINTR)
34 continue; 34 continue;
35 return GDBM_FILE_READ_ERROR; 35 GDBM_SET_ERRNO (dbf, GDBM_FILE_READ_ERROR, FALSE);
36 return -1;
36 } 37 }
37 if (rdbytes == 0) 38 if (rdbytes == 0)
38 return GDBM_FILE_EOF; 39 {
40 GDBM_SET_ERRNO (dbf, GDBM_FILE_EOF, FALSE);
41 return -1;
42 }
39 ptr += rdbytes; 43 ptr += rdbytes;
40 size -= rdbytes; 44 size -= rdbytes;
41 } 45 }
@@ -43,8 +47,7 @@ _gdbm_full_read (GDBM_FILE dbf, void *buffer, size_t size)
43} 47}
44 48
45/* Write exactly SIZE bytes of data from BUFFER tp DBF. Return 0 on 49/* Write exactly SIZE bytes of data from BUFFER tp DBF. Return 0 on
46 success, and GDBM_FILE_READ_ERROR on error. In the latter case errno 50 success, and -1 (setting gdbm_errno to GDBM_FILE_READ_ERROR) on error. */
47 will keep actual system error code. */
48int 51int
49_gdbm_full_write (GDBM_FILE dbf, void *buffer, size_t size) 52_gdbm_full_write (GDBM_FILE dbf, void *buffer, size_t size)
50{ 53{
@@ -56,12 +59,14 @@ _gdbm_full_write (GDBM_FILE dbf, void *buffer, size_t size)
56 { 59 {
57 if (errno == EINTR) 60 if (errno == EINTR)
58 continue; 61 continue;
59 return GDBM_FILE_WRITE_ERROR; 62 GDBM_SET_ERRNO (dbf, GDBM_FILE_WRITE_ERROR, TRUE);
63 return -1;
60 } 64 }
61 if (wrbytes == 0) 65 if (wrbytes == 0)
62 { 66 {
63 errno = ENOSPC; 67 errno = ENOSPC;
64 return GDBM_FILE_WRITE_ERROR; 68 GDBM_SET_ERRNO (dbf, GDBM_FILE_WRITE_ERROR, TRUE);
69 return -1;
65 } 70 }
66 ptr += wrbytes; 71 ptr += wrbytes;
67 size -= wrbytes; 72 size -= wrbytes;
diff --git a/src/gdbmdefs.h b/src/gdbmdefs.h
index e1c143d..286f3fc 100644
--- a/src/gdbmdefs.h
+++ b/src/gdbmdefs.h
@@ -245,7 +245,7 @@ struct gdbm_file_info
245 { \ 245 { \
246 if (dbf->need_recovery) \ 246 if (dbf->need_recovery) \
247 { \ 247 { \
248 gdbm_set_errno (dbf, GDBM_NEED_RECOVERY, TRUE); \ 248 GDBM_SET_ERRNO (dbf, GDBM_NEED_RECOVERY, TRUE); \
249 return onerr; \ 249 return onerr; \
250 } \ 250 } \
251 } \ 251 } \
diff --git a/src/gdbmopen.c b/src/gdbmopen.c
index 101d497..e444bc1 100644
--- a/src/gdbmopen.c
+++ b/src/gdbmopen.c
@@ -57,7 +57,6 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
57 struct stat file_stat; /* Space for the stat information. */ 57 struct stat file_stat; /* Space for the stat information. */
58 off_t file_pos; /* Used with seeks. */ 58 off_t file_pos; /* Used with seeks. */
59 int index; /* Used as a loop index. */ 59 int index; /* Used as a loop index. */
60 int rc; /* temporary error code */
61 60
62 /* Initialize the gdbm_errno variable. */ 61 /* Initialize the gdbm_errno variable. */
63 gdbm_set_errno (NULL, GDBM_NO_ERROR, FALSE); 62 gdbm_set_errno (NULL, GDBM_NO_ERROR, FALSE);
@@ -270,35 +269,38 @@ gdbm_fd_open (int fd, const char *file_name, int block_size,
270 269
271 /* Write initial configuration to the file. */ 270 /* Write initial configuration to the file. */
272 /* Block 0 is the file header and active avail block. */ 271 /* Block 0 is the file header and active avail block. */
273 rc = _gdbm_full_write (dbf, dbf->header, dbf->header->block_size); 272 if (_gdbm_full_write (dbf, dbf->header, dbf->header->block_size))
274 if (rc)
275 { 273 {
274 GDBM_DEBUG (GDBM_DEBUG_OPEN|GDBM_DEBUG_ERR,
275 "%s: error writing header: %s",
276 dbf->name, gdbm_db_strerror (dbf));
276 if (!(flags & GDBM_CLOERROR)) 277 if (!(flags & GDBM_CLOERROR))
277 dbf->desc = -1; 278 dbf->desc = -1;
278 SAVE_ERRNO (gdbm_close (dbf)); 279 SAVE_ERRNO (gdbm_close (dbf));
279 gdbm_set_errno (NULL, rc, FALSE);
280 return NULL; 280 return NULL;
281 } 281 }
282 282
283 /* Block 1 is the initial bucket directory. */ 283 /* Block 1 is the initial bucket directory. */
284 rc = _gdbm_full_write (dbf, dbf->dir, dbf->header->dir_size); 284 if (_gdbm_full_write (dbf, dbf->dir, dbf->header->dir_size))
285 if (rc)
286 { 285 {
286 GDBM_DEBUG (GDBM_DEBUG_OPEN|GDBM_DEBUG_ERR,
287 "%s: error writing directory: %s",
288 dbf->name, gdbm_db_strerror (dbf));
287 if (!(flags & GDBM_CLOERROR)) 289 if (!(flags & GDBM_CLOERROR))
288 dbf->desc = -1; 290 dbf->desc = -1;
289 SAVE_ERRNO (gdbm_close (dbf));