Commit 5dc1c71d authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Jim Harris
Browse files

util: add SPDK_FIELD_VALID() macro



It's similar to SPDK_GET_FIELD(), but can be used to test whether a
given field is valid.

Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Ib35691e9d1d3a3daae9657cafbc2dd778dbf2751
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23801


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 3578b28c
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -67,6 +67,16 @@ extern "C" {

#define SPDK_BIT(n) (1ul << (n))

/**
 * Check if a given field is valid in a structure with size tracking. The third
 * parameter is optional and can be used to specify the size of the object.  If
 * unset, (obj)->size will be used by default.
 */
#define SPDK_FIELD_VALID(obj, field, ...) \
	_SPDK_FIELD_VALID(obj, field, ## __VA_ARGS__, (obj)->size)

#define _SPDK_FIELD_VALID(obj, field, size, ...) \
	((size) >= (offsetof(__typeof__(*(obj)), field) + sizeof((obj)->field)))
/**
 * Get a field from a structure with size tracking.  The fourth parameter is
 * optional and can be used to specify the size of the object.  If unset,
@@ -76,8 +86,7 @@ extern "C" {
	_SPDK_GET_FIELD(obj, field, defval, ## __VA_ARGS__, (obj)->size)

#define _SPDK_GET_FIELD(obj, field, defval, size, ...) \
	((size) >= (offsetof(__typeof__(*(obj)), field) + sizeof((obj)->field)) ? \
	 (obj)->field : (defval))
	(SPDK_FIELD_VALID(obj, field, size) ? (obj)->field : (defval))

uint32_t spdk_u32log2(uint32_t x);