xref: /openbsd/sys/dev/pci/drm/include/linux/overflow.h (revision 8e54c6d8)
17f4dd379Sjsg /* Public domain. */
27f4dd379Sjsg 
37f4dd379Sjsg #ifndef _LINUX_OVERFLOW_H
47f4dd379Sjsg #define _LINUX_OVERFLOW_H
57f4dd379Sjsg 
67f4dd379Sjsg #define array_size(x, y)	((x) * (y))
77f4dd379Sjsg 
8c349dbc7Sjsg #define struct_size(p, member, n) \
9c349dbc7Sjsg 	(sizeof(*(p)) + ((n) * (sizeof(*(p)->member))))
10c349dbc7Sjsg 
114d3df292Sjsg #if defined(__clang__) || (defined(__GNUC__) && __GNUC__ >= 5)
124d3df292Sjsg #define check_add_overflow(x, y, sum)	__builtin_add_overflow(x, y, sum)
13*8e54c6d8Sjsg #define check_mul_overflow(x, y, z)	__builtin_mul_overflow(x, y, z)
14*8e54c6d8Sjsg #else
15*8e54c6d8Sjsg #define check_mul_overflow(x, y, z) ({		\
16*8e54c6d8Sjsg 	*(z) = (x) * (y);			\
17*8e54c6d8Sjsg 	0;					\
18*8e54c6d8Sjsg })
194d3df292Sjsg #endif
204d3df292Sjsg 
217f4dd379Sjsg #endif
22