V10/libc/gen/vaxmemmove.c

#define CHUNK 65532	/* word boundary */

/* VAX memcpy is OK up to 65535-byte strings */

extern void *memcpy();

void *
memmove(vout, vin, n)
void *vout, *vin;
unsigned n;
{
	char *out, *in;
	register unsigned chunk;
	if(n <= CHUNK || vout < vin)
		return memcpy(vout, vin, n);
	chunk = n%CHUNK;
	out = (char*)vout + n;
	in = (char*)vin + n;
	while(memcpy(out-=chunk, in-=chunk, chunk) > vout)
		chunk = CHUNK;
	return vout;
}