__gconv_translit_find: Disable function [BZ #17187]
[platform/upstream/glibc.git] / iconv / tst-iconv4.c
index e099ca8..b5ff393 100644 (file)
@@ -1,43 +1,64 @@
+// Derived from BZ #9793
 #include <errno.h>
 #include <iconv.h>
 #include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
 
 
 static int
 do_test (void)
 {
-  iconv_t cd = iconv_open ("ISO-8859-1", "UNICODE");
+  iconv_t cd = iconv_open ("ASCII//TRANSLIT", "UTF-8");
   if (cd == (iconv_t) -1)
     {
-      printf ("iconv_open failed: %m\n");
-      exit (EXIT_FAILURE);
+      puts ("iconv_open failed");
+      return 1;
     }
 
-  char instr[] = "a";
-  char *inptr = instr;
-  size_t inlen = strlen (instr);
-  char buf[200];
-  char *outptr = buf;
-  size_t outlen = sizeof (outptr);
+  char input[2] = { 0xc2, 0xae };      /* Registered trademark */
+  char *inptr = input;
+  size_t insize = sizeof (input);
+  char output[2];                      /* Too short to contain "(R)".  */
+  char *outptr = output;
+  size_t outsize = sizeof (output);
 
-  errno = 0;
-  size_t n = iconv (cd, &inptr, &inlen, &outptr, &outlen);
-  if (n != (size_t) -1)
+  size_t ret = iconv (cd, &inptr, &insize, &outptr, &outsize);
+  if (ret != (size_t) -1)
     {
-      printf ("n (= %zu) != (size_t) -1\n", n);
-      exit (EXIT_FAILURE);
+      puts ("iconv succeeded");
+      return 1;
     }
-  if (errno != EINVAL)
+  if (errno != E2BIG)
     {
-      printf ("errno = %m, not EINVAL\n");
-      exit (EXIT_FAILURE);
+      puts ("iconv did not set errno to E2BIG");
+      return 1;
     }
-
-  iconv_close (cd);
-
-  return 0;
+  int res = 0;
+  if (inptr != input)
+    {
+      puts ("inptr changed");
+      res = 1;
+    }
+  if (insize != sizeof (input))
+    {
+      puts ("insize changed");
+      res = 1;
+    }
+  if (outptr != output)
+    {
+      puts ("outptr changed");
+      res = 1;
+    }
+  if (outsize != sizeof (output))
+    {
+      puts ("outsize changed");
+      res = 1;
+    }
+  if (iconv_close (cd) == -1)
+    {
+      puts ("iconv_close failed");
+      res = 1;
+    }
+  return res;
 }
 
 #define TEST_FUNCTION do_test ()