summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Novoa III <mjn3@codepoet.org>2002-11-08 04:21:58 +0000
committerManuel Novoa III <mjn3@codepoet.org>2002-11-08 04:21:58 +0000
commit5dcc4c2e25452b932e3c45bf25cfb89db461bba7 (patch)
tree513e3fb2e31564ac07dd4ffbd976893aa73d74f5
parent4edebd1e22b835ff075719c228b099559c7e346d (diff)
Added some temporary "stubs" for collation.
strcoll is an alias for strcmp. strxfrm is an alias for strlcpy. wcscoll is an alias for wcscmp. wcsxfrm is implemented as a wchar version of strlcpy. Real locale-dependent implementations are coming soon.
-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;