From: Petr Machata Date: Wed, 22 Nov 2023 15:23:28 +0000 (+0100) Subject: lib: utils: Switch matches() to returning int again X-Git-Tag: v6.8.0~60^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=60254925ccab10cfd24dc43c91cb95e50f65c7cf;p=thirdparty%2Fiproute2.git lib: utils: Switch matches() to returning int again Since commit 1f420318bda3 ("utils: don't match empty strings as prefixes") the function has pretended to return a boolean. But every user expects it to return zero on success and a non-zero value on failure, like strcmp(). Even the function itself actually returns "true" to mean "no match". This only makes sense if one considers a boolean to be a one-bit unsigned integer with no inherent meaning, which I do not think is reasonable. Switch the prototype back to int, and return 1 instead of true. Cc: Matteo Croce Signed-off-by: Petr Machata Signed-off-by: David Ahern --- diff --git a/include/utils.h b/include/utils.h index f26ed822f..add55bfa3 100644 --- a/include/utils.h +++ b/include/utils.h @@ -198,7 +198,7 @@ int check_ifname(const char *); int check_altifname(const char *name); int get_ifname(char *, const char *); const char *get_ifname_rta(int ifindex, const struct rtattr *rta); -bool matches(const char *prefix, const char *string); +int matches(const char *prefix, const char *string); int inet_addr_match(const inet_prefix *a, const inet_prefix *b, int bits); int inet_addr_match_rta(const inet_prefix *m, const struct rtattr *rta); diff --git a/lib/utils.c b/lib/utils.c index 99ba7a233..1fc42a9a8 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -873,18 +873,18 @@ const char *get_ifname_rta(int ifindex, const struct rtattr *rta) return name; } -/* Returns false if 'prefix' is a not empty prefix of 'string'. +/* Returns 0 if 'prefix' is a not empty prefix of 'string', != 0 otherwise. */ -bool matches(const char *prefix, const char *string) +int matches(const char *prefix, const char *string) { if (!*prefix) - return true; + return 1; while (*string && *prefix == *string) { prefix++; string++; } - return !!*prefix; + return *prefix; } int inet_addr_match(const inet_prefix *a, const inet_prefix *b, int bits)