(linenum→info "unix/slp.c:2238")

glibc/2.7/localedata/bug-iconv-trans.c

    1: #include <iconv.h>
    2: #include <locale.h>
    3: #include <stdio.h>
    4: #include <string.h>
    5: 
    6: int
    7: main (void)
    8: {
    9:   iconv_t cd;
   10:   const char str[] = "????;
   11:   const char expected[] = "AEaeOEoeUEuess";
   12:   char *inptr = (char *) str;
   13:   size_t inlen = strlen (str) + 1;
   14:   char outbuf[500];
   15:   char *outptr = outbuf;
   16:   size_t outlen = sizeof (outbuf);
   17:   int result = 0;
   18:   size_t n;
   19: 
   20:   if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)
   21:     {
   22:       puts ("setlocale failed");
   23:       return 1;
   24:     }
   25: 
   26:   cd = iconv_open ("ANSI_X3.4-1968//TRANSLIT", "ISO-8859-1");
   27:   if (cd == (iconv_t) -1)
   28:     {
   29:       puts ("iconv_open failed");
   30:       return 1;
   31:     }
   32: 
   33:   n = iconv (cd, &inptr, &inlen, &outptr, &outlen);
   34:   if (n != 7)
   35:     {
   36:       if (n == (size_t) -1)
   37:         printf ("iconv() returned error: %m\n");
   38:       else
   39:         printf ("iconv() returned %Zd, expected 7\n", n);
   40:       result = 1;
   41:     }
   42:   if (inlen != 0)
   43:     {
   44:       puts ("not all input consumed");
   45:       result = 1;
   46:     }
   47:   else if (inptr - str != strlen (str) + 1)
   48:     {
   49:       printf ("inptr wrong, advanced by %td\n", inptr - str);
   50:       result = 1;
   51:     }
   52:   if (memcmp (outbuf, expected, sizeof (expected)) != 0)
   53:     {
   54:       printf ("result wrong: \"%.*s\", expected: \"%s\"\n",
   55:               (int) (sizeof (outbuf) - outlen), outbuf, expected);
   56:       result = 1;
   57:     }
   58:   else if (outlen != sizeof (outbuf) - sizeof (expected))
   59:     {
   60:       printf ("outlen wrong: %Zd, expected %Zd\n", outlen,
   61:               sizeof (outbuf) - 15);
   62:       result = 1;
   63:     }
   64:   else
   65:     printf ("output is \"%s\" which is OK\n", outbuf);
   66: 
   67:   return result;
   68: }
Syntax (Markdown)