[U-Boot-Users] [PATCH 02/17] examples/eepro100_eeprom: Fix memcpy to return destination pointer
Jerry Van Baren
gvb.uboot at gmail.com
Mon May 19 04:38:33 CEST 2008
Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 01:03 Mon 19 May , Wolfgang Denk wrote:
>> In message <20080518222019.GC19480 at 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
More information about the U-Boot
mailing list