Welcome to mirror list, hosted at ThFree Co, Russian Federation.

strxfrm.c « string « libc « newlib - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c5df0bcd5debe71413bf86ca3455df22e0cd7f11 (plain)
1
2
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
/*
FUNCTION
	<<strxfrm>>---transform string

INDEX
	strxfrm

SYNOPSIS
	#include <string.h>
	size_t strxfrm(char *restrict <[s1]>, const char *restrict <[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.

	(NOT Cygwin:) The current implementation of <<strxfrm>> simply copies
	the input and does not support any language-specific transformations.

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
strxfrm (char *__restrict s1,
	const char *__restrict s2,
	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;
}