From: Alberto Leiva Popper Date: Tue, 3 Oct 2023 21:26:08 +0000 (-0600) Subject: Feature test macro review (cont.) X-Git-Tag: 1.6.0~51 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=9b667a08aa51c5fa5152406bc4a996805d5af200;p=thirdparty%2FFORT-validator.git Feature test macro review (cont.) I found a couple of symbols I missed during the previous macro review: - getline(). This forces POSIX >= 2008. - IN6_ARE_ADDR_EQUAL(). I can't find where this is supposed to be standardized, so I decided to ditch it. Also, declaring these macros in every dependent file is scaling poorly, so I moved them to the CC directives, unifying them in the process. _POSIX_C_SOURCE is now 200809L, and _XOPEN_SOURCE is 700 (to match). Also, reduce -std to c99. I don't really have an issue with gnu11, but it looks like the delta is heavily underutilized in the project. Might revert it later. Finally, update the unit tests. --- diff --git a/src/Makefile.am b/src/Makefile.am index d4c47bb9..19db79a7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -120,10 +120,11 @@ fort_SOURCES += xml/relax_ng.c xml/relax_ng.h include asn1/asn1c/Makefile.include fort_SOURCES += $(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS) -fort_CFLAGS = -Wall -Wno-cpp -Wpedantic +fort_CFLAGS = -Wall -Wpedantic # Feel free to temporarily remove this one if you're not using gcc 7.3.0. #fort_CFLAGS += $(GCC_WARNS) -fort_CFLAGS += -std=gnu11 -O2 -g $(FORT_FLAGS) ${XML2_CFLAGS} +fort_CFLAGS += -std=c99 -D_POSIX_C_SOURCE=200809 -D_XOPEN_SOURCE=700 +fort_CFLAGS += -O2 -g $(FORT_FLAGS) ${XML2_CFLAGS} if BACKTRACE_ENABLED fort_CFLAGS += -DBACKTRACE_ENABLED endif diff --git a/src/alloc.c b/src/alloc.c index 78e36e7a..84c8d834 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 /* strdup() */ - #include "alloc.h" #include "log.h" diff --git a/src/asn1/asn1c/BIT_STRING.c b/src/asn1/asn1c/BIT_STRING.c index ff3a4765..4e0637cd 100644 --- a/src/asn1/asn1c/BIT_STRING.c +++ b/src/asn1/asn1c/BIT_STRING.c @@ -3,8 +3,6 @@ * Redistribution and modifications are permitted subject to BSD license. */ -#define _XOPEN_SOURCE 500 /* snprintf() */ - #include #include "asn1/asn1c/asn_internal.h" diff --git a/src/asn1/asn1c/GeneralizedTime.c b/src/asn1/asn1c/GeneralizedTime.c index badade4a..e9b12a6b 100644 --- a/src/asn1/asn1c/GeneralizedTime.c +++ b/src/asn1/asn1c/GeneralizedTime.c @@ -6,9 +6,6 @@ #define _REENTRANT /* for Sun */ #define __EXTENSIONS__ /* for Sun */ -#define _XOPEN_SOURCE 600 /* snprintf(), timezone */ -#define _POSIX_C_SOURCE 200112L /* gmtime_r(), localtime_r(), tzset() */ - #include "asn1/asn1c/asn_internal.h" #include "asn1/asn1c/GeneralizedTime.h" diff --git a/src/asn1/asn1c/OBJECT_IDENTIFIER.c b/src/asn1/asn1c/OBJECT_IDENTIFIER.c index fc40fa18..a94b81f9 100644 --- a/src/asn1/asn1c/OBJECT_IDENTIFIER.c +++ b/src/asn1/asn1c/OBJECT_IDENTIFIER.c @@ -3,8 +3,6 @@ * Redistribution and modifications are permitted subject to BSD license. */ -#define _XOPEN_SOURCE 500 /* snprintf() */ - #include "asn1/asn1c/asn_internal.h" #include "asn1/asn1c/INTEGER.h" #include "asn1/asn1c/OBJECT_IDENTIFIER.h" diff --git a/src/asn1/asn1c/UTCTime.c b/src/asn1/asn1c/UTCTime.c index cf8df4f5..86091407 100644 --- a/src/asn1/asn1c/UTCTime.c +++ b/src/asn1/asn1c/UTCTime.c @@ -3,8 +3,6 @@ * Redistribution and modifications are permitted subject to BSD license. */ -#define _XOPEN_SOURCE 500 /* snprintf() */ - #include "asn1/asn1c/asn_internal.h" #include "asn1/asn1c/UTCTime.h" #include "asn1/asn1c/GeneralizedTime.h" diff --git a/src/asn1/asn1c/asn_bit_data.c b/src/asn1/asn1c/asn_bit_data.c index 121f4843..85602f4f 100644 --- a/src/asn1/asn1c/asn_bit_data.c +++ b/src/asn1/asn1c/asn_bit_data.c @@ -4,8 +4,6 @@ * Redistribution and modifications are permitted subject to BSD license. */ -#define _XOPEN_SOURCE 500 /* snprintf() */ - #include #include "asn1/asn1c/asn_system.h" diff --git a/src/asn1/asn1c/asn_internal.c b/src/asn1/asn1c/asn_internal.c index 11cd788f..771ce946 100644 --- a/src/asn1/asn1c/asn_internal.c +++ b/src/asn1/asn1c/asn_internal.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 /* vsnprintf() */ - #include "asn1/asn1c/asn_internal.h" #include diff --git a/src/asn1/asn1c/ber_tlv_tag.c b/src/asn1/asn1c/ber_tlv_tag.c index ce961c0d..b0c78792 100644 --- a/src/asn1/asn1c/ber_tlv_tag.c +++ b/src/asn1/asn1c/ber_tlv_tag.c @@ -3,8 +3,6 @@ * Redistribution and modifications are permitted subject to BSD license. */ -#define _XOPEN_SOURCE 500 /* snprintf() */ - #include "asn1/asn1c/asn_internal.h" #include "asn1/asn1c/ber_tlv_tag.h" #include diff --git a/src/asn1/asn1c/constraints.c b/src/asn1/asn1c/constraints.c index b3325aec..3cfbe94c 100644 --- a/src/asn1/asn1c/constraints.c +++ b/src/asn1/asn1c/constraints.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 /* vsnprintf() */ - #include "asn1/asn1c/asn_internal.h" #include "asn1/asn1c/constraints.h" #include diff --git a/src/cache/local_cache.c b/src/cache/local_cache.c index e8c16296..e58a1260 100644 --- a/src/cache/local_cache.c +++ b/src/cache/local_cache.c @@ -1,6 +1,3 @@ -#define _XOPEN_SOURCE 600 /* strptime() */ -#define _POSIX_C_SOURCE 200112L /* localtime_r(), strtok_r() */ - #include "cache/local_cache.h" #include diff --git a/src/config.c b/src/config.c index 7598a661..531f5500 100644 --- a/src/config.c +++ b/src/config.c @@ -1,5 +1,3 @@ -#define _GNU_SOURCE /* getopt_long() */ - #include "config.h" #include diff --git a/src/data_structure/path_builder.c b/src/data_structure/path_builder.c index b9404540..37839927 100644 --- a/src/data_structure/path_builder.c +++ b/src/data_structure/path_builder.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 /* snprintf() */ - #include "data_structure/path_builder.h" #include diff --git a/src/file.c b/src/file.c index 42013f98..678e9517 100644 --- a/src/file.c +++ b/src/file.c @@ -1,6 +1,3 @@ -#define _XOPEN_SOURCE 600 /* nftw() */ -#define _POSIX_C_SOURCE 200112L /* fileno() */ - #include "file.h" #include diff --git a/src/json_handler.c b/src/json_handler.c index ed801ce4..19f3cd68 100644 --- a/src/json_handler.c +++ b/src/json_handler.c @@ -1,5 +1,3 @@ -#define _POSIX_C_SOURCE 200112L /* strtok_r() */ - #include "json_handler.h" #include diff --git a/src/line_file.c b/src/line_file.c index 81144511..8dc44c40 100644 --- a/src/line_file.c +++ b/src/line_file.c @@ -87,6 +87,9 @@ lfile_read(struct line_file *lfile, char **result) * because getline is normally meant to be used repeatedly with a * recycled buffer. (free() is a no-op if its argument is NULL so go * nuts.) + * + * Update: If you remove getline(), consider downgrading _POSIX_C_SOURCE + * to 200112L. (And _XOPEN_SOURCE to 600.) */ string = NULL; diff --git a/src/log.c b/src/log.c index c4a45ed0..b82370c0 100644 --- a/src/log.c +++ b/src/log.c @@ -1,6 +1,3 @@ -#define _XOPEN_SOURCE 600 /* vsnprintf() */ -#define _POSIX_C_SOURCE 200112L /* localtime_r() */ - #include "log.h" #ifdef BACKTRACE_ENABLED diff --git a/src/object/manifest.c b/src/object/manifest.c index bf6df56d..39309a5d 100644 --- a/src/object/manifest.c +++ b/src/object/manifest.c @@ -1,5 +1,3 @@ -#define _POSIX_C_SOURCE 200112L /* localtime_r() */ - #include "object/manifest.h" #include "algorithm.h" diff --git a/src/rtr/rtr.c b/src/rtr/rtr.c index 230928c4..41130dda 100644 --- a/src/rtr/rtr.c +++ b/src/rtr/rtr.c @@ -1,6 +1,3 @@ -/* getaddrinfo(), freeaddrinfo(), gai_strerror() */ -#define _POSIX_C_SOURCE 200112L - #include "rtr/rtr.h" #include diff --git a/src/types/address.c b/src/types/address.c index e7a34047..ee1c56d9 100644 --- a/src/types/address.c +++ b/src/types/address.c @@ -130,6 +130,17 @@ ipv6_suffix_mask(unsigned int prefix_len, struct in6_addr *result) } } +bool +addr6_equals(struct in6_addr const *a, struct in6_addr const *b) +{ + unsigned int i; + for (i = 0; i < INET_ADDRSTRLEN; i++) { + if (a->s6_addr[i] != b->s6_addr[i]) + return false; + } + return true; +} + bool prefix4_equals(struct ipv4_prefix const *a, struct ipv4_prefix const *b) { @@ -139,7 +150,7 @@ prefix4_equals(struct ipv4_prefix const *a, struct ipv4_prefix const *b) bool prefix6_equals(struct ipv6_prefix const *a, struct ipv6_prefix const *b) { - return (a->len == b->len) && IN6_ARE_ADDR_EQUAL(&a->addr, &b->addr); + return (a->len == b->len) && addr6_equals(&a->addr, &b->addr); } /** diff --git a/src/types/address.h b/src/types/address.h index e586bcd4..d695e0d2 100644 --- a/src/types/address.h +++ b/src/types/address.h @@ -31,6 +31,8 @@ void in6_addr_init(struct in6_addr *, uint32_t, uint32_t, uint32_t, uint32_t); uint32_t u32_suffix_mask(unsigned int); void ipv6_suffix_mask(unsigned int, struct in6_addr *); +bool addr6_equals(struct in6_addr const *, struct in6_addr const *); + bool prefix4_equals(struct ipv4_prefix const *, struct ipv4_prefix const *); bool prefix6_equals(struct ipv6_prefix const *, struct ipv6_prefix const *); diff --git a/src/types/vrp.c b/src/types/vrp.c index 1585bc47..648944d8 100644 --- a/src/types/vrp.c +++ b/src/types/vrp.c @@ -16,7 +16,7 @@ vrp_equals(struct vrp const *a, struct vrp const *b) case AF_INET: return a->prefix.v4.s_addr == b->prefix.v4.s_addr; case AF_INET6: - return IN6_ARE_ADDR_EQUAL(&a->prefix.v6, &b->prefix.v6); + return addr6_equals(&a->prefix.v6, &b->prefix.v6); } pr_crit("Unknown address family: %u", a->addr_fam); diff --git a/src/xml/relax_ng.c b/src/xml/relax_ng.c index 09156026..00d8a109 100644 --- a/src/xml/relax_ng.c +++ b/src/xml/relax_ng.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 /* vsnprintf() */ - #include "xml/relax_ng.h" #include diff --git a/test/Makefile.am b/test/Makefile.am index c6e29399..80dbc94e 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -12,7 +12,9 @@ if USE_TESTS # _CFLAGS is not defined. # Otherwise it must be included manually: # mumble_mumble_CFLAGS = ${AM_CFLAGS} flag1 flag2 flag3 ... -AM_CFLAGS = -pedantic -Wall -std=gnu11 -I../src -DUNIT_TESTING ${CHECK_CFLAGS} ${XML2_CFLAGS} +AM_CFLAGS = -pedantic -Wall +AM_CFLAGS += -std=c99 -D_POSIX_C_SOURCE=200809 -D_XOPEN_SOURCE=700 +AM_CFLAGS += -I../src -DUNIT_TESTING ${CHECK_CFLAGS} ${XML2_CFLAGS} # Reminder: As opposed to AM_CFLAGS, "AM_LDADD" is not idiomatic automake, and # autotools will even reprehend us if we declare it. Therefore, I came up with # "my" own "ldadd". Unlike AM_CFLAGS, it needs to be manually added to every diff --git a/test/cache/local_cache_test.c b/test/cache/local_cache_test.c index fb9ceaa1..3dd4d13f 100644 --- a/test/cache/local_cache_test.c +++ b/test/cache/local_cache_test.c @@ -1,7 +1,5 @@ /* This test will create temporal directory "tmp/". Needs permissions. */ -#define _XOPEN_SOURCE 500 /* snprintf() */ - #include "cache/local_cache.c" #include diff --git a/test/line_file_test.c b/test/line_file_test.c index 01a4ab5c..9a374da9 100644 --- a/test/line_file_test.c +++ b/test/line_file_test.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 - #include #include #include diff --git a/test/mock.c b/test/mock.c index eb83f51a..9d63e9a4 100644 --- a/test/mock.c +++ b/test/mock.c @@ -3,6 +3,8 @@ #include #include #include "state.h" +#include "config/filename_format.h" +#include "config/mode.h" #include "incidence/incidence.h" /** diff --git a/test/rtr/db/db_table_test.c b/test/rtr/db/db_table_test.c index df837fbd..16fa0b3a 100644 --- a/test/rtr/db/db_table_test.c +++ b/test/rtr/db/db_table_test.c @@ -38,7 +38,7 @@ vrp_equals_v6(struct vrp const *vrp, uint8_t as, uint32_t addr, return (AF_INET6 == vrp->addr_fam) && (as == vrp->asn) - && IN6_ARE_ADDR_EQUAL(&tmp, &vrp->prefix.v6) + && addr6_equals(&tmp, &vrp->prefix.v6) && (prefix_len == vrp->prefix_length) && (max_prefix_len == vrp->max_prefix_length); } diff --git a/test/rtr/db/vrps_test.c b/test/rtr/db/vrps_test.c index e0bbc5b9..d5726b97 100644 --- a/test/rtr/db/vrps_test.c +++ b/test/rtr/db/vrps_test.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 /* nftw() */ - #include #include #include @@ -71,7 +69,7 @@ static const bool deltas_4to4[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; unsigned int deltas_lifetime = 5; MOCK_UINT(config_get_deltas_lifetime, deltas_lifetime, void) -MOCK_VOID(cache_prepare, void) +MOCK_INT(cache_prepare, 0, void) /* Test functions */ @@ -137,7 +135,7 @@ get_vrp_index(struct vrp const *vrp) case AF_INET6: in6_addr_init(&tmp, 0x20010DB8u, 0, 0, 0); - ck_assert(IN6_ARE_ADDR_EQUAL(&tmp, &vrp->prefix.v6)); + ck_assert(addr6_equals(&tmp, &vrp->prefix.v6)); ck_assert_uint_eq(96, vrp->prefix_length); ck_assert_uint_eq(120, vrp->max_prefix_length); family_bit = 1; diff --git a/test/rtr/pdu_handler_test.c b/test/rtr/pdu_handler_test.c index 181483a2..2215192a 100644 --- a/test/rtr/pdu_handler_test.c +++ b/test/rtr/pdu_handler_test.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 - #include #include #include @@ -27,7 +25,7 @@ MOCK_ABORT_INT(read_int32, struct pdu_reader *reader, uint32_t *result) MOCK_ABORT_INT(read_int8, struct pdu_reader *reader, uint8_t *result) -MOCK_VOID(cache_prepare, void) +MOCK_INT(cache_prepare, 0, void) MOCK_INT(slurm_apply, 0, struct db_table *base, struct db_slurm **slurm) MOCK_ABORT_VOID(db_slurm_destroy, struct db_slurm *db) diff --git a/test/rtr/pdu_test.c b/test/rtr/pdu_test.c index e326b6cf..fd622643 100644 --- a/test/rtr/pdu_test.c +++ b/test/rtr/pdu_test.c @@ -174,7 +174,7 @@ START_TEST(test_ipv6_prefix_from_stream) ck_assert_uint_eq(pdu.max_length, 35); ck_assert_uint_eq(pdu.zero, 36); in6_addr_init(&tmp, 0x25262728, 0x292a2b2c, 0x2d2e2f30, 0x31323334); - ck_assert(IN6_ARE_ADDR_EQUAL(&tmp, &pdu.ipv6_prefix)); + ck_assert(addr6_equals(&tmp, &pdu.ipv6_prefix)); ck_assert_uint_eq(pdu.asn, 0x35363738); } END_TEST diff --git a/test/tal_test.c b/test/tal_test.c index 04614c5e..c553a0c4 100644 --- a/test/tal_test.c +++ b/test/tal_test.c @@ -1,5 +1,3 @@ -#define _XOPEN_SOURCE 500 /* nftw() */ - #include "object/tal.c" #include