- char *sp = (char *)src;
- char *dp = (char *)dest;
- // Check if corruption will happen
- if( (intptr_t)dest > (intptr_t)src && (intptr_t)dest < (intptr_t)src+count )
- for(;count--;) dp[count] = sp[count];
- else
- for(;count--;) *dp++ = *sp++;
- return dest;
+ const char *sp = (const char *)src;
+ char *dp = (char *)dest;
+ // Check if the areas overlap
+ if( sp >= dp+count )
+ memcpy(dest, src, count);
+ else if( dp >= sp+count )
+ memcpy(dest, src, count);
+ else {
+ if( sp < dp ) {
+ while(count--)
+ dp[count] = sp[count];
+ }
+ else {
+ while(count--)
+ *dp++ = *sp++;
+ }
+ }
+ return dest;