blob: 83787049a1096707bed33aa5381d71a31110bc1d [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/*
2 * Copyright (C) 2002 Manuel Novoa III
3 * Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
4 *
5 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
6 */
7
8#include "_string.h"
9
10#ifdef WANT_WIDE
11# define Wstrlcpy __wcslcpy
12# define Wstrxfrm wcsxfrm
13#else
14# define Wstrlcpy strlcpy
15# define Wstrxfrm strxfrm
16#endif
17
18/* OpenBSD function:
19 * Copy at most n-1 chars from src to dst and nul-terminate dst.
20 * Returns strlen(src), so truncation occurred if the return value is >= n. */
21
22size_t Wstrlcpy(register Wchar *__restrict dst,
23 register const Wchar *__restrict src,
24 size_t n)
25{
26 const Wchar *src0 = src;
27 Wchar dummy[1];
28
29 if (!n) {
30 dst = dummy;
31 } else {
32 --n;
33 }
34
35 while ((*dst = *src) != 0) {
36 if (n) {
37 --n;
38 ++dst;
39 }
40 ++src;
41 }
42
43 return src - src0;
44}
45#ifndef WANT_WIDE
46libc_hidden_def(strlcpy)
47#endif
48
49#ifndef __UCLIBC_HAS_LOCALE__
50strong_alias(Wstrlcpy,Wstrxfrm)
51#endif