From cc8da77637ea82f78ccbb37acdff35e9d2255772 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 7 Aug 2020 11:22:05 +0200 Subject: [PATCH] shared: add NM_STR_HAS_SUFFIX_WITH_MORE()/NM_STR_HAS_SUFFIX_ASCII_CASE_WITH_MORE() macros They are like NM_STR_HAS_SUFFIX()/NM_STR_HAS_SUFFIX_ASCII_CASE(), but require that the checked string is not identical to the suffix. They require some non-empty word preceding the suffix. --- shared/nm-glib-aux/nm-macros-internal.h | 18 +++++++++++++++--- shared/nm-std-aux/nm-std-aux.h | 14 ++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/shared/nm-glib-aux/nm-macros-internal.h b/shared/nm-glib-aux/nm-macros-internal.h index c917272384..6fd3dc2ec9 100644 --- a/shared/nm-glib-aux/nm-macros-internal.h +++ b/shared/nm-glib-aux/nm-macros-internal.h @@ -1250,9 +1250,21 @@ _NM_IN_STRSET_ASCII_CASE_op_streq (const char *x, const char *s) \ ( _str_has_suffix \ && ((_l = strlen (_str_has_suffix)) >= NM_STRLEN (suffix)) \ - && (g_ascii_strncasecmp (&_str_has_suffix[_l - NM_STRLEN (suffix)], \ - ""suffix"", \ - NM_STRLEN (suffix)) == 0)); \ + && (g_ascii_strcasecmp (&_str_has_suffix[_l - NM_STRLEN (suffix)], \ + ""suffix"") == 0)); \ + }) + +#define NM_STR_HAS_SUFFIX_ASCII_CASE_WITH_MORE(str, suffix) \ + ({ \ + const char *const _str_has_suffix = (str); \ + size_t _l; \ + \ + nm_assert (strlen (suffix) == NM_STRLEN (suffix)); \ + \ + ( _str_has_suffix \ + && ((_l = strlen (_str_has_suffix)) > NM_STRLEN (suffix)) \ + && (g_ascii_strcasecmp (&_str_has_suffix[_l - NM_STRLEN (suffix)], \ + ""suffix"") == 0)); \ }) /*****************************************************************************/ diff --git a/shared/nm-std-aux/nm-std-aux.h b/shared/nm-std-aux/nm-std-aux.h index e581b0c050..a7e2800bd9 100644 --- a/shared/nm-std-aux/nm-std-aux.h +++ b/shared/nm-std-aux/nm-std-aux.h @@ -321,6 +321,20 @@ nm_streq0 (const char *s1, const char *s2) && _str_has_prefix_with_more[NM_STRLEN (prefix)] != '\0'; \ }) +#define NM_STR_HAS_SUFFIX_WITH_MORE(str, suffix) \ + ({ \ + const char *const _str_has_suffix = (str); \ + size_t _l; \ + \ + nm_assert (strlen (suffix) == NM_STRLEN (suffix)); \ + \ + ( _str_has_suffix \ + && ((_l = strlen (_str_has_suffix)) > NM_STRLEN (suffix)) \ + && (memcmp (&_str_has_suffix[_l - NM_STRLEN (suffix)], \ + ""suffix"", \ + NM_STRLEN (suffix)) == 0)); \ + }) + /*****************************************************************************/ #define _NM_IN_SET_EVAL_1( op, _x, y) (_x == (y))