2929#endif
3030
3131#if use_builtin (__builtin_add_overflow )
32+ static inline bool u16_add_overflow (u16_t a , u16_t b , u16_t * result )
33+ {
34+ return __builtin_add_overflow (a , b , result );
35+ }
36+
3237static inline bool u32_add_overflow (u32_t a , u32_t b , u32_t * result )
3338{
3439 return __builtin_add_overflow (a , b , result );
@@ -44,6 +49,15 @@ static inline bool size_add_overflow(size_t a, size_t b, size_t *result)
4449 return __builtin_add_overflow (a , b , result );
4550}
4651#else /* !use_builtin(__builtin_add_overflow) */
52+ static inline bool u16_add_overflow (u16_t a , u16_t b , u16_t * result )
53+ {
54+ u16_t c = a + b ;
55+
56+ * result = c ;
57+
58+ return c < a ;
59+ }
60+
4761static inline bool u32_add_overflow (u32_t a , u32_t b , u32_t * result )
4862{
4963 u32_t c = a + b ;
@@ -73,6 +87,11 @@ static inline bool size_add_overflow(size_t a, size_t b, size_t *result)
7387#endif /* use_builtin(__builtin_add_overflow) */
7488
7589#if use_builtin (__builtin_mul_overflow )
90+ static inline bool u16_mul_overflow (u16_t a , u16_t b , u16_t * result )
91+ {
92+ return __builtin_mul_overflow (a , b , result );
93+ }
94+
7695static inline bool u32_mul_overflow (u32_t a , u32_t b , u32_t * result )
7796{
7897 return __builtin_mul_overflow (a , b , result );
@@ -88,6 +107,15 @@ static inline bool size_mul_overflow(size_t a, size_t b, size_t *result)
88107 return __builtin_mul_overflow (a , b , result );
89108}
90109#else /* !use_builtin(__builtin_mul_overflow) */
110+ static inline bool u16_mul_overflow (u16_t a , u16_t b , u16_t * result )
111+ {
112+ u16_t c = a * b ;
113+
114+ * result = c ;
115+
116+ return a != 0 && (c / a ) != b ;
117+ }
118+
91119static inline bool u32_mul_overflow (u32_t a , u32_t b , u32_t * result )
92120{
93121 u32_t c = a * b ;
0 commit comments