Re: container_of() doubt

From: Felipe Balbi
Date: Wed Feb 27 2013 - 14:15:10 EST


Hi again,

On Wed, Feb 27, 2013 at 09:13:22PM +0200, Felipe Balbi wrote:
> Hi Greg,
>
> hehe, you must've answered this over and over again, but I don't see the
> need for __mptr in the container_of() macro. I tried googling it but
> couldn't find much.
>
> I get the macro, but not the need __mptr. Wouldn't this work the same
> way ?
>
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index 80d3687..bbce857 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -717,8 +717,7 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }
> *
> */
> #define container_of(ptr, type, member) ({ \
> - const typeof( ((type *)0)->member ) *__mptr = (ptr); \
> - (type *)( (char *)__mptr - offsetof(type,member) );})
> + (type *)( (char *)(ptr) - offsetof(type,member) );})
>
> /* Trap pasters of __FUNCTION__ at compile-time */
> #define __FUNCTION__ (__func__)
>
> why do we need this type * NULL ?

nevermind, type safety ;-)

--
balbi

Attachment: signature.asc
Description: Digital signature