summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/string/Makefile9
-rw-r--r--libc/string/strxfrm.c47
-rw-r--r--libc/string/wstring.c32
3 files changed, 28 insertions, 60 deletions
diff --git a/libc/string/Makefile b/libc/string/Makefile
index 7bd2ea3dd..088058ebe 100644
--- a/libc/string/Makefile
+++ b/libc/string/Makefile
@@ -38,13 +38,10 @@ MOBJW= basename.o bcopy.o bzero.o dirname.o ffs.o memccpy.o memchr.o memcmp.o \
MOBJW2= wcscasecmp.o wcscat.o wcschrnul.o wcschr.o wcscmp.o wcscpy.o wcscspn.o \
wcsdup.o wcslen.o wcsncasecmp.o wcsncat.o wcsncmp.o wcsncpy.o \
wcsnlen.o wcspbrk.o wcsrchr.o wcsspn.o wcsstr.o wcstok.o wmemchr.o \
- wmemcmp.o wmemcpy.o wmemmove.o wmempcpy.o wmemset.o wcpcpy.o wcpncpy.o
+ wmemcmp.o wmemcpy.o wmemmove.o wmempcpy.o wmemset.o wcpcpy.o wcpncpy.o \
+ wcsxfrm.o # wcscoll
-# wcscoll wcsxfrm
-
-CSRC=strxfrm.c
-COBJS=$(patsubst %.c,%.o, $(CSRC))
-OBJS=$(MOBJ) $(MOBJ1) $(MOBJ2) $(COBJS) $(MOBJW)
+OBJS=$(MOBJ) $(MOBJ1) $(MOBJ2) $(MOBJW)
ifeq ($(UCLIBC_HAS_WCHAR),y)
OBJS += $(MOBJW2)
diff --git a/libc/string/strxfrm.c b/libc/string/strxfrm.c
deleted file mode 100644
index 5acb824c3..000000000
--- a/libc/string/strxfrm.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/* strxfrm for uClibc
- *
- * Copyright (C) 2002 by Erik Andersen <andersen@uclibc.org>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Library General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <string.h>
-
-size_t strxfrm(char *dst, const char *src, size_t len)
-{
- size_t length;
- register char *ptr1, *ptr2;
-
- length = len;
- ptr1 = (char *) dst;
- ptr2 = (char *) src;
- while (length--) {
- if (*ptr2)
- *ptr1++ = *ptr2++;
- else
- *ptr1++ = '\0';
- }
- /* The first while loop should have done much of the heavy
- * lifting for us. This second look will finish the job if
- * that is necessary */
- while (*ptr2)
- ptr2++;
- length = (ptr2 - src);
-
- if (length<len)
- return(length);
- return(len);
-}
diff --git a/libc/string/wstring.c b/libc/string/wstring.c
index ab6bd4169..531b1c9fd 100644
--- a/libc/string/wstring.c
+++ b/libc/string/wstring.c
@@ -627,12 +627,17 @@ int Wmemcmp(const Wvoid *s1, const Wvoid *s2, size_t n)
#ifdef L_strcmp
-#ifndef L_wcscmp
+#ifdef L_wcscmp
+#ifdef __UCLIBC_MJN3_ONLY__
+#warning implement wcscoll and remove weak alias (or enable for C locale only)
+#endif
+weak_alias(wcscmp,wcscoll);
+#else /* L_wcscmp */
#ifdef __UCLIBC_MJN3_ONLY__
#warning implement strcoll and remove weak alias (or enable for C locale only)
#endif
weak_alias(strcmp,strcoll);
-#endif
+#endif /* L_wcscmp */
int Wstrcmp(register const Wchar *s1, register const Wchar *s2)
{
@@ -1918,18 +1923,31 @@ size_t strlcat(register char *__restrict dst,
#endif
/**********************************************************************/
+#ifdef L_wcsxfrm
+#define L_strlcpy
+#define Wstrlcpy wcsxfrm
+#endif
+
#ifdef L_strlcpy
+#ifndef L_wcsxfrm
+#define Wstrlcpy strlcpy
+#ifdef __UCLIBC_MJN3_ONLY__
+#warning implement wcscoll and remove weak alias (or enable for C locale only)
+#endif
+weak_alias(strlcpy,strxfrm);
+#endif
+
/* 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. */
-size_t strlcpy(register char *__restrict dst,
- register const char *__restrict src,
- size_t n)
+size_t Wstrlcpy(register Wchar *__restrict dst,
+ register const Wchar *__restrict src,
+ size_t n)
{
- const char *src0 = src;
- char dummy[1];
+ const Wchar *src0 = src;
+ Wchar dummy[1];
if (!n) {
dst = dummy;