| #ifndef STDDEF_H |
| #define STDDEF_H |
| |
| typedef long ptrdiff_t; |
| #ifndef __SIZE_TYPE__ |
| #define __SIZE_TYPE__ unsigned long |
| #endif |
| typedef __SIZE_TYPE__ size_t; |
| /* There is a GCC macro for a size_t type, but not |
| * for a ssize_t type. Below construct tricks GCC |
| * into making __SIZE_TYPE__ signed. |
| */ |
| #define unsigned signed |
| typedef __SIZE_TYPE__ ssize_t; |
| #undef unsigned |
| |
| typedef int wchar_t; |
| typedef unsigned int wint_t; |
| |
| #define NULL ((void *)0) |
| |
| /* Standard units. */ |
| #define KiB (1<<10) |
| #define MiB (1<<20) |
| #define GiB (1<<30) |
| /* Could we ever run into this one? I hope we get this much memory! */ |
| #define TiB (1<<40) |
| |
| #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) |
| |
| #define check_member(structure, member, offset) _Static_assert( \ |
| offsetof(struct structure, member) == offset, \ |
| "`struct " #structure "` offset for `" #member "` is not " #offset ) |
| |
| /** |
| * container_of - cast a member of a structure out to the containing structure |
| * @param ptr: the pointer to the member. |
| * @param type: the type of the container struct this is embedded in. |
| * @param member: the name of the member within the struct. |
| * |
| */ |
| #define container_of(ptr, type, member) ({ \ |
| const typeof( ((type *)0)->member ) *__mptr = (ptr); \ |
| (type *)( (char *)__mptr - offsetof(type,member) );}) |
| |
| #ifdef __PRE_RAM__ |
| #define ROMSTAGE_CONST const |
| #else |
| #define ROMSTAGE_CONST |
| #endif |
| |
| #endif /* STDDEF_H */ |