]>
git.proxmox.com Git - wasi-libc.git/blob - libc-top-half/musl/src/string/stpncpy.c
5 #define ALIGN (sizeof(size_t)-1)
6 #define ONES ((size_t)-1/UCHAR_MAX)
7 #define HIGHS (ONES * (UCHAR_MAX/2+1))
8 #define HASZERO(x) ((x)-ONES & ~(x) & HIGHS)
10 char *__stpncpy(char *restrict d
, const char *restrict s
, size_t n
)
13 typedef size_t __attribute__((__may_alias__
)) word
;
16 if (((uintptr_t)s
& ALIGN
) == ((uintptr_t)d
& ALIGN
)) {
17 for (; ((uintptr_t)s
& ALIGN
) && n
&& (*d
=*s
); n
--, s
++, d
++);
18 if (!n
|| !*s
) goto tail
;
19 wd
=(void *)d
; ws
=(const void *)s
;
20 for (; n
>=sizeof(size_t) && !HASZERO(*ws
);
21 n
-=sizeof(size_t), ws
++, wd
++) *wd
= *ws
;
22 d
=(void *)wd
; s
=(const void *)ws
;
25 for (; n
&& (*d
=*s
); n
--, s
++, d
++);
31 weak_alias(__stpncpy
, stpncpy
);