summaryrefslogtreecommitdiff
path: root/tests/test_wcsncat_safe.c
blob: 00fc8e69da4b970f3c662c8ccedb8ab57c7d5c2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "common.h"

#include <wchar.h>

int main(int argc, char** argv) {
  wchar_t buffer[8] = {0};

  /* Safe: empty buffer, append 7 wide chars → exactly fills buffer */
  wcsncat(buffer, L"ABCDEFG", 7);
  printf("%ls\n", buffer);

  /* Safe: reset, append with n larger than source.
   * src is L"AB" (len 2), n=100 → only 2 wchars copied */
  buffer[0] = L'\0';
  wcsncat(buffer, L"AB", 100);
  printf("%ls\n", buffer);

  /* Safe: partially filled, append fits exactly.
   * buffer = L"ABCD" (4 wchars), append L"EFG" n=3 → 4+3+1 = 8 = exact fit */
  buffer[0] = L'\0';
  wcsncat(buffer, L"ABCD", 4);
  wcsncat(buffer, L"EFG", 3);
  printf("%ls\n", buffer);

  /* Safe: n limits copy to fit.
   * buffer = L"ABCDE" (5 wchars), src long, n=2 → 5+2+1 = 8 = exact fit */
  buffer[0] = L'\0';
  wcsncat(buffer, L"ABCDE", 5);
  wcsncat(buffer, L"FGHIJKLM", 2);
  printf("%ls\n", buffer);

  /* All safe operations passed without trapping */
  return 0;
}