OSDN Git Service

Added some temporary "stubs" for collation.
authorManuel Novoa III <mjn3@codepoet.org>
Fri, 8 Nov 2002 04:21:58 +0000 (04:21 -0000)
committerManuel Novoa III <mjn3@codepoet.org>
Fri, 8 Nov 2002 04:21:58 +0000 (04:21 -0000)
  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.

libc/string/Makefile
libc/string/strxfrm.c [deleted file]
libc/string/wstring.c

index 7bd2ea3..088058e 100644 (file)
@@ -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 (file)
index 5acb824..0000000
+++ /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);
-}
index ab6bd41..531b1c9 100644 (file)
@@ -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;