From: Evan Hunt Date: Thu, 14 May 2026 01:57:59 +0000 (-0700) Subject: Add "warn_unused_result" to attributes.h X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07c8c1d2421fdb4beb1b7821fe9033ff7d66b46a;p=thirdparty%2Fbind9.git Add "warn_unused_result" to attributes.h A new ISC_ATTR_WARN_UNUSED_RESULT macro now defines __attribute__((warn_unused_result)) and is used for dns_rdata_fromstruct(). --- diff --git a/lib/dns/include/dns/rdata.h b/lib/dns/include/dns/rdata.h index c7bdf5eaff7..c83ceb34b05 100644 --- a/lib/dns/include/dns/rdata.h +++ b/lib/dns/include/dns/rdata.h @@ -497,6 +497,7 @@ dns_rdata_tofmttext(dns_rdata_t *rdata, const dns_name_t *origin, * it is undefined and falls back to the default value of 'width' */ +ISC_ATTR_WARN_UNUSED_RESULT isc_result_t dns_rdata_fromstruct(dns_rdata_t *rdata, dns_rdataclass_t rdclass, dns_rdatatype_t type, void *source, isc_buffer_t *target); diff --git a/lib/isc/include/isc/attributes.h b/lib/isc/include/isc/attributes.h index abad670af89..5f7f5a165dc 100644 --- a/lib/isc/include/isc/attributes.h +++ b/lib/isc/include/isc/attributes.h @@ -37,6 +37,12 @@ #define ISC_ATTR_RETURNS_NONNULL #endif +#if HAVE_FUNC_ATTRIBUTE_WARN_UNUSED_RESULT +#define ISC_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#else +#define ISC_ATTR_WARN_UNUSED_RESULT +#endif + #ifdef HAVE_FUNC_ATTRIBUTE_MALLOC /* * Indicates that a function is malloc-like, i.e., that the diff --git a/meson.build b/meson.build index d6aac088833..0ca704177ba 100644 --- a/meson.build +++ b/meson.build @@ -387,7 +387,7 @@ else cc.has_function('__builtin_popcountll', required: true) endif -foreach attr : ['malloc', 'returns_nonnull'] +foreach attr : ['malloc', 'returns_nonnull', 'warn_unused_result'] if cc.has_function_attribute(attr) config.set('HAVE_FUNC_ATTRIBUTE_@0@'.format(attr.to_upper()), 1) endif diff --git a/tests/dns/private_test.c b/tests/dns/private_test.c index 2ee5310b1a2..ff851996a3e 100644 --- a/tests/dns/private_test.c +++ b/tests/dns/private_test.c @@ -75,6 +75,7 @@ make_signing(signing_testcase_t *testcase, dns_rdata_t *private, static void make_nsec3(nsec3_testcase_t *testcase, dns_rdata_t *private, unsigned char *pbuf) { + isc_result_t result; dns_rdata_nsec3param_t params; dns_rdata_t nsec3param = DNS_RDATA_INIT; unsigned char bufdata[BUFSIZ]; @@ -111,8 +112,9 @@ make_nsec3(nsec3_testcase_t *testcase, dns_rdata_t *private, } isc_buffer_init(&buf, bufdata, sizeof(bufdata)); - dns_rdata_fromstruct(&nsec3param, dns_rdataclass_in, - dns_rdatatype_nsec3param, ¶ms, &buf); + result = dns_rdata_fromstruct(&nsec3param, dns_rdataclass_in, + dns_rdatatype_nsec3param, ¶ms, &buf); + assert_int_equal(result, ISC_R_SUCCESS); dns_rdata_init(private);