modify macro streq/strneq for check one null pointer
authorweizhixiang <1138871845@qq.com>
Fri, 8 Jan 2021 06:16:54 +0000 (14:16 +0800)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 18 Jan 2021 07:46:17 +0000 (17:46 +1000)
Signed-off-by: weizhixiang <1138871845@qq.com>
Minor modifications applied by Peter Hutterer <peter.hutterer@who-t.net>

src/util-strings.h
test/test-utils.c

index 7ea4b9b0697265404cf23ea2569202966e91d20b..7e9e8bca24eeb4816a77b3d526ab71fa74bd7d5b 100644 (file)
 #include <xlocale.h>
 #endif
 
-#define streq(s1, s2) (strcmp((s1), (s2)) == 0)
-#define strneq(s1, s2, n) (strncmp((s1), (s2), (n)) == 0)
+static inline bool
+streq(const char *str1, const char *str2)
+{
+       /* one NULL, one not NULL is always false */
+       if (str1 && str2)
+               return strcmp(str1, str2) == 0;
+       return str1 == str2;
+}
+
+static inline bool
+strneq(const char *str1, const char *str2, int n)
+{
+       /* one NULL, one not NULL is always false */
+       if (str1 && str2)
+               return strncmp(str1, str2, n) == 0;
+       return str1 == str2;
+}
 
 static inline void *
 zalloc(size_t size)
index 5955f56e6e3572d7b30c9814b858caad95eff857..8cc3f22a14e0755d4cdd6564c0a6aa26e5013e82 100644 (file)
@@ -1270,6 +1270,28 @@ START_TEST(strverscmp_test)
 }
 END_TEST
 
+START_TEST(streq_test)
+{
+       ck_assert(streq("", "") == true);
+       ck_assert(streq(NULL, NULL) == true);
+       ck_assert(streq("0.0.1", "") == false);
+       ck_assert(streq("foo", NULL) == false);
+       ck_assert(streq(NULL, "foo") == false);
+       ck_assert(streq("0.0.1", "0.0.1") == true);
+}
+END_TEST
+
+START_TEST(strneq_test)
+{
+       ck_assert(strneq("", "", 1) == true);
+       ck_assert(strneq(NULL, NULL, 1) == true);
+       ck_assert(strneq("0.0.1", "", 6) == false);
+       ck_assert(strneq("foo", NULL, 5) == false);
+       ck_assert(strneq(NULL, "foo", 5) == false);
+       ck_assert(strneq("0.0.1", "0.0.1", 6) == true);
+}
+END_TEST
+
 static Suite *
 litest_utils_suite(void)
 {
@@ -1311,6 +1333,8 @@ litest_utils_suite(void)
        tcase_add_test(tc, list_test_insert);
        tcase_add_test(tc, list_test_append);
        tcase_add_test(tc, strverscmp_test);
+       tcase_add_test(tc, streq_test);
+       tcase_add_test(tc, strneq_test);
 
        suite_add_tcase(s, tc);