77 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
| FUNCTION
 | |
| 	<<strxfrm>>---transform string
 | |
| 
 | |
| INDEX
 | |
| 	strxfrm
 | |
| 
 | |
| ANSI_SYNOPSIS
 | |
| 	#include <string.h>
 | |
| 	size_t strxfrm(char *restrict <[s1]>, const char *restrict <[s2]>,
 | |
|                        size_t <[n]>);
 | |
| 
 | |
| TRAD_SYNOPSIS
 | |
| 	#include <string.h>
 | |
| 	size_t strxfrm(<[s1]>, <[s2]>, <[n]>);
 | |
| 	char *<[s1]>;
 | |
| 	char *<[s2]>;
 | |
| 	size_t <[n]>;
 | |
| 
 | |
| 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.
 | |
| 
 | |
| 	With a C locale, this function just copies.
 | |
| 
 | |
| RETURNS
 | |
| 	The <<strxfrm>> 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>> is ANSI C.
 | |
| 
 | |
| <<strxfrm>> requires no supporting OS subroutines.
 | |
| 
 | |
| QUICKREF
 | |
| 	strxfrm ansi pure
 | |
| */
 | |
| 
 | |
| #include <string.h>
 | |
| 
 | |
| size_t
 | |
| _DEFUN (strxfrm, (s1, s2, n),
 | |
| 	char *__restrict s1 _AND
 | |
| 	_CONST char *__restrict s2 _AND
 | |
| 	size_t n)
 | |
| {
 | |
|   size_t res;
 | |
|   res = 0;
 | |
|   while (n-- > 0)
 | |
|     {
 | |
|       if ((*s1++ = *s2++) != '\0')
 | |
|         ++res;
 | |
|       else
 | |
|         return res;
 | |
|     }
 | |
|   while (*s2)
 | |
|     {
 | |
|       ++s2;
 | |
|       ++res;
 | |
|     }
 | |
| 
 | |
|   return res;
 | |
| }
 |