summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/binutils/libiberty/bcopy.c
blob: b655363d879e58f4b7f9377702964fdbd989af71 (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
/* bcopy -- copy memory regions of arbitary length

NAME
	bcopy -- copy memory regions of arbitrary length

SYNOPSIS
	void bcopy (char *in, char *out, int length)

DESCRIPTION
	Copy LENGTH bytes from memory region pointed to by IN to memory
	region pointed to by OUT.

BUGS
	Significant speed improvements can be made in some cases by
	implementing copies of multiple bytes simultaneously, or unrolling
	the copy loop.

*/

void
bcopy (src, dest, len)
  register char *src, *dest;
  int len;
{
  if (dest < src)
    while (len--)
      *dest++ = *src++;
  else
    {
      char *lasts = src + (len-1);
      char *lastd = dest + (len-1);
      while (len--)
        *(char *)lastd-- = *(char *)lasts--;
    }
}