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