/* written by Thomas Dickey, originally for XFree86 xterm */

#ifndef HAVE_MEMMOVE

#include <stdlib.h>

char *
memmove (s1, s2, n)
	char *s1;
	char *s2;
	int n;
{
	if (n != 0) {
		if ((s1 + n > s2) && (s2 + n > s1)) {
			static char *bfr;
			static int length;
			size_t j;

			if (length < n) {
				length = (n * 3) / 2;
				bfr = (bfr != 0)
					? (char *) realloc (bfr, length)
					: (char *) malloc (length);
				if (bfr == 0)
					return 0;
			}
			for (j = 0; j < n; j++)
				bfr[j] = s2[j];
			s2 = bfr;
		}
		while (n-- != 0)
			s1[n] = s2[n];
	}
	return s1;
}
#endif /* HAVE_MEMMOVE */
