1#include <string.h>
2
3#if defined (STACK_SIZE)
4#define MEMCPY_SIZE (STACK_SIZE / 3)
5#else
6#define MEMCPY_SIZE (1 << 17)
7#endif
8
9
10void *copy (void *o, const void *i, unsigned l)
11{
12  return memcpy (o, i, l);
13}
14
15main ()
16{
17  unsigned i;
18  unsigned char src[MEMCPY_SIZE];
19  unsigned char dst[MEMCPY_SIZE];
20
21  for (i = 0; i < MEMCPY_SIZE; i++)
22    src[i] = (unsigned char) i,  dst[i] = 0;
23
24  (void) memcpy (dst, src, MEMCPY_SIZE / 128);
25
26  for (i = 0; i < MEMCPY_SIZE / 128; i++)
27    if (dst[i] != (unsigned char) i)
28      abort ();
29
30  (void) memset (dst, 1, MEMCPY_SIZE / 128);
31
32  for (i = 0; i < MEMCPY_SIZE / 128; i++)
33    if (dst[i] != 1)
34      abort ();
35
36  (void) memcpy (dst, src, MEMCPY_SIZE);
37
38  for (i = 0; i < MEMCPY_SIZE; i++)
39    if (dst[i] != (unsigned char) i)
40      abort ();
41
42  (void) memset (dst, 0, MEMCPY_SIZE);
43
44  for (i = 0; i < MEMCPY_SIZE; i++)
45    if (dst[i] != 0)
46      abort ();
47
48  (void) copy (dst, src, MEMCPY_SIZE / 128);
49
50  for (i = 0; i < MEMCPY_SIZE / 128; i++)
51    if (dst[i] != (unsigned char) i)
52      abort ();
53
54  (void) memset (dst, 0, MEMCPY_SIZE);
55
56  (void) copy (dst, src, MEMCPY_SIZE);
57
58  for (i = 0; i < MEMCPY_SIZE; i++)
59    if (dst[i] != (unsigned char) i)
60      abort ();
61
62  exit (0);
63}
64