| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | #include <iconv.h>#include <locale.h>#include <stdio.h>#include <string.h>intmain (void){  iconv_t cd;  const char str[] = "ÄäÖöÜüß";  const char expected[] = "AEaeOEoeUEuess";  char *inptr = (char *) str;  size_t inlen = strlen (str) + 1;  char outbuf[500];  char *outptr = outbuf;  size_t outlen = sizeof (outbuf);  int result = 0;  size_t n;  if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)    {      puts ("setlocale failed");      return 1;    }  cd = iconv_open ("ANSI_X3.4-1968//TRANSLIT", "ISO-8859-1");  if (cd == (iconv_t) -1)    {      puts ("iconv_open failed");      return 1;    }  n = iconv (cd, &inptr, &inlen, &outptr, &outlen);  if (n != 7)    {      if (n == (size_t) -1)	printf ("iconv() returned error: %m\n");      else	printf ("iconv() returned %Zd, expected 7\n", n);      result = 1;    }  if (inlen != 0)    {      puts ("not all input consumed");      result = 1;    }  else if (inptr - str != strlen (str) + 1)    {      printf ("inptr wrong, advanced by %td\n", inptr - str);      result = 1;    }  if (memcmp (outbuf, expected, sizeof (expected)) != 0)    {      printf ("result wrong: \"%.*s\", expected: \"%s\"\n",	      (int) (sizeof (outbuf) - outlen), outbuf, expected);      result = 1;    }  else if (outlen != sizeof (outbuf) - sizeof (expected))    {      printf ("outlen wrong: %Zd, expected %Zd\n", outlen,	      sizeof (outbuf) - 15);      result = 1;    }  else    printf ("output is \"%s\" which is OK\n", outbuf);  return result;}
 |