diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-26 10:43:34 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-26 10:43:34 +0300 |
commit | 7fb0d1cbbf7842f2632b7dca0451d6f3918dd7ab (patch) | |
tree | 899bdcd5c62eb632de6fb3c660a192c1929446c9 /src | |
parent | 465e893bfa0cdfb8f260500599fc3af458047a76 (diff) | |
download | gdbm-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.
Diffstat (limited to 'src')
-rw-r--r-- | src/bucket.c | 18 | ||||
-rw-r--r-- | src/falloc.c | 5 | ||||
-rw-r--r-- | src/findkey.c | 5 | ||||
-rw-r--r-- | src/fullio.c | 23 | ||||
-rw-r--r-- | src/gdbmdefs.h | 2 | ||||
-rw-r--r-- | src/gdbmopen.c | 48 | ||||
-rw-r--r-- | src/gdbmstore.c | 9 | ||||
-rw-r--r-- | src/mmap.c | 6 | ||||
-rw-r--r-- | src/recover.c | 20 | ||||
-rw-r--r-- | src/update.c | 13 |
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. */ |
24 | int | 24 | int |
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. */ | ||
48 | int | 51 | int |
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 |