1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-10-24 13:33:08 +03:00

stdio-common: Convert macros across scanf input specifier tests

Convert 'compare_real', 'read_real', and 'verify_input' macros to
functions so as to improve readability and avoid pitfalls.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
Maciej W. Rozycki
2025-08-23 01:02:10 +01:00
parent a1e5ee13ab
commit aa4dbb2eeb
5 changed files with 411 additions and 399 deletions

View File

@@ -16,36 +16,45 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <stdbool.h>
#include <string.h>
/* Reference data is a signed decimal integer constant to compare against
arithmetically. */
/* Tweak our environment according to any TYPE_T_UNSIGNED_P setting
supplied by the individual test case. */
#ifdef TYPE_T_UNSIGNED_P
# define UNSIGNED unsigned
#else
# define UNSIGNED
#endif
#define pointer_to_value(val) (&(val))
#define initialize_value(val) \
memset (&val, 0xa5, sizeof (val))
#define verify_input(f, val, count, errp) \
({ \
__label__ out; \
bool match = true; \
int err; \
\
UNSIGNED long long v = read_integer (&err); \
if (err < 0) \
goto out; \
match = val == v; \
\
out: \
if (err || !match) \
{ \
printf ("error: %s:%d: input: %016llx\n", \
__FILE__, __LINE__, (long long) val); \
printf ("error: %s:%d: value: %016llx\n", \
__FILE__, __LINE__, v); \
} \
\
*errp = err; \
match; \
})
static bool
verify_input (char f, type_t val, long long count, int *errp)
{
bool match = true;
int err;
UNSIGNED long long v = read_integer (&err);
if (err < 0)
goto out;
match = val == v;
out:
if (err || !match)
{
printf ("error: %s:%d: input: %016llx\n",
__FILE__, __LINE__, (long long) val);
printf ("error: %s:%d: value: %016llx\n",
__FILE__, __LINE__, v);
}
*errp = err;
return match;
}