| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 
 | /*
Copyright (c) 2016 Corinna Vinschen <corinna@vinschen.de>
 */
/*
FUNCTION
	<<strxfrm_l>>---transform string
INDEX
	strxfrm_l
SYNOPSIS
	#include <string.h>
	size_t strxfrm_l(char *restrict <[s1]>, const char *restrict <[s2]>,
                       size_t <[n]>, locale_t <[locale]>);
DESCRIPTION
	This function transforms the string pointed to by <[s2]> and
	places the resulting string into the array pointed to by
	<[s1]>. The transformation is such that if the <<strcmp>>
	function is applied to the two transformed strings, it returns
	a value greater than, equal to, or less than zero,
	correspoinding to the result of a <<strcoll>> function applied
	to the same two original strings.
	No more than <[n]> characters are placed into the resulting
	array pointed to by <[s1]>, including the terminating null
	character. If <[n]> is zero, <[s1]> may be a null pointer. If
	copying takes place between objects that overlap, the behavior
	is undefined.
	(NOT Cygwin:) The current implementation of <<strxfrm_l>> simply copies
	the input and does not support any language-specific transformations.
	If <[locale]> is LC_GLOBAL_LOCALE or not a valid locale object, the
	behaviour is undefined.
RETURNS
	The <<strxfrm_l>> function returns the length of the transformed string
	(not including the terminating null character). If the value returned
	is <[n]> or more, the contents of the array pointed to by
	<[s1]> are indeterminate.
PORTABILITY
<<strxfrm_l>> is POSIX-1.2008.
<<strxfrm_l>> requires no supporting OS subroutines.
QUICKREF
	strxfrm_l ansi pure
*/
#define _DEFAULT_SOURCE
#include <string.h>
size_t
strxfrm_l (char *__restrict s1, const char *__restrict s2, size_t n,
	   locale_t locale)
{
  size_t res;
  (void) locale;
  res = 0;
  while (n-- > 0)
    {
      if ((*s1++ = *s2++) != '\0')
        ++res;
      else
        return res;
    }
  while (*s2)
    {
      ++s2;
      ++res;
    }
  return res;
}
 |