diff options
-rw-r--r-- | lib/memcpy.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/memcpy.c b/lib/memcpy.c index dba7d56f1..aec71e36b 100644 --- a/lib/memcpy.c +++ b/lib/memcpy.c @@ -2,6 +2,15 @@ if the source overlaps with the destination. Return DESTADDR. */ +#include <assert.h> + +/* FIXME: uncomment the following for releases. */ +#define NDEBUG 1 + +#ifndef ABS +# define ABS(x) ((x) < 0 ? (-(x)) : (x)) +#endif + char * memcpy (destaddr, srcaddr, len) char *destaddr; @@ -10,6 +19,10 @@ memcpy (destaddr, srcaddr, len) { char *dest = destaddr; + assert (len >= 0); + /* Make sure they don't overlap. */ + assert (ABS (destaddr - srcaddr) >= len); + while (len-- > 0) *destaddr++ = *srcaddr++; return dest; |