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