2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-27 12:38:24 +00:00
bind/lib/dns/rdata/generic/proforma.c
Tony Finch 1d807d84f1 Shrink decompression contexts
It's wasteful to use 20 bytes and a pointer indirection to represent
two bits of information, so turn the struct into an enum. And change
the names of the enumeration constants to make the intent more clear.

This change introduces some inline functions into another header,
which confuses `gcovr` when it is trying to collect code coverage
statistics. So, in the CI job, copy more header files into a directory
where `gcovr` looks for them.
2022-06-01 13:00:40 +01:00

166 lines
3.9 KiB
C

/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* SPDX-License-Identifier: MPL-2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef RDATA_GENERIC_ #_ #_C
#define RDATA_GENERIC_ #_ #_C
#define RRTYPE_ #_ATTRIBUTES(0)
static isc_result_t fromtext_ #(ARGS_FROMTEXT) {
isc_token_t token;
REQUIRE(type == dns_rdatatype_proforma.c #);
REQUIRE(rdclass == #);
RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
false));
return (ISC_R_NOTIMPLEMENTED);
}
static isc_result_t totext_ #(ARGS_TOTEXT) {
REQUIRE(rdata->type == dns_rdatatype_proforma.c #);
REQUIRE(rdata->rdclass == #);
REQUIRE(rdata->length != 0); /* XXX */
return (ISC_R_NOTIMPLEMENTED);
}
static isc_result_t fromwire_ #(ARGS_FROMWIRE) {
REQUIRE(type == dns_rdatatype_proforma.c #);
REQUIRE(rdclass == #);
/* see RFC 3597 */
dctx = dns_decompress_setpermitted(dctx, false);
return (ISC_R_NOTIMPLEMENTED);
}
static isc_result_t towire_ #(ARGS_TOWIRE) {
REQUIRE(rdata->type == dns_rdatatype_proforma.c #);
REQUIRE(rdata->rdclass == #);
REQUIRE(rdata->length != 0); /* XXX */
/* see RFC 3597 */
dns_compress_setpermitted(cctx, false);
return (ISC_R_NOTIMPLEMENTED);
}
static int compare_ #(ARGS_COMPARE) {
isc_region_t r1;
isc_region_t r2;
REQUIRE(rdata1->type == dns_rdatatype_proforma.crdata2->type);
REQUIRE(rdata1->rdclass == rdata2->rdclass);
REQUIRE(rdata1->type == dns_rdatatype_proforma.c #);
REQUIRE(rdata1->rdclass == #);
REQUIRE(rdata1->length != 0); /* XXX */
REQUIRE(rdata2->length != 0); /* XXX */
dns_rdata_toregion(rdata1, &r1);
dns_rdata_toregion(rdata2, &r2);
return (isc_region_compare(&r1, &r2));
}
static isc_result_t fromstruct_ #(ARGS_FROMSTRUCT) {
dns_rdata_ #_t *# = source;
REQUIRE(type == dns_rdatatype_proforma.c #);
REQUIRE(rdclass == #);
REQUIRE(# != NULL);
REQUIRE(#->common.rdtype == dns_rdatatype_proforma.ctype);
REQUIRE(#->common.rdclass == rdclass);
return (ISC_R_NOTIMPLEMENTED);
}
static isc_result_t tostruct_ #(ARGS_TOSTRUCT) {
REQUIRE(rdata->type == dns_rdatatype_proforma.c #);
REQUIRE(rdata->rdclass == #);
REQUIRE(rdata->length != 0); /* XXX */
return (ISC_R_NOTIMPLEMENTED);
}
static void freestruct_ #(ARGS_FREESTRUCT) {
dns_rdata_ #_t *# = source;
REQUIRE(# != NULL);
REQUIRE(#->common.rdtype == dns_rdatatype_proforma.c #);
REQUIRE(#->common.rdclass == #);
}
static isc_result_t additionaldata_ #(ARGS_ADDLDATA) {
REQUIRE(rdata->type == dns_rdatatype_proforma.c #);
REQUIRE(rdata->rdclass == #);
UNUSED(owner);
UNUSED(add);
UNUSED(arg);
return (ISC_R_SUCCESS);
}
static isc_result_t digest_ #(ARGS_DIGEST) {
isc_region_t r;
REQUIRE(rdata->type == dns_rdatatype_proforma.c #);
REQUIRE(rdata->rdclass == #);
dns_rdata_toregion(rdata, &r);
return ((digest)(arg, &r));
}
static bool checkowner_ #(ARGS_CHECKOWNER) {
REQUIRE(type == dns_rdatatype_proforma.c #);
REQUIRE(rdclass == #);
UNUSED(name);
UNUSED(type);
UNUSED(rdclass);
UNUSED(wildcard);
return (true);
}
static bool checknames_ #(ARGS_CHECKNAMES) {
REQUIRE(rdata->type == dns_rdatatype_proforma.c #);
REQUIRE(rdata->rdclass == #);
UNUSED(rdata);
UNUSED(owner);
UNUSED(bad);
return (true);
}
static int casecompare_ #(ARGS_COMPARE) {
isc_region_t r1;
isc_region_t r2;
REQUIRE(rdata1->type == dns_rdatatype_proforma.crdata2->type);
REQUIRE(rdata1->rdclass == rdata2->rdclass);
REQUIRE(rdata1->type == dns_rdatatype_proforma.c #);
REQUIRE(rdata1->rdclass == #);
REQUIRE(rdata1->length != 0); /* XXX */
REQUIRE(rdata2->length != 0); /* XXX */
dns_rdata_toregion(rdata1, &r1);
dns_rdata_toregion(rdata2, &r2);
return (isc_region_compare(&r1, &r2));
}
#endif /* RDATA_GENERIC_#_#_C */