From 167d5e33fcb821e51e2f9dcf460591737c3c7972 Mon Sep 17 00:00:00 2001 From: "Peter S. Mazinger" Date: Tue, 3 Jan 2006 14:50:18 +0000 Subject: Complete split of all the string functions. Hope haven't broken too much. wcscoll/strcoll needs some love ... --- libc/string/strlcpy.c | 55 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 9 deletions(-) (limited to 'libc/string/strlcpy.c') diff --git a/libc/string/strlcpy.c b/libc/string/strlcpy.c index e8a435bce..3920db083 100644 --- a/libc/string/strlcpy.c +++ b/libc/string/strlcpy.c @@ -1,19 +1,56 @@ /* + * Copyright (C) 2002 Manuel Novoa III * Copyright (C) 2000-2005 Erik Andersen * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ -#define L_strlcpy -#define Wstrlcpy __strlcpy +#include "_string.h" -#include "wstring.c" +#ifdef WANT_WIDE +# define __Wstrlcpy __wcslcpy +# define Wstrlcpy wcslcpy +#else +# define __Wstrlcpy __strlcpy +# define Wstrlcpy strlcpy +#endif -strong_alias(__strlcpy, strlcpy) +/* OpenBSD function: + * Copy at most n-1 chars from src to dst and nul-terminate dst. + * Returns strlen(src), so truncation occurred if the return value is >= n. */ -#ifdef __LOCALE_C_ONLY -hidden_strong_alias(__strlcpy, __strxfrm) -strong_alias(__strlcpy, strxfrm) -#endif +size_t attribute_hidden __Wstrlcpy(register Wchar *__restrict dst, + register const Wchar *__restrict src, + size_t n) +{ + const Wchar *src0 = src; + Wchar dummy[1]; + + if (!n) { + dst = dummy; + } else { + --n; + } + + while ((*dst = *src) != 0) { + if (n) { + --n; + ++dst; + } + ++src; + } -#undef L_strlcpy + return src - src0; +} + +strong_alias(__Wstrlcpy,Wstrlcpy) + +#ifndef __UCLIBC_HAS_LOCALE__ +# ifdef WANT_WIDE +hidden_strong_alias(__wcslcpy,__wcsxfrm) +strong_alias(__wcslcpy,wcsxfrm) +# else +hidden_strong_alias(__strlcpy,__strxfrm) +strong_alias(__strlcpy,strxfrm) +# endif +#endif -- cgit v1.2.3