
Jean-Christophe PLAGNIOL-VILLARD wrote:
On 01:03 Mon 19 May , Wolfgang Denk wrote:
In message 20080518222019.GC19480@game.jcrosoft.org you wrote:
static inline void *memcpy(void *dst, const void *src, unsigned int len) { char *ret = dst;
- while (len-- > 0) { *ret++ = *((char *)src); src++; }
- return (void *)ret;
- return (void *)dst;
While technically correct, this is bogus. We have a variable ret, but we don't return it. And we have a variable dst, but we don't use it as destination pointer.
Please change the *ret++ = *((char *)src); into *dst++ = *((char *)src); and leave all the rest.
You can not do this because dst is a void
Why not? src is void, too.
gcc will claim about the cast.
we can do this void *ret = dst; char *d = dst; const char *s = src;
while (len-- > 0) *d++ = *s++; return ret;
Best Regards, J.
YES! YES! YES! This gets my vote. I marked the start of this thread meaning to suggest using temp variables of the right type and get rid of the complex casting crap, exactly what you did here.
Thanks, gvb