xref: /netbsd-src/lib/libc/locale/wcsxfrm.c (revision e0ac190e1e4142d8158f3a99bc575fef0a0a0a5c)
1*e0ac190eSjoerg /*	$NetBSD: wcsxfrm.c,v 1.5 2013/05/17 12:55:57 joerg Exp $	*/
231e2cbf0Stshiozak 
331e2cbf0Stshiozak /*-
431e2cbf0Stshiozak  * Copyright (c)2003 Citrus Project,
531e2cbf0Stshiozak  * All rights reserved.
631e2cbf0Stshiozak  *
731e2cbf0Stshiozak  * Redistribution and use in source and binary forms, with or without
831e2cbf0Stshiozak  * modification, are permitted provided that the following conditions
931e2cbf0Stshiozak  * are met:
1031e2cbf0Stshiozak  * 1. Redistributions of source code must retain the above copyright
1131e2cbf0Stshiozak  *    notice, this list of conditions and the following disclaimer.
1231e2cbf0Stshiozak  * 2. Redistributions in binary form must reproduce the above copyright
1331e2cbf0Stshiozak  *    notice, this list of conditions and the following disclaimer in the
1431e2cbf0Stshiozak  *    documentation and/or other materials provided with the distribution.
1531e2cbf0Stshiozak  *
1631e2cbf0Stshiozak  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1731e2cbf0Stshiozak  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1831e2cbf0Stshiozak  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1931e2cbf0Stshiozak  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2031e2cbf0Stshiozak  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2131e2cbf0Stshiozak  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2231e2cbf0Stshiozak  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2331e2cbf0Stshiozak  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2431e2cbf0Stshiozak  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2531e2cbf0Stshiozak  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2631e2cbf0Stshiozak  * SUCH DAMAGE.
2731e2cbf0Stshiozak  */
2831e2cbf0Stshiozak 
2931e2cbf0Stshiozak #include <sys/cdefs.h>
3031e2cbf0Stshiozak #if defined(LIBC_SCCS) && !defined(lint)
31*e0ac190eSjoerg __RCSID("$NetBSD: wcsxfrm.c,v 1.5 2013/05/17 12:55:57 joerg Exp $");
3231e2cbf0Stshiozak #endif /* LIBC_SCCS and not lint */
3331e2cbf0Stshiozak 
3431e2cbf0Stshiozak #include "namespace.h"
3531e2cbf0Stshiozak 
3631e2cbf0Stshiozak #include <assert.h>
3731e2cbf0Stshiozak #include <wchar.h>
3810e0e4a0Sjoerg #include <locale.h>
3910e0e4a0Sjoerg #include "setlocale_local.h"
4031e2cbf0Stshiozak 
4131e2cbf0Stshiozak /*
4231e2cbf0Stshiozak  * Compare strings with using collating information.
4331e2cbf0Stshiozak  */
4431e2cbf0Stshiozak size_t
wcsxfrm_l(wchar_t * s1,const wchar_t * s2,size_t n,locale_t loc)4510e0e4a0Sjoerg wcsxfrm_l(wchar_t *s1, const wchar_t *s2, size_t n, locale_t loc)
4631e2cbf0Stshiozak {
4731e2cbf0Stshiozak 	size_t len;
4831e2cbf0Stshiozak 
4931e2cbf0Stshiozak 	/* XXX: LC_COLLATE should be implemented. */
5010e0e4a0Sjoerg 	/* LINTED */(void)loc;
5131e2cbf0Stshiozak 
5231e2cbf0Stshiozak 	len = wcslen(s2);
5331e2cbf0Stshiozak 	if (len<n)
5431e2cbf0Stshiozak 		wcscpy(s1, s2);
55a8756e84Schristos 	else {
5631e2cbf0Stshiozak 		/*
5731e2cbf0Stshiozak 		 * SUSv3 says:
5831e2cbf0Stshiozak 		 *   If the value returned is n or more, the contents
5931e2cbf0Stshiozak 		 *   of the array pointed to by ws1 are unspecified.
6031e2cbf0Stshiozak 		 */
61a8756e84Schristos 		/* thus, do nothing */
62a8756e84Schristos 	}
6331e2cbf0Stshiozak 
6431e2cbf0Stshiozak 	return (len);
6531e2cbf0Stshiozak }
6610e0e4a0Sjoerg 
6710e0e4a0Sjoerg size_t
wcsxfrm(wchar_t * s1,const wchar_t * s2,size_t n)6810e0e4a0Sjoerg wcsxfrm(wchar_t *s1, const wchar_t *s2, size_t n)
6910e0e4a0Sjoerg {
70*e0ac190eSjoerg 	return wcsxfrm_l(s1, s2, n, _current_locale());
7110e0e4a0Sjoerg }
72