Selaa lähdekoodia

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.

Manuel Novoa III 21 vuotta sitten
vanhempi
commit
5dcc4c2e25
3 muutettua tiedostoa jossa 28 lisäystä ja 60 poistoa
  1. 3 6
      libc/string/Makefile
  2. 0 47
      libc/string/strxfrm.c
  3. 25 7
      libc/string/wstring.c

+ 3 - 6
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)

+ 0 - 47
libc/string/strxfrm.c

@@ -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);
-}

+ 25 - 7
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;