@@ -420,6 +420,8 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
420
420
* flexible array member.
421
421
* Use __struct_size(@name) to get compile-time size of it afterwards.
422
422
* Use __member_size(@name->member) to get compile-time size of @name members.
423
+ * Use STACK_FLEX_ARRAY_SIZE(@name, @member) to get compile-time number of
424
+ * elements in array @member.
423
425
*/
424
426
#define DEFINE_RAW_FLEX (type , name , member , count ) \
425
427
_DEFINE_FLEX(type, name, member, count, = {})
@@ -438,8 +440,21 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
438
440
* flexible array member.
439
441
* Use __struct_size(@NAME) to get compile-time size of it afterwards.
440
442
* Use __member_size(@NAME->member) to get compile-time size of @NAME members.
443
+ * Use STACK_FLEX_ARRAY_SIZE(@name, @member) to get compile-time number of
444
+ * elements in array @member.
441
445
*/
442
446
#define DEFINE_FLEX (TYPE , NAME , MEMBER , COUNTER , COUNT ) \
443
447
_DEFINE_FLEX(TYPE, NAME, MEMBER, COUNT, = { .obj.COUNTER = COUNT, })
444
448
449
+ /**
450
+ * STACK_FLEX_ARRAY_SIZE() - helper macro for DEFINE_FLEX() family.
451
+ * Returns the number of elements in @array.
452
+ *
453
+ * @name: Name for a variable defined in DEFINE_RAW_FLEX()/DEFINE_FLEX().
454
+ * @array: Name of the array member.
455
+ */
456
+ #define STACK_FLEX_ARRAY_SIZE (name , array ) \
457
+ (__member_size((name)->array) / sizeof(*(name)->array) + \
458
+ __must_be_array((name)->array))
459
+
445
460
#endif /* __LINUX_OVERFLOW_H */
0 commit comments