1 /* Public domain. */
2 
3 #ifndef _LINUX_OVERFLOW_H
4 #define _LINUX_OVERFLOW_H
5 
6 #define array_size(x, y)	((x) * (y))
7 
8 #define struct_size(p, member, n) \
9 	(sizeof(*(p)) + ((n) * (sizeof(*(p)->member))))
10 
11 #if defined(__clang__) || (defined(__GNUC__) && __GNUC__ >= 5)
12 #define check_add_overflow(x, y, sum)	__builtin_add_overflow(x, y, sum)
13 #define check_sub_overflow(x, y, z)	__builtin_sub_overflow(x, y, z)
14 #define check_mul_overflow(x, y, z)	__builtin_mul_overflow(x, y, z)
15 #else
16 #define check_mul_overflow(x, y, z) ({		\
17 	*(z) = (x) * (y);			\
18 	0;					\
19 })
20 #endif
21 
22 #endif
23