From 251ba8ea44fa2cd153e0bd914dde7f5ca9449292 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 12 Oct 2020 21:49:47 +0200 Subject: [PATCH] shared: automatically cast strv argument for nm_utils_strv_equal()/nm_utils_strv_cmp_n() It's cumbersome if we always need to cast our arguments for the strv helper functions. Depending on the situation, we often have a "char **" or a "const char *const*" argument. Use NM_CAST_STRV_CC() macros instead. This macro uses C11's _Generic() and casts types that are presumed to be safe. This tends to be less typing and more type-safe, because you don't need an explicit C cast (which would overrule any warning that the compiler might have for you). --- shared/nm-glib-aux/nm-shared-utils.c | 4 ++-- shared/nm-glib-aux/nm-shared-utils.h | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c index 84cccdd4b4..b0e0238176 100644 --- a/shared/nm-glib-aux/nm-shared-utils.c +++ b/shared/nm-glib-aux/nm-shared-utils.c @@ -3997,7 +3997,7 @@ _nm_utils_strv_sort(const char **strv, gssize len) } /** - * nm_utils_strv_cmp_n: + * _nm_utils_strv_cmp_n: * @strv1: a string array * @len1: the length of @strv1, or -1 for NULL terminated array. * @strv2: a string array @@ -4020,7 +4020,7 @@ _nm_utils_strv_sort(const char **strv, gssize len) * Returns: 0 if the arrays are equal (using strcmp). **/ int -nm_utils_strv_cmp_n(const char *const *strv1, gssize len1, const char *const *strv2, gssize len2) +_nm_utils_strv_cmp_n(const char *const *strv1, gssize len1, const char *const *strv2, gssize len2) { gsize n, n2; diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index 2565404ddc..675a93fe57 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -1627,14 +1627,12 @@ void _nm_utils_strv_sort(const char **strv, gssize len); #define nm_utils_strv_sort(strv, len) _nm_utils_strv_sort(NM_CAST_STRV_MC(strv), len) int -nm_utils_strv_cmp_n(const char *const *strv1, gssize len1, const char *const *strv2, gssize len2); +_nm_utils_strv_cmp_n(const char *const *strv1, gssize len1, const char *const *strv2, gssize len2); -static inline gboolean -nm_utils_strv_equal(char **strv1, char **strv2) -{ - return nm_utils_strv_cmp_n((const char *const *) strv1, -1, (const char *const *) strv2, -1) - == 0; -} +#define nm_utils_strv_cmp_n(strv1, len1, strv2, len2) \ + _nm_utils_strv_cmp_n(NM_CAST_STRV_CC(strv1), (len1), NM_CAST_STRV_CC(strv2), (len2)) + +#define nm_utils_strv_equal(strv1, strv2) (nm_utils_strv_cmp_n((strv1), -1, (strv2), -1) == 0) /*****************************************************************************/