1extern void abort (void); 2extern int inside_main; 3typedef __SIZE_TYPE__ size_t; 4 5#define TEST_ABORT if (inside_main) abort() 6 7void * 8my_memcpy (void *d, const void *s, size_t n) 9{ 10 char *dst = (char *) d; 11 const char *src = (const char *) s; 12 while (n--) 13 *dst++ = *src++; 14 return (char *) d; 15} 16 17void 18my_bcopy (const void *s, void *d, size_t n) 19{ 20 char *dst = (char *) d; 21 const char *src = (const char *) s; 22 if (src >= dst) 23 while (n--) 24 *dst++ = *src++; 25 else 26 { 27 dst += n; 28 src += n; 29 while (n--) 30 *--dst = *--src; 31 } 32} 33 34void * 35my_memset (void *d, int c, size_t n) 36{ 37 char *dst = (char *) d; 38 while (n--) 39 *dst++ = c; 40 return (char *) d; 41} 42 43void 44my_bzero (void *d, size_t n) 45{ 46 char *dst = (char *) d; 47 while (n--) 48 *dst++ = '\0'; 49} 50 51void * 52memcpy (void *d, const void *s, size_t n) 53{ 54 TEST_ABORT; 55 return my_memcpy (d, s, n); 56} 57 58void 59bcopy (const void *s, void *d, size_t n) 60{ 61 TEST_ABORT; 62 my_bcopy (s, d, n); 63} 64 65void * 66memset (void *d, int c, size_t n) 67{ 68 TEST_ABORT; 69 return my_memset (d, c, n); 70} 71 72void 73bzero (void *d, size_t n) 74{ 75 TEST_ABORT; 76 my_bzero (d, n); 77} 78