/* 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 */
