[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