summaryrefslogtreecommitdiff
path: root/test/testutil
diff options
context:
space:
mode:
authorChristos Zoulas <christos@zoulas.com>2018-09-30 17:16:07 -0400
committerViktor Dukhovni <openssl-users@dukhovni.org>2018-12-09 22:02:50 -0500
commitec91206fbe5e14731f9c9fa0b3dd859854d3e8b9 (patch)
treee1c053a68daab0d8027e864ae3e558e0a92188bf /test/testutil
parent5db120dc351177173bb25e963be095404c31fbce (diff)
downloadopenssl-new-ec91206fbe5e14731f9c9fa0b3dd859854d3e8b9.tar.gz
Add a format attribute to the format functions and fix the broken format
strings. Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Diffstat (limited to 'test/testutil')
-rw-r--r--test/testutil/format_output.c16
-rw-r--r--test/testutil/main.c2
-rw-r--r--test/testutil/output.h34
3 files changed, 38 insertions, 14 deletions
diff --git a/test/testutil/format_output.c b/test/testutil/format_output.c
index ead03841d5..7f5147516e 100644
--- a/test/testutil/format_output.c
+++ b/test/testutil/format_output.c
@@ -31,9 +31,9 @@ static void test_diff_header(const char *left, const char *right)
static void test_string_null_empty(const char *m, char c)
{
if (m == NULL)
- test_printf_stderr("% 4s %c NULL\n", "", c);
+ test_printf_stderr("%4s %c NULL\n", "", c);
else
- test_printf_stderr("% 4u:%c ''\n", 0u, c);
+ test_printf_stderr("%4u:%c ''\n", 0u, c);
}
static void test_fail_string_common(const char *prefix, const char *file,
@@ -94,18 +94,18 @@ static void test_fail_string_common(const char *prefix, const char *file,
bdiff[i] = '\0';
}
if (n1 == n2 && !diff) {
- test_printf_stderr("% 4u: '%s'\n", cnt, n2 > n1 ? b2 : b1);
+ test_printf_stderr("%4u: '%s'\n", cnt, n2 > n1 ? b2 : b1);
} else {
if (cnt == 0 && (m1 == NULL || *m1 == '\0'))
test_string_null_empty(m1, '-');
else if (n1 > 0)
- test_printf_stderr("% 4u:- '%s'\n", cnt, b1);
+ test_printf_stderr("%4u:- '%s'\n", cnt, b1);
if (cnt == 0 && (m2 == NULL || *m2 == '\0'))
test_string_null_empty(m2, '+');
else if (n2 > 0)
- test_printf_stderr("% 4u:+ '%s'\n", cnt, b2);
+ test_printf_stderr("%4u:+ '%s'\n", cnt, b2);
if (diff && i > 0)
- test_printf_stderr("% 4s %s\n", "", bdiff);
+ test_printf_stderr("%4s %s\n", "", bdiff);
}
m1 += n1;
m2 += n2;
@@ -410,7 +410,7 @@ void test_output_bignum(const char *name, const BIGNUM *bn)
static void test_memory_null_empty(const unsigned char *m, char c)
{
if (m == NULL)
- test_printf_stderr("% 4s %c%s\n", "", c, "NULL");
+ test_printf_stderr("%4s %c%s\n", "", c, "NULL");
else
test_printf_stderr("%04x %c%s\n", 0u, c, "empty");
}
@@ -494,7 +494,7 @@ static void test_fail_memory_common(const char *prefix, const char *file,
else if (n2 > 0)
test_printf_stderr("%04x:+%s\n", cnt, b2);
if (diff && i > 0)
- test_printf_stderr("% 4s %s\n", "", bdiff);
+ test_printf_stderr("%4s %s\n", "", bdiff);
}
m1 += n1;
m2 += n2;
diff --git a/test/testutil/main.c b/test/testutil/main.c
index 458d4805f3..9dc651b61b 100644
--- a/test/testutil/main.c
+++ b/test/testutil/main.c
@@ -25,7 +25,7 @@ static void check_arg_usage(void)
for (i = 0; i < n; i++)
if (!arg_used[i+1])
- test_printf_stderr("Warning ignored command-line argument %d: %s\n",
+ test_printf_stderr("Warning ignored command-line argument %zu: %s\n",
i, args[i+1]);
if (i < arg_count)
test_printf_stderr("Warning arguments %zu and later unchecked\n", i);
diff --git a/test/testutil/output.h b/test/testutil/output.h
index 655176f4fe..e637c7bd4b 100644
--- a/test/testutil/output.h
+++ b/test/testutil/output.h
@@ -10,8 +10,25 @@
#ifndef HEADER_TU_OUTPUT_H
# define HEADER_TU_OUTPUT_H
-#include <stdarg.h>
+# include <stdarg.h>
+# define ossl_test__attr__(x)
+# if defined(__GNUC__) && defined(__STDC_VERSION__) \
+ && !defined(__APPLE__)
+ /*
+ * Because we support the 'z' modifier, which made its appearance in C99,
+ * we can't use __attribute__ with pre C99 dialects.
+ */
+# if __STDC_VERSION__ >= 199901L
+# undef ossl_test__attr__
+# define ossl_test__attr__ __attribute__
+# if __GNUC__*10 + __GNUC_MINOR__ >= 44
+# define ossl_test__printf__ __gnu_printf__
+# else
+# define ossl_test__printf__ __printf__
+# endif
+# endif
+# endif
/*
* The basic I/O functions used internally by the test framework. These
* can be overridden when needed. Note that if one is, then all must be.
@@ -19,14 +36,21 @@
void test_open_streams(void);
void test_close_streams(void);
/* The following ALL return the number of characters written */
-int test_vprintf_stdout(const char *fmt, va_list ap);
-int test_vprintf_stderr(const char *fmt, va_list ap);
+int test_vprintf_stdout(const char *fmt, va_list ap)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 0)));
+int test_vprintf_stderr(const char *fmt, va_list ap)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 0)));
/* These return failure or success */
int test_flush_stdout(void);
int test_flush_stderr(void);
/* Commodity functions. There's no need to override these */
-int test_printf_stdout(const char *fmt, ...);
-int test_printf_stderr(const char *fmt, ...);
+int test_printf_stdout(const char *fmt, ...)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 2)));
+int test_printf_stderr(const char *fmt, ...)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 2)));
+
+# undef ossl_test__printf__
+# undef ossl_test__attr__
#endif /* HEADER_TU_OUTPUT_H */