From e81d3f1ebfc54cf4efa2dc4a2ac1db32d36546ee Mon Sep 17 00:00:00 2001 From: joerg Date: Fri, 19 Apr 2013 23:28:47 +0000 Subject: [PATCH] Add dummy strcoll_l and strxfrm_l. --- include/string.h | 11 ++++++++++- lib/libc/include/namespace.h | 4 +++- lib/libc/string/strcoll.c | 20 ++++++++++++++++++-- lib/libc/string/strxfrm.c | 23 ++++++++++++++++++++--- 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/include/string.h b/include/string.h index a02ab19e7fa6..6107de369acc 100644 --- a/include/string.h +++ b/include/string.h @@ -1,4 +1,4 @@ -/* $NetBSD: string.h,v 1.41 2012/08/30 12:16:48 drochner Exp $ */ +/* $NetBSD: string.h,v 1.42 2013/04/19 23:28:47 joerg Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -114,6 +114,15 @@ int __consttime_bcmp(const void *, const void *, size_t); __END_DECLS #endif +#if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE) +# ifndef __LOCALE_T_DECLARED +typedef struct _locale *locale_t; +# define __LOCALE_T_DECLARED +# endif +int strcoll_l(const char *, const char *, locale_t); +size_t strxfrm_l(char * __restrict, const char * __restrict, size_t, locale_t); +#endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */ + #if _FORTIFY_SOURCE > 0 #include #endif diff --git a/lib/libc/include/namespace.h b/lib/libc/include/namespace.h index 3025d779162a..396938cc3b47 100644 --- a/lib/libc/include/namespace.h +++ b/lib/libc/include/namespace.h @@ -1,4 +1,4 @@ -/* $NetBSD: namespace.h,v 1.162 2013/04/19 15:22:24 joerg Exp $ */ +/* $NetBSD: namespace.h,v 1.163 2013/04/19 23:28:47 joerg Exp $ */ /*- * Copyright (c) 1997-2004 The NetBSD Foundation, Inc. @@ -606,6 +606,7 @@ #define srandom _srandom #define statvfs(a, b) _statvfs(a, b) #define strcasecmp _strcasecmp +#define strcoll_l _strcoll_l #define strdup _strdup #define stresep _stresep #define strftime_z _strftime_z @@ -619,6 +620,7 @@ #define strtok_r _strtok_r #define strnunvisx _strnunvisx #define strvisx _strvisx +#define strxfrm_l _strxfrm_l #define svc_auth_reg _svc_auth_reg #define svc_create _svc_create #define svc_dg_create _svc_dg_create diff --git a/lib/libc/string/strcoll.c b/lib/libc/string/strcoll.c index 77a094250429..d5da4c8750fa 100644 --- a/lib/libc/string/strcoll.c +++ b/lib/libc/string/strcoll.c @@ -1,4 +1,4 @@ -/* $NetBSD: strcoll.c,v 1.10 2012/06/25 22:32:46 abs Exp $ */ +/* $NetBSD: strcoll.c,v 1.11 2013/04/19 23:28:47 joerg Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -37,12 +37,18 @@ #if 0 static char sccsid[] = "@(#)strcoll.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: strcoll.c,v 1.10 2012/06/25 22:32:46 abs Exp $"); +__RCSID("$NetBSD: strcoll.c,v 1.11 2013/04/19 23:28:47 joerg Exp $"); #endif #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" + #include +#include #include +#include "setlocale_local.h" + +__weak_alias(strcoll_l, _strcoll_l) /* * Compare strings according to LC_COLLATE category of current locale. @@ -51,9 +57,19 @@ int strcoll(const char *s1, const char *s2) { + return strcoll_l(s1, s2, *_current_locale()); +} + +int +strcoll_l(const char *s1, const char *s2, locale_t loc) +{ _DIAGASSERT(s1 != NULL); _DIAGASSERT(s2 != NULL); + if (loc == NULL) + loc = _C_locale; + /* LC_COLLATE is unimplemented, hence always "C" */ + /* LINTED */ (void)loc; return (strcmp(s1, s2)); } diff --git a/lib/libc/string/strxfrm.c b/lib/libc/string/strxfrm.c index 42c2a244b903..841c9fceda9a 100644 --- a/lib/libc/string/strxfrm.c +++ b/lib/libc/string/strxfrm.c @@ -1,4 +1,4 @@ -/* $NetBSD: strxfrm.c,v 1.12 2012/06/25 22:32:46 abs Exp $ */ +/* $NetBSD: strxfrm.c,v 1.13 2013/04/19 23:28:47 joerg Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -37,12 +37,18 @@ #if 0 static char sccsid[] = "@(#)strxfrm.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: strxfrm.c,v 1.12 2012/06/25 22:32:46 abs Exp $"); +__RCSID("$NetBSD: strxfrm.c,v 1.13 2013/04/19 23:28:47 joerg Exp $"); #endif #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" + #include +#include #include +#include "setlocale_local.h" + +__weak_alias(strxfrm_l, _strxfrm_l) /* * Transform src, storing the result in dst, such that @@ -50,12 +56,17 @@ __RCSID("$NetBSD: strxfrm.c,v 1.12 2012/06/25 22:32:46 abs Exp $"); * on the original untransformed strings would return. */ size_t -strxfrm(char *dst, const char *src, size_t n) +strxfrm_l(char *dst, const char *src, size_t n, locale_t loc) { size_t srclen, copysize; _DIAGASSERT(src != NULL); + if (loc == NULL) + loc = _C_locale; + /* XXX: LC_COLLATE should be implemented. */ + /* LINTED */(void)loc; + /* * Since locales are unimplemented, this is just a copy. */ @@ -68,3 +79,9 @@ strxfrm(char *dst, const char *src, size_t n) } return (srclen); } + +size_t +strxfrm(char *dst, const char *src, size_t n) +{ + return strxfrm_l(dst, src, n, *_current_locale()); +}