about summary refs log tree commit diff
path: root/support/support_test_compare_string.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2021-10-12 13:48:39 +0000
committerJoseph Myers <joseph@codesourcery.com>2021-10-12 13:48:39 +0000
commitde82cb0da4b8fa5b3d56c457438d2568c67ab1b1 (patch)
tree396836ad8aa0a466b0cc8a379c6933b972780ce9 /support/support_test_compare_string.c
parent4912c738fcbc6def723370ec3a7ab4a732361322 (diff)
downloadglibc-de82cb0da4b8fa5b3d56c457438d2568c67ab1b1.tar.gz
glibc-de82cb0da4b8fa5b3d56c457438d2568c67ab1b1.tar.xz
glibc-de82cb0da4b8fa5b3d56c457438d2568c67ab1b1.zip
Add TEST_COMPARE_STRING_WIDE to support/check.h
I'd like to be able to test narrow and wide string interfaces, with
the narrow string tests using TEST_COMPARE_STRING and the wide string
tests using something analogous (possibly generated using macros from
a common test template for both the narrow and wide string tests where
appropriate).

Add such a TEST_COMPARE_STRING_WIDE, along with functions
support_quote_blob_wide and support_test_compare_string_wide that it
builds on.  Those functions are built using macros from common
templates shared by the narrow and wide string implementations, though
I didn't do that for the tests of test functions.  In
support_quote_blob_wide, I chose to use the \x{} delimited escape
sequence syntax proposed for C2X in N2785, rather than e.g. trying to
generate the end of a string and the start of a new string when
ambiguity would result from undelimited \x (when the next character
after such an escape sequence is valid hex) or forcing an escape
sequence to be used for the next character in the case of such
ambiguity.

Tested for x86_64.
Diffstat (limited to 'support/support_test_compare_string.c')
-rw-r--r--support/support_test_compare_string.c83
1 files changed, 10 insertions, 73 deletions
diff --git a/support/support_test_compare_string.c b/support/support_test_compare_string.c
index cbeaf7b1ee..12bafe43d4 100644
--- a/support/support_test_compare_string.c
+++ b/support/support_test_compare_string.c
@@ -16,76 +16,13 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <support/check.h>
-#include <support/support.h>
-#include <support/xmemstream.h>
-
-static void
-report_length (const char *what, const char *str, size_t length)
-{
-  if (str == NULL)
-    printf ("  %s string: NULL\n", what);
-  else
-    printf ("  %s string: %zu bytes\n", what, length);
-}
-
-static void
-report_string (const char *what, const unsigned char *blob,
-               size_t length, const char *expr)
-{
-  if (length > 0)
-    {
-      printf ("  %s (evaluated from %s):\n", what, expr);
-      char *quoted = support_quote_blob (blob, length);
-      printf ("      \"%s\"\n", quoted);
-      free (quoted);
-
-      fputs ("     ", stdout);
-      for (size_t i = 0; i < length; ++i)
-        printf (" %02X", blob[i]);
-      putc ('\n', stdout);
-    }
-}
-
-static size_t
-string_length_or_zero (const char *str)
-{
-  if (str == NULL)
-    return 0;
-  else
-    return strlen (str);
-}
-
-void
-support_test_compare_string (const char *left, const char *right,
-                             const char *file, int line,
-                             const char *left_expr, const char *right_expr)
-{
-  /* Two null pointers are accepted.  */
-  if (left == NULL && right == NULL)
-    return;
-
-  size_t left_length = string_length_or_zero (left);
-  size_t right_length = string_length_or_zero (right);
-
-  if (left_length != right_length || left == NULL || right == NULL
-      || memcmp (left, right, left_length) != 0)
-    {
-      support_record_failure ();
-      printf ("%s:%d: error: string comparison failed\n", file, line);
-      if (left_length == right_length && right != NULL && left != NULL)
-        printf ("  string length: %zu bytes\n", left_length);
-      else
-        {
-          report_length ("left", left, left_length);
-          report_length ("right", right, right_length);
-        }
-      report_string ("left", (const unsigned char *) left,
-                     left_length, left_expr);
-      report_string ("right", (const unsigned char *) right,
-                     right_length, right_expr);
-    }
-}
+#define CHAR char
+#define UCHAR unsigned char
+#define LPREFIX ""
+#define STRLEN strlen
+#define MEMCMP memcmp
+#define SUPPORT_QUOTE_BLOB support_quote_blob
+#define SUPPORT_TEST_COMPARE_STRING support_test_compare_string
+#define WIDE 0
+
+#include "support_test_compare_string_main.c"