Cygwin: mmap: allow remapping part of an existing anonymous mapping
[newlib-cygwin.git] / newlib / libc / string / strxfrm_l.c
blob0ac52432c596aa134e62e2e88db935d8d38ee645
1 /*
2 FUNCTION
3 <<strxfrm_l>>---transform string
5 INDEX
6 strxfrm_l
8 SYNOPSIS
9 #include <string.h>
10 size_t strxfrm_l(char *restrict <[s1]>, const char *restrict <[s2]>,
11 size_t <[n]>, locale_t <[locale]>);
13 DESCRIPTION
14 This function transforms the string pointed to by <[s2]> and
15 places the resulting string into the array pointed to by
16 <[s1]>. The transformation is such that if the <<strcmp>>
17 function is applied to the two transformed strings, it returns
18 a value greater than, equal to, or less than zero,
19 correspoinding to the result of a <<strcoll>> function applied
20 to the same two original strings.
22 No more than <[n]> characters are placed into the resulting
23 array pointed to by <[s1]>, including the terminating null
24 character. If <[n]> is zero, <[s1]> may be a null pointer. If
25 copying takes place between objects that overlap, the behavior
26 is undefined.
28 (NOT Cygwin:) The current implementation of <<strxfrm_l>> simply copies
29 the input and does not support any language-specific transformations.
31 If <[locale]> is LC_GLOBAL_LOCALE or not a valid locale object, the
32 behaviour is undefined.
34 RETURNS
35 The <<strxfrm_l>> function returns the length of the transformed string
36 (not including the terminating null character). If the value returned
37 is <[n]> or more, the contents of the array pointed to by
38 <[s1]> are indeterminate.
40 PORTABILITY
41 <<strxfrm_l>> is POSIX-1.2008.
43 <<strxfrm_l>> requires no supporting OS subroutines.
45 QUICKREF
46 strxfrm_l ansi pure
49 #include <string.h>
51 size_t
52 strxfrm_l (char *__restrict s1, const char *__restrict s2, size_t n,
53 struct __locale_t *locale)
55 size_t res;
56 res = 0;
57 while (n-- > 0)
59 if ((*s1++ = *s2++) != '\0')
60 ++res;
61 else
62 return res;
64 while (*s2)
66 ++s2;
67 ++res;
70 return res;