*/
dns_dbnode_t *node;
- /*%
- * Case vector. If the bit is set then the corresponding
- * character in the owner name needs to be AND'd with 0x20,
- * rendering that character upper case.
- */
- unsigned char upper[32];
-
/* Used for stale refresh */
_Atomic(isc_stdtime_t) last_refresh_fail_ts;
rdataset_expire(dns_rdataset_t *rdataset DNS__DB_FLARG);
static void
rdataset_clearprefetch(dns_rdataset_t *rdataset);
-static void
-rdataset_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name);
static dns_slabheader_t *
rdataset_getheader(const dns_rdataset_t *rdataset);
.settrust = rdataset_settrust,
.expire = rdataset_expire,
.clearprefetch = rdataset_clearprefetch,
- .getownercase = rdataset_getownercase,
};
static void
DNS_SLABHEADER_CLRATTR(header, DNS_SLABHEADERATTR_PREFETCH);
}
-static void
-rdataset_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) {
- dns_slabheader_t *header = rdataset_getheader(rdataset);
- uint8_t mask = (1 << 7);
- uint8_t bits = 0;
-
- if (!CASESET(header)) {
- return;
- }
-
- if (CASEFULLYLOWER(header)) {
- isc_ascii_lowercopy(name->ndata, name->ndata, name->length);
- return;
- }
-
- uint8_t *nd = name->ndata;
- for (size_t i = 0; i < name->length; i++) {
- if (mask == (1 << 7)) {
- bits = header->upper[i / 8];
- mask = 1;
- } else {
- mask <<= 1;
- }
- nd[i] = (bits & mask) ? isc_ascii_toupper(nd[i])
- : isc_ascii_tolower(nd[i]);
- }
-}
-
static dns_slabheader_t *
rdataset_getheader(const dns_rdataset_t *rdataset) {
uint8_t *rawbuf = rdataset->slab.raw;