72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
| 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
 | |
| */
 | |
| 
 | |
| #include <string.h>
 | |
| 
 | |
| size_t
 | |
| strxfrm_l (char *__restrict s1, const char *__restrict s2, size_t n,
 | |
| 	   struct __locale_t *locale)
 | |
| {
 | |
|   size_t res;
 | |
|   res = 0;
 | |
|   while (n-- > 0)
 | |
|     {
 | |
|       if ((*s1++ = *s2++) != '\0')
 | |
|         ++res;
 | |
|       else
 | |
|         return res;
 | |
|     }
 | |
|   while (*s2)
 | |
|     {
 | |
|       ++s2;
 | |
|       ++res;
 | |
|     }
 | |
| 
 | |
|   return res;
 | |
| }
 |