1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #include <wchar.h>
21:
22:
23:
24: wchar_t *
25: __wcsncat_chk (wchar_t *dest, const wchar_t *src, size_t n, size_t destlen)
26: {
27: wchar_t c;
28: wchar_t * const s = dest;
29:
30:
31: do
32: {
33: if (__builtin_expect (destlen-- == 0, 0))
34: __chk_fail ();
35: c = *dest++;
36: }
37: while (c != L'\0');
38:
39:
40:
41: ++destlen;
42: dest -= 2;
43:
44: if (n >= 4)
45: {
46: size_t n4 = n >> 2;
47: do
48: {
49: if (__builtin_expect (destlen-- == 0, 0))
50: __chk_fail ();
51: c = *src++;
52: *++dest = c;
53: if (c == L'\0')
54: return s;
55: if (__builtin_expect (destlen-- == 0, 0))
56: __chk_fail ();
57: c = *src++;
58: *++dest = c;
59: if (c == L'\0')
60: return s;
61: if (__builtin_expect (destlen-- == 0, 0))
62: __chk_fail ();
63: c = *src++;
64: *++dest = c;
65: if (c == L'\0')
66: return s;
67: if (__builtin_expect (destlen-- == 0, 0))
68: __chk_fail ();
69: c = *src++;
70: *++dest = c;
71: if (c == L'\0')
72: return s;
73: } while (--n4 > 0);
74: n &= 3;
75: }
76:
77: while (n > 0)
78: {
79: if (__builtin_expect (destlen-- == 0, 0))
80: __chk_fail ();
81: c = *src++;
82: *++dest = c;
83: if (c == L'\0')
84: return s;
85: n--;
86: }
87:
88: if (c != L'\0')
89: {
90: if (__builtin_expect (destlen-- == 0, 0))
91: __chk_fail ();
92: *++dest = L'\0';
93: }
94:
95: return s;
96: }