2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-01 15:05:23 +00:00

made journal_pos_t.offset be an isc_offset_t, resolving some

"comparison between signed and unsigned" warnings and allowing for 64 bit
offsets on machines that support it (though there is an issue, there
with journal_rawpos_t being only 4 bytes.)
This commit is contained in:
David Lawrence
2000-05-25 03:41:12 +00:00
parent 6deb631b20
commit e13efecaa5

View File

@@ -386,11 +386,15 @@ dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver)
t = ISC_LIST_NEXT(t, link); t = ISC_LIST_NEXT(t, link);
} }
/* Convert the rdatalist into a rdataset. */ /*
* Convert the rdatalist into a rdataset.
*/
dns_rdataset_init(&rds); dns_rdataset_init(&rds);
CHECK(dns_rdatalist_tordataset(&rdl, &rds)); CHECK(dns_rdatalist_tordataset(&rdl, &rds));
/* Merge the rdataset into the database. */ /*
* Merge the rdataset into the database.
*/
if (op == DNS_DIFFOP_ADD) { if (op == DNS_DIFFOP_ADD) {
result = dns_db_addrdataset(db, node, ver, result = dns_db_addrdataset(db, node, ver,
0, &rds, 0, &rds,
@@ -417,7 +421,9 @@ dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver)
"update with no effect"); "update with no effect");
} else if (result == ISC_R_SUCCESS || } else if (result == ISC_R_SUCCESS ||
result == DNS_R_NXRRSET) { result == DNS_R_NXRRSET) {
/* OK */ /*
* OK.
*/
} else { } else {
CHECK(result); CHECK(result);
} }
@@ -473,7 +479,9 @@ dns_diff_load(dns_diff_t *diff, dns_addrdatasetfunc_t addfunc,
t = ISC_LIST_NEXT(t, link); t = ISC_LIST_NEXT(t, link);
} }
/* Convert the rdatalist into a rdataset. */ /*
* Convert the rdatalist into a rdataset.
*/
dns_rdataset_init(&rds); dns_rdataset_init(&rds);
CHECK(dns_rdatalist_tordataset(&rdl, &rds)); CHECK(dns_rdatalist_tordataset(&rdl, &rds));
rds.trust = dns_trust_ultimate; rds.trust = dns_trust_ultimate;
@@ -486,7 +494,9 @@ dns_diff_load(dns_diff_t *diff, dns_addrdatasetfunc_t addfunc,
"update with no effect"); "update with no effect");
} else if (result == ISC_R_SUCCESS || } else if (result == ISC_R_SUCCESS ||
result == DNS_R_NXRRSET) { result == DNS_R_NXRRSET) {
/* OK */ /*
* OK.
*/
} else { } else {
CHECK(result); CHECK(result);
} }
@@ -685,6 +695,7 @@ typedef struct {
unsigned char serial[4]; /* SOA serial before update. */ unsigned char serial[4]; /* SOA serial before update. */
/* /*
* XXXRTH Should offset be 8 bytes? * XXXRTH Should offset be 8 bytes?
* XXXDCL ... probably, since isc_offset_t is 8 bytes on many OSs.
*/ */
unsigned char offset[4]; /* Offset from beginning of file. */ unsigned char offset[4]; /* Offset from beginning of file. */
} journal_rawpos_t; } journal_rawpos_t;
@@ -733,14 +744,12 @@ typedef struct {
unsigned char size[4]; /* In bytes, excluding header. */ unsigned char size[4]; /* In bytes, excluding header. */
} journal_rawrrhdr_t; } journal_rawrrhdr_t;
/* The in-core representation of the journal header. */ /*
* The in-core representation of the journal header.
*/
typedef struct { typedef struct {
isc_uint32_t serial; isc_uint32_t serial;
/* isc_offset_t offset;
* XXXRTH Should offset be 8 bytes?
*/
isc_uint32_t offset;
} journal_pos_t; } journal_pos_t;
#define POS_VALID(pos) ((pos).offset != 0) #define POS_VALID(pos) ((pos).offset != 0)
@@ -753,7 +762,9 @@ typedef struct {
isc_uint32_t index_size; isc_uint32_t index_size;
} journal_header_t; } journal_header_t;
/* The in-core representation of the transaction header. */ /*
* The in-core representation of the transaction header.
*/
typedef struct { typedef struct {
isc_uint32_t size; isc_uint32_t size;
@@ -761,8 +772,9 @@ typedef struct {
isc_uint32_t serial1; isc_uint32_t serial1;
} journal_xhdr_t; } journal_xhdr_t;
/* The in-core representation of the RR header. */ /*
* The in-core representation of the RR header.
*/
typedef struct { typedef struct {
isc_uint32_t size; isc_uint32_t size;
} journal_rrhdr_t; } journal_rrhdr_t;
@@ -861,8 +873,9 @@ journal_header_encode(journal_header_t *cooked, journal_rawheader_t *raw) {
encode_uint32(cooked->index_size, raw->h.index_size); encode_uint32(cooked->index_size, raw->h.index_size);
} }
/* Journal file I/O subroutines, with error checking and reporting. */ /*
* Journal file I/O subroutines, with error checking and reporting.
*/
static isc_result_t static isc_result_t
journal_seek(dns_journal_t *j, isc_uint32_t offset) { journal_seek(dns_journal_t *j, isc_uint32_t offset) {
isc_result_t result; isc_result_t result;
@@ -1246,10 +1259,11 @@ journal_next(dns_journal_t *j, journal_pos_t *pos) {
/* /*
* Check for offset wraparound. * Check for offset wraparound.
*/ */
if (pos->offset + xhdr.size < pos->offset) { if (xhdr.size + sizeof(journal_rawxhdr_t) > ISC_OFFSET_MAXIMUM ||
(off_t)(ISC_OFFSET_MAXIMUM - xhdr.size - sizeof(journal_rawxhdr_t))
< pos->offset) {
isc_log_write(JOURNAL_COMMON_LOGARGS, ISC_LOG_ERROR, isc_log_write(JOURNAL_COMMON_LOGARGS, ISC_LOG_ERROR,
"%s: offset too large", "%s: offset too large", j->filename);
j->filename);
return (ISC_R_UNEXPECTED); return (ISC_R_UNEXPECTED);
} }
@@ -2022,11 +2036,6 @@ read_one_rr(dns_journal_t *j) {
journal_xhdr_t xhdr; journal_xhdr_t xhdr;
journal_rrhdr_t rrhdr; journal_rrhdr_t rrhdr;
/*
* XXXRTH Need to resolve the comparison between int and unsigned
* int here, but we can defer this until we decide what type
* we want j->offset to be.
*/
INSIST(j->offset <= j->it.epos.offset); INSIST(j->offset <= j->it.epos.offset);
if (j->offset == j->it.epos.offset) if (j->offset == j->it.epos.offset)
return (ISC_R_NOMORE); return (ISC_R_NOMORE);
@@ -2267,7 +2276,9 @@ dns_diff_subtract(dns_diff_t diff[2], dns_diff_t *r) {
goto next; goto next;
} }
INSIST(t == 0); INSIST(t == 0);
/* Identical RRs in both databases; skip them both. */ /*
* Identical RRs in both databases; skip them both.
*/
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
ISC_LIST_UNLINK(diff[i].tuples, p[i], link); ISC_LIST_UNLINK(diff[i].tuples, p[i], link);
dns_difftuple_free(&p[i]); dns_difftuple_free(&p[i]);