(root)/
glibc-2.38/
iconv/
tst-iconv2.c
       1  /* Copyright (C) 2001-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <errno.h>
      19  #include <iconv.h>
      20  #include <mcheck.h>
      21  #include <stddef.h>
      22  #include <stdio.h>
      23  #include <stdlib.h>
      24  #include <string.h>
      25  
      26  
      27  static int
      28  do_test (void)
      29  {
      30    char buf[3];
      31    const wchar_t wc[1] = L"a";
      32    iconv_t cd;
      33    char *inptr;
      34    size_t inlen;
      35    char *outptr;
      36    size_t outlen;
      37    size_t n;
      38    int e;
      39    int result = 0;
      40  
      41    mtrace ();
      42  
      43    cd = iconv_open ("UCS4", "WCHAR_T");
      44    if (cd == (iconv_t) -1)
      45      {
      46        printf ("cannot convert from wchar_t to UCS4: %m\n");
      47        exit (1);
      48      }
      49  
      50    inptr = (char *) wc;
      51    inlen = sizeof (wchar_t);
      52    outptr = buf;
      53    outlen = 3;
      54  
      55    n = iconv (cd, &inptr, &inlen, &outptr, &outlen);
      56    e = errno;
      57  
      58    if (n != (size_t) -1)
      59      {
      60        printf ("incorrect iconv() return value: %zd, expected -1\n", n);
      61        result = 1;
      62      }
      63  
      64    if (e != E2BIG)
      65      {
      66        printf ("incorrect error value: %s, expected %s\n",
      67  	      strerror (e), strerror (E2BIG));
      68        result = 1;
      69      }
      70  
      71    if (inptr != (char *) wc)
      72      {
      73        puts ("inptr changed");
      74        result = 1;
      75      }
      76  
      77    if (inlen != sizeof (wchar_t))
      78      {
      79        puts ("inlen changed");
      80        result = 1;
      81      }
      82  
      83    if (outptr != buf)
      84      {
      85        puts ("outptr changed");
      86        result = 1;
      87      }
      88  
      89    if (outlen != 3)
      90      {
      91        puts ("outlen changed");
      92        result = 1;
      93      }
      94  
      95    iconv_close (cd);
      96  
      97    return result;
      98  }
      99  
     100  #define TEST_FUNCTION do_test ()
     101  #include "../test-skeleton.c"