File: memcpycode.c

package info (click to toggle)
boolector 3.2.4-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 20,744 kB
  • sloc: ansic: 83,136; cpp: 18,159; sh: 3,668; python: 2,889; makefile: 210
file content (33 lines) | stat: -rw-r--r-- 567 bytes parent folder | download
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
void*
memcpy (char* dst, char* src, unsigned n)
{
  unsigned i;
  char* q;
  char* eos;
  char* p;

#ifndef NDEBUG
  unsigned j, old, new;

  assume (j < n);
  assume (0 <= j); /* only makes sense if size_t is signed */

  old = src[j];
#endif

  assume (src <= src + n);
  assume (dst <= dst + n);

  /* This assumption is dropped if we allow src and dst to overlap.
   */
  assume (dst + n <= src || src + n <= dst);

  for (p = src, q = dst, eos = src + n; p < eos; p++, q++) *q = *p;

#ifndef NDEBUG
  new = dst[j];
  assert (old == new);
#endif

  return dst;
}