about summary refs log tree commit diff
path: root/stdio-common
diff options
context:
space:
mode:
Diffstat (limited to 'stdio-common')
-rw-r--r--stdio-common/tst-swprintf.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/stdio-common/tst-swprintf.c b/stdio-common/tst-swprintf.c
new file mode 100644
index 0000000000..a7e232dd4f
--- /dev/null
+++ b/stdio-common/tst-swprintf.c
@@ -0,0 +1,56 @@
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+/* This is the relevant piece from the charmap:
+<UFF61>     /x8e/xa1     HALFWIDTH IDEOGRAPHIC FULL STOP
+<UFF62>     /x8e/xa2     HALFWIDTH LEFT CORNER BRACKET
+<UFF63>     /x8e/xa3     HALFWIDTH RIGHT CORNER BRACKET
+<UFF64>     /x8e/xa4     HALFWIDTH IDEOGRAPHIC COMMA
+ */
+
+const char input[] = "\x8e\xa1g\x8e\xa2h\x8e\xa3i\x8e\xa4j";
+
+int
+main (void)
+{
+  wchar_t buf[1000];
+#define nbuf (sizeof (buf) / sizeof (buf[0]))
+  int result = 0;
+  ssize_t n;
+
+  if (setlocale (LC_ALL, "ja_JP.EUC-JP") == NULL)
+    {
+      puts ("cannot set locale");
+      exit (1);
+    }
+
+#define CHECK(fmt, nexp, exp) \
+  n = swprintf (buf, nbuf, fmt, input);					      \
+  if (n != nexp)							      \
+    {									      \
+      printf ("swprintf (.., .., L\"%ls\", \"%ls\") return %d, not %d\n",     \
+	      fmt, input, (int) n, (int) nexp);				      \
+      result = 1;							      \
+    }									      \
+  else if (wcscmp (buf, exp) != 0)					      \
+    {									      \
+      printf ("\
+swprintf (.., .., L\"%ls\", \"%ls\") produced \"%ls\", not \"%ls\"\n",	      \
+	     fmt, input, buf, exp );					      \
+      result = 1;							      \
+    }
+
+  CHECK (L"[%-6.0s]", 8, L"[      ]");
+  CHECK (L"[%-6.1s]", 8, L"[\xff61     ]");
+  CHECK (L"[%-6.2s]", 8, L"[\xff61g    ]");
+  CHECK (L"[%-6.3s]", 8, L"[\xff61g\xff62   ]");
+  CHECK (L"[%-6.4s]", 8, L"[\xff61g\xff62h  ]");
+  CHECK (L"[%-6.5s]", 8, L"[\xff61g\xff62h\xff63 ]");
+  CHECK (L"[%-6.6s]", 8, L"[\xff61g\xff62h\xff63i]");
+  CHECK (L"[%-6.7s]", 9, L"[\xff61g\xff62h\xff63i\xff64]");
+  CHECK (L"[%-6.8s]", 10, L"[\xff61g\xff62h\xff63i\xff64j]");
+
+  return result;
+}