|  | @@ -1,25 +1,43 @@
 | 
		
	
		
			
			| 1 | 1 |  #ifndef STDDEF_H
 | 
		
	
		
			
			| 2 | 2 |  #define STDDEF_H
 | 
		
	
		
			
			| 3 | 3 |  
 | 
		
	
		
			
			| 4 |  | -FILE_LICENCE ( GPL2_ONLY );
 | 
		
	
		
			
			|  | 4 | +FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 | 
		
	
		
			
			| 5 | 5 |  
 | 
		
	
		
			
			| 6 |  | -/* for size_t */
 | 
		
	
		
			
			| 7 | 6 |  #include <stdint.h>
 | 
		
	
		
			
			| 8 | 7 |  
 | 
		
	
		
			
			|  | 8 | +/** EFI headers also define NULL */
 | 
		
	
		
			
			| 9 | 9 |  #undef NULL
 | 
		
	
		
			
			| 10 |  | -#define NULL ((void *)0)
 | 
		
	
		
			
			| 11 | 10 |  
 | 
		
	
		
			
			| 12 |  | -#undef offsetof
 | 
		
	
		
			
			| 13 |  | -#if ( defined ( __GNUC__ ) && ( __GNUC__ > 3 ) )
 | 
		
	
		
			
			| 14 |  | -#define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
 | 
		
	
		
			
			|  | 11 | +/** Null pointer */
 | 
		
	
		
			
			|  | 12 | +#define NULL ( ( void * ) 0 )
 | 
		
	
		
			
			|  | 13 | +
 | 
		
	
		
			
			|  | 14 | +/**
 | 
		
	
		
			
			|  | 15 | + * Get offset of a field within a structure
 | 
		
	
		
			
			|  | 16 | + *
 | 
		
	
		
			
			|  | 17 | + * @v type		Structure type
 | 
		
	
		
			
			|  | 18 | + * @v field		Field within structure
 | 
		
	
		
			
			|  | 19 | + * @ret offset		Offset within structure
 | 
		
	
		
			
			|  | 20 | + */
 | 
		
	
		
			
			|  | 21 | +#if defined ( __GNUC__ ) && ( __GNUC__ > 3 )
 | 
		
	
		
			
			|  | 22 | +#define offsetof( type, field ) __builtin_offsetof ( type, field )
 | 
		
	
		
			
			| 15 | 23 |  #else
 | 
		
	
		
			
			| 16 |  | -#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
 | 
		
	
		
			
			|  | 24 | +#define offsetof( type, field ) ( ( size_t ) &( ( ( type * ) NULL )->field ) )
 | 
		
	
		
			
			| 17 | 25 |  #endif
 | 
		
	
		
			
			| 18 | 26 |  
 | 
		
	
		
			
			| 19 |  | -#undef container_of
 | 
		
	
		
			
			| 20 |  | -#define container_of(ptr, type, member) ({                      \
 | 
		
	
		
			
			| 21 |  | -	const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
 | 
		
	
		
			
			| 22 |  | -	(type *)( (char *)__mptr - offsetof(type,member) );})
 | 
		
	
		
			
			|  | 27 | +/**
 | 
		
	
		
			
			|  | 28 | + * Get containing structure
 | 
		
	
		
			
			|  | 29 | + *
 | 
		
	
		
			
			|  | 30 | + * @v ptr		Pointer to contained field
 | 
		
	
		
			
			|  | 31 | + * @v type		Containing structure type
 | 
		
	
		
			
			|  | 32 | + * @v field		Field within containing structure
 | 
		
	
		
			
			|  | 33 | + * @ret container	Pointer to containing structure
 | 
		
	
		
			
			|  | 34 | + */
 | 
		
	
		
			
			|  | 35 | +#define container_of( ptr, type, field ) ( {				\
 | 
		
	
		
			
			|  | 36 | +	type *__container;						\
 | 
		
	
		
			
			|  | 37 | +	const typeof ( __container->field ) *__field = (ptr);		\
 | 
		
	
		
			
			|  | 38 | +	__container = ( ( ( void * ) __field ) -			\
 | 
		
	
		
			
			|  | 39 | +			offsetof ( type, field ) );			\
 | 
		
	
		
			
			|  | 40 | +	__container; } )
 | 
		
	
		
			
			| 23 | 41 |  
 | 
		
	
		
			
			| 24 | 42 |  /* __WCHAR_TYPE__ is defined by gcc and will change if -fshort-wchar is used */
 | 
		
	
		
			
			| 25 | 43 |  #ifndef __WCHAR_TYPE__
 |