summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorschwarze <>2022-07-25 15:29:21 +0000
committerschwarze <>2022-07-25 15:29:21 +0000
commit20aea8136defb6b04d2ebae31195a55bf10ae314 (patch)
tree70a2f07a1ad7fe8315e16be8c2d2035bad3e7b00 /src
parent70819cc930595b9f8df020a494d2a24efa52c16d (diff)
downloadopenbsd-20aea8136defb6b04d2ebae31195a55bf10ae314.tar.gz
openbsd-20aea8136defb6b04d2ebae31195a55bf10ae314.tar.bz2
openbsd-20aea8136defb6b04d2ebae31195a55bf10ae314.zip
Separate the macro for generating string test functions
for the macro generating test functions for other data types. This makes sense because both are sufficiently different. It also avoids a large number of false positive compiler warnings that guenther@ reported. OK guenther@
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libc/locale/uselocale/uselocale.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/regress/lib/libc/locale/uselocale/uselocale.c b/src/regress/lib/libc/locale/uselocale/uselocale.c
index f07a16ad65..eb0a0025a9 100644
--- a/src/regress/lib/libc/locale/uselocale/uselocale.c
+++ b/src/regress/lib/libc/locale/uselocale/uselocale.c
@@ -1,6 +1,6 @@
1/* $OpenBSD: uselocale.c,v 1.6 2022/04/03 16:52:50 anton Exp $ */ 1/* $OpenBSD: uselocale.c,v 1.7 2022/07/25 15:29:21 schwarze Exp $ */
2/* 2/*
3 * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org> 3 * Copyright (c) 2017, 2022 Ingo Schwarze <schwarze@openbsd.org>
4 * 4 *
5 * Permission to use, copy, modify, and distribute this software for any 5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above 6 * purpose with or without fee is hereby granted, provided that the above
@@ -38,7 +38,6 @@
38 38
39/* Options for TESTFUNC(). */ 39/* Options for TESTFUNC(). */
40#define TOPT_ERR (1 << 0) 40#define TOPT_ERR (1 << 0)
41#define TOPT_STR (1 << 1)
42 41
43/* 42/*
44 * Generate one test function for a specific interface. 43 * Generate one test function for a specific interface.
@@ -62,14 +61,7 @@ _test_##Fn(int line, int ee, Ft er, FUNCPARA) \
62 Ft ar; \ 61 Ft ar; \
63 errno = 0; \ 62 errno = 0; \
64 ar = Fn(FUNCARGS); \ 63 ar = Fn(FUNCARGS); \
65 if (Op & TOPT_STR) { \ 64 if (ar != er) \
66 if (er == (Ft)NULL) \
67 er = (Ft)"NULL"; \
68 if (ar == (Ft)NULL) \
69 ar = (Ft)"NULL"; \
70 } \
71 if (Op & TOPT_STR ? strcmp((const char *)er, (const char *)ar) \
72 : ar != er) \
73 errx(1, "[%d] %s(" Af ")=" Rf " [exp: " Rf "]", \ 65 errx(1, "[%d] %s(" Af ")=" Rf " [exp: " Rf "]", \
74 line, #Fn, FUNCARGS, ar, er); \ 66 line, #Fn, FUNCARGS, ar, er); \
75 if (Op & TOPT_ERR && errno != ee) \ 67 if (Op & TOPT_ERR && errno != ee) \
@@ -77,6 +69,22 @@ _test_##Fn(int line, int ee, Ft er, FUNCPARA) \
77 line, #Fn, FUNCARGS, errno, ee); \ 69 line, #Fn, FUNCARGS, errno, ee); \
78} 70}
79 71
72#define STRTESTFUNC(Fn, Af) \
73static void \
74_test_##Fn(int line, int ee, const char *er, FUNCPARA) \
75{ \
76 const char *ar; \
77 errno = 0; \
78 ar = Fn(FUNCARGS); \
79 if (er == NULL) \
80 er = "NULL"; \
81 if (ar == NULL) \
82 ar = "NULL"; \
83 if (strcmp((const char *)er, (const char *)ar) != 0) \
84 errx(1, "[%d] %s(" Af ")=%s [exp: %s]", \
85 line, #Fn, FUNCARGS, ar, er); \
86}
87
80/* 88/*
81 * Test functions for all tested interfaces. 89 * Test functions for all tested interfaces.
82 */ 90 */
@@ -91,15 +99,15 @@ TESTFUNC(uselocale, locale_t, "%p", "%p", TOPT_ERR)
91 99
92#define FUNCPARA int category, char *locname 100#define FUNCPARA int category, char *locname
93#define FUNCARGS category, locname 101#define FUNCARGS category, locname
94TESTFUNC(setlocale, const char *, "%d, %s", "%s", TOPT_STR) 102STRTESTFUNC(setlocale, "%d, %s")
95 103
96#define FUNCPARA nl_item item 104#define FUNCPARA nl_item item
97#define FUNCARGS item 105#define FUNCARGS item
98TESTFUNC(nl_langinfo, const char *, "%ld", "%s", TOPT_STR) 106STRTESTFUNC(nl_langinfo, "%ld")
99 107
100#define FUNCPARA nl_item item, locale_t locale 108#define FUNCPARA nl_item item, locale_t locale
101#define FUNCARGS item, locale 109#define FUNCARGS item, locale
102TESTFUNC(nl_langinfo_l, const char *, "%ld, %p", "%s", TOPT_STR) 110STRTESTFUNC(nl_langinfo_l, "%ld, %p")
103 111
104#define FUNCPARA int c 112#define FUNCPARA int c
105#define FUNCARGS c 113#define FUNCARGS c