|
XenevaOS
|


Go to the source code of this file.
Macros | |
| #define | __type_half_max(type) ((type)1 << (8*sizeof(type) - 1 - is_signed_type(type))) |
| #define | __type_max(T) ((T)((__type_half_max(T) - 1) + __type_half_max(T))) |
| #define | type_max(t) __type_max(typeof(t)) |
| #define | __type_min(T) ((T)((T)-type_max(T)-(T)1)) |
| #define | type_min(t) __type_min(typeof(t)) |
| #define | check_add_overflow(a, b, d) __must_check_overflow(__builtin_add_overflow(a, b, d)) |
| #define | wrapping_add(type, a, b) |
| #define | wrapping_assign_add(var, offset) |
| #define | check_sub_overflow(a, b, d) __must_check_overflow(__builtin_sub_overflow(a, b, d)) |
| #define | wrapping_sub(type, a, b) |
| #define | wrapping_assign_sub(var, offset) |
| #define | check_mul_overflow(a, b, d) __must_check_overflow(__builtin_mul_overflow(a, b, d)) |
| #define | wrapping_mul(type, a, b) |
| #define | check_shl_overflow(a, s, d) |
| #define | __overflows_type_constexpr(x, T) |
| #define | __overflows_type(x, T) |
| #define | overflows_type(n, T) |
| #define | range_overflows(start, size, max) |
| #define | range_overflows_t(type, start, size, max) range_overflows((type)(start), (type)(size), (type)(max)) |
| #define | range_end_overflows(start, size, max) |
| #define | range_end_overflows_t(type, start, size, max) range_end_overflows((type)(start), (type)(size), (type)(max)) |
| #define | castable_to_type(n, T) |
| #define | array_size(a, b) size_mul(a, b) |
| #define | array3_size(a, b, c) size_mul(size_mul(a, b), c) |
| #define | flex_array_size(p, member, count) |
| #define | struct_size(p, member, count) |
| #define | struct_size_t(type, member, count) struct_size((type *)NULL, member, count) |
| #define | struct_offset(p, member) (offsetof(typeof(*(p)), member)) |
: Name for a variable to define. | |
DEFINE_RAW_FLEX() - Define an on-stack instance of structure with a trailing flexible array member, when it does not have a __counted_by annotation. @type: structure type name, including "struct" keyword. @member: Name of the array member. @count: Number of elements in the array; must be compile-time const. Define a zeroed, on-stack, instance of @type structure with a trailing flexible array member. Use __struct_size( | |
| #define | __DEFINE_FLEX(type, name, member, count, trailer...) |
| #define | _DEFINE_FLEX(type, name, member, count, initializer...) __DEFINE_FLEX(type, name, member, count, = { .obj initializer }) |
, @member) to get compile-time number of | |
DEFINE_FLEX() - Define an on-stack instance of structure with a trailing flexible array member. @TYPE: structure type name, including "struct" keyword. @NAME: Name for a variable to define. @MEMBER: Name of the array member. @COUNTER: Name of the __counted_by member. @COUNT: Number of elements in the array; must be compile-time const. Define a zeroed, on-stack, instance of @TYPE structure with a trailing flexible array member. Use __struct_size(@NAME) to get compile-time size of it afterwards. Use __member_size(@NAME->member) to get compile-time size of @NAME members. Use STACK_FLEX_ARRAY_SIZE( elements in array @member. | |
| #define | DEFINE_RAW_FLEX(type, name, member, count) __DEFINE_FLEX(type, name, member, count, = { }) |
| #define | DEFINE_FLEX(TYPE, NAME, MEMBER, COUNTER, COUNT) _DEFINE_FLEX(TYPE, NAME, MEMBER, COUNT, = { .COUNTER = COUNT, }) |
: Name for a variable defined in DEFINE_RAW_FLEX()/DEFINE_FLEX(). | |
STACK_FLEX_ARRAY_SIZE() - helper macro for DEFINE_FLEX() family. Returns the number of elements in @array. @array: Name of the array member. | |
| #define | STACK_FLEX_ARRAY_SIZE(name, array) |
| #define | typeof_flex_counter(FAM) |
| #define | overflows_flex_counter_type(TYPE, FAM, COUNT) (overflows_type(COUNT, typeof_flex_counter(((TYPE *)NULL)->FAM))) |
| #define | __set_flex_counter(FAM, COUNT) |
| #define __DEFINE_FLEX | ( | type, | |
| name, | |||
| member, | |||
| count, | |||
| trailer... | |||
| ) |
| #define __overflows_type | ( | x, | |
| T | |||
| ) |
| #define __overflows_type_constexpr | ( | x, | |
| T | |||
| ) |
| #define __set_flex_counter | ( | FAM, | |
| COUNT | |||
| ) |
__set_flex_counter() - Set the counter associated with the given flexible array member that has been annoated by __counted_by(). @FAM: Instance of flexible array member within a given struct. @COUNT: Value to store to the __counted_by annotated @FAM_PTR's counter.
This is a no-op if no annotation exists. Count needs to be checked with overflows_flex_counter_type() before using this function.
| #define __type_half_max | ( | type | ) | ((type)1 << (8*sizeof(type) - 1 - is_signed_type(type))) |
| #define __type_max | ( | T | ) | ((T)((__type_half_max(T) - 1) + __type_half_max(T))) |
| #define __type_min | ( | T | ) | ((T)((T)-type_max(T)-(T)1)) |
| #define _DEFINE_FLEX | ( | type, | |
| name, | |||
| member, | |||
| count, | |||
| initializer... | |||
| ) | __DEFINE_FLEX(type, name, member, count, = { .obj initializer }) |
array3_size() - Calculate size of 3-dimensional array. : dimension one : dimension two : dimension three
Calculates size of 3-dimensional array: * * .
Returns: number of bytes needed to represent the array or SIZE_MAX on overflow.
array_size() - Calculate size of 2-dimensional array. : dimension one : dimension two
Calculates size of 2-dimensional array: * .
Returns: number of bytes needed to represent the array or SIZE_MAX on overflow.
| #define castable_to_type | ( | n, | |
| T | |||
| ) |
castable_to_type - like __same_type(), but also allows for casted literals
: variable or constant value @T: variable or data type
Unlike the __same_type() macro, this allows a constant value as the first argument. If this value would not overflow into an assignment of the second argument's type, it returns true. Otherwise, this falls back to __same_type().
check_add_overflow() - Calculate addition with overflow checking : first addend : second addend @d: pointer to store sum
Returns true on wrap-around, false otherwise.
*@d holds the results of the attempted addition, regardless of whether wrap-around occurred.
check_mul_overflow() - Calculate multiplication with overflow checking : first factor : second factor @d: pointer to store product
Returns true on wrap-around, false otherwise.
*@d holds the results of the attempted multiplication, regardless of whether wrap-around occurred.
check_shl_overflow() - Calculate a left-shifted value and check overflow : Value to be shifted @s: How many bits left to shift @d: Pointer to where to store the result
Computes *@d = (<< @s)
Returns true if '*@d' cannot hold the result or when '<< @s' doesn't make sense. Example conditions:
'*@d' will hold the results of the attempted shift, but is not considered "safe for use" if true is returned.
check_sub_overflow() - Calculate subtraction with overflow checking : minuend; value to subtract from : subtrahend; value to subtract from @d : pointer to store difference
Returns true on wrap-around, false otherwise.
*@d holds the results of the attempted subtraction, regardless of whether wrap-around occurred.
| #define DEFINE_FLEX | ( | TYPE, | |
| NAME, | |||
| MEMBER, | |||
| COUNTER, | |||
| COUNT | |||
| ) | _DEFINE_FLEX(TYPE, NAME, MEMBER, COUNT, = { .COUNTER = COUNT, }) |
| #define DEFINE_RAW_FLEX | ( | type, | |
| name, | |||
| member, | |||
| count | |||
| ) | __DEFINE_FLEX(type, name, member, count, = { }) |
| #define flex_array_size | ( | p, | |
| member, | |||
| count | |||
| ) |
flex_array_size() - Calculate size of a flexible array member within an enclosing structure. : Pointer to the structure. @member: Name of the flexible array member. @count: Number of elements in the array.
Calculates size of a flexible array of @count number of @member elements, at the end of structure .
Return: number of bytes needed or SIZE_MAX on overflow.
| #define overflows_flex_counter_type | ( | TYPE, | |
| FAM, | |||
| COUNT | |||
| ) | (overflows_type(COUNT, typeof_flex_counter(((TYPE *)NULL)->FAM))) |
overflows_flex_counter_type() - Check if the counter associated with the given flexible array member can represent a value. @TYPE: Type of the struct that contains the @FAM. @FAM: Member name of the FAM within @TYPE. @COUNT: Value to check against the __counted_by annotated @FAM's counter.
Returns: true if @COUNT can be represented in the @FAM's counter. When @FAM is not annotated with __counted_by(), always returns true.
| #define overflows_type | ( | n, | |
| T | |||
| ) |
overflows_type - helper for checking the overflows between value, variables, or data type
: source constant value or variable to be checked @T: destination variable or data type proposed to store @x
Compares the @x expression for whether or not it can safely fit in the storage of the type in @T. @x and @T can have different types. If @x is a constant expression, this will also resolve to a constant expression.
Returns: true if overflow can occur, false otherwise.
range_end_overflows() - Check if a range's endpoint is out of bounds @start: Start of the range. @size: Size of the range. @max: Exclusive upper boundary.
Checks only if the endpoint of a range (@start + @size) exceeds @max. Unlike range_overflows(), a zero-sized range at the boundary (@start == @max) is not considered an overflow. Useful for iterator-style checks.
Returns: true if the endpoint exceeds the boundary.
| #define range_end_overflows_t | ( | type, | |
| start, | |||
| size, | |||
| max | |||
| ) | range_end_overflows((type)(start), (type)(size), (type)(max)) |
range_end_overflows_t() - Check if a range's endpoint is out of bounds @type: Data type to use. @start: Start of the range. @size: Size of the range. @max: Exclusive upper boundary.
Same as range_end_overflows() but forcing the parameters to @type.
Returns: true if the endpoint exceeds the boundary.
range_overflows() - Check if a range is out of bounds @start: Start of the range. @size: Size of the range. @max: Exclusive upper boundary.
A strict check to determine if the range [@start, @start + @size) is invalid with respect to the allowable range [0, @max). Any range starting at or beyond @max is considered an overflow, even if @size is 0.
Returns: true if the range is out of bounds.
| #define range_overflows_t | ( | type, | |
| start, | |||
| size, | |||
| max | |||
| ) | range_overflows((type)(start), (type)(size), (type)(max)) |
range_overflows_t() - Check if a range is out of bounds @type: Data type to use. @start: Start of the range. @size: Size of the range. @max: Exclusive upper boundary.
Same as range_overflows() but forcing the parameters to @type.
Returns: true if the range is out of bounds.
| #define struct_offset | ( | p, | |
| member | |||
| ) | (offsetof(typeof(*(p)), member)) |
struct_offset() - Calculate the offset of a member within a struct : Pointer to the struct @member: Name of the member to get the offset of
Calculates the offset of a particular @member of the structure pointed to by .
Return: number of bytes to the location of @member.
| #define struct_size | ( | p, | |
| member, | |||
| count | |||
| ) |
struct_size() - Calculate size of structure with trailing flexible array. : Pointer to the structure. @member: Name of the array member. @count: Number of elements in the array.
Calculates size of memory needed for structure of followed by an array of @count number of @member elements.
Return: number of bytes needed or SIZE_MAX on overflow.
| #define struct_size_t | ( | type, | |
| member, | |||
| count | |||
| ) | struct_size((type *)NULL, member, count) |
struct_size_t() - Calculate size of structure with trailing flexible array @type: structure type name. @member: Name of the array member. @count: Number of elements in the array.
Calculates size of memory needed for structure @type followed by an array of @count number of @member elements. Prefer using struct_size() when possible instead, to keep calculations associated with a specific instance variable of type @type.
Return: number of bytes needed or SIZE_MAX on overflow.
| #define type_max | ( | t | ) | __type_max(typeof(t)) |
| #define type_min | ( | t | ) | __type_min(typeof(t)) |
| #define typeof_flex_counter | ( | FAM | ) |
typeof_flex_counter() - Return the type of the counter variable of a given flexible array member annotated by __counted_by(). @FAM: Instance of flexible array member within a given struct.
Returns: "size_t" if no annotation exists.
wrapping_add() - Intentionally perform a wrapping addition @type: type for result of calculation : first addend : second addend
Return the potentially wrapped-around addition without tripping any wrap-around sanitizers that may be enabled.
| #define wrapping_assign_add | ( | var, | |
| offset | |||
| ) |
| #define wrapping_assign_sub | ( | var, | |
| offset | |||
| ) |
wrapping_mul() - Intentionally perform a wrapping multiplication @type: type for result of calculation : first factor : second factor
Return the potentially wrapped-around multiplication without tripping any wrap-around sanitizers that may be enabled.
wrapping_sub() - Intentionally perform a wrapping subtraction @type: type for result of calculation : minuend; value to subtract from : subtrahend; value to subtract from
Return the potentially wrapped-around subtraction without tripping any wrap-around sanitizers that may be enabled.