(root)/
glibc-2.38/
wcsmbs/
tst-mbsrtowcs.c
       1  /* Test NUL handling of mbsrtowcs.
       2     Copyright (C) 2004-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #include <stdio.h>
      20  #include <string.h>
      21  #include <wchar.h>
      22  
      23  static int
      24  do_test (void)
      25  {
      26    const unsigned char buf[] = { 'a', 'b', '\0', 'c', 'd', '\0', 'e' };
      27    wchar_t out[sizeof (buf)];
      28    memset (out, '\xff', sizeof (out));
      29  
      30    mbstate_t state;
      31    memset (&state, '\0', sizeof (state));
      32  
      33    const char *in = (const char *) buf;
      34    size_t n = mbsrtowcs (out, &in, sizeof (out) / sizeof (wchar_t), &state);
      35  
      36    int result = 0;
      37    if (n != 2)
      38      {
      39        printf ("n = %zu, expected 2\n", n);
      40        result = 1;
      41      }
      42    if (in != NULL)
      43      {
      44        printf ("in = %p, expected NULL\n", in);
      45        result = 1;
      46      }
      47    if (out[0] != L'a')
      48      {
      49        printf ("out[0] = L'%lc', expected L'a'\n", (wint_t) out[0]);
      50        result = 1;
      51      }
      52    if (out[1] != L'b')
      53      {
      54        printf ("out[1] = L'%lc', expected L'b'\n", (wint_t) out[1]);
      55        result = 1;
      56      }
      57    if (out[2] != L'\0')
      58      {
      59        printf ("out[2] = L'%lc', expected L'\\0'\n", (wint_t) out[2]);
      60        result = 1;
      61      }
      62    return result;
      63  }
      64  
      65  #include <support/test-driver.c>