/* Test of xvasprintf() and xasprintf() functions.
- Copyright (C) 2007-2009 Free Software Foundation, Inc.
+ Copyright (C) 2007-2014 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
+/* Tell GCC not to warn about the specific edge cases tested here. */
+#if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__
+# pragma GCC diagnostic ignored "-Wformat-zero-length"
+# pragma GCC diagnostic ignored "-Wformat-nonliteral"
+# pragma GCC diagnostic ignored "-Wformat-security"
+#endif
+
#include <config.h>
#include "xvasprintf.h"
#include <stdarg.h>
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "progname.h"
-
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (stderr); \
- abort (); \
- } \
- } \
- while (0)
+#include "macros.h"
static char *
my_xasprintf (const char *format, ...)
free (result);
}
- result = my_xasprintf ("");
- ASSERT (result != NULL);
- ASSERT (strcmp (result, "") == 0);
+ {
+ /* Silence gcc warning about zero-length format string. */
+ const char *empty = "";
+ result = my_xasprintf (empty);
+ ASSERT (result != NULL);
+ ASSERT (strcmp (result, "") == 0);
+ free (result);
+ }
result = my_xasprintf ("%s", "foo");
ASSERT (result != NULL);
ASSERT (strcmp (result, "foo") == 0);
+ free (result);
result = my_xasprintf ("%s%s", "foo", "bar");
ASSERT (result != NULL);
ASSERT (strcmp (result, "foobar") == 0);
+ free (result);
result = my_xasprintf ("%s%sbaz", "foo", "bar");
ASSERT (result != NULL);
ASSERT (strcmp (result, "foobarbaz") == 0);
+ free (result);
}
static void
-test_xasprintf ()
+test_xasprintf (void)
{
int repeat;
char *result;
free (result);
}
- result = xasprintf ("");
- ASSERT (result != NULL);
- ASSERT (strcmp (result, "") == 0);
+ {
+ /* Silence gcc warning about zero-length format string,
+ and about "format not a string literal and no format"
+ (whatever that means) . */
+ const char *empty = "";
+ result = xasprintf (empty, empty);
+ ASSERT (result != NULL);
+ ASSERT (strcmp (result, "") == 0);
+ free (result);
+ }
result = xasprintf ("%s", "foo");
ASSERT (result != NULL);
ASSERT (strcmp (result, "foo") == 0);
+ free (result);
result = xasprintf ("%s%s", "foo", "bar");
ASSERT (result != NULL);
ASSERT (strcmp (result, "foobar") == 0);
+ free (result);
result = my_xasprintf ("%s%sbaz", "foo", "bar");
ASSERT (result != NULL);
ASSERT (strcmp (result, "foobarbaz") == 0);
+ free (result);
}
int
-main (int argc _UNUSED_PARAMETER_, char *argv[])
+main (int argc _GL_UNUSED, char *argv[])
{
set_program_name (argv[0]);