Add saturate_add() that generalizes size_add()

This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2022-05-12 17:15:51 +02:00
parent d1b8e56a62
commit 8b0c43475a
2 changed files with 17 additions and 1 deletions
+8 -1
View File
@@ -457,8 +457,15 @@ static inline int __coverity_check_and_return__(int condition) {
_copy; \
})
#define saturate_add(x, y, limit) \
({ \
typeof(limit) _x = (x); \
typeof(limit) _y = (y); \
_x > (limit) || _y >= (limit) - _x ? (limit) : _x + _y; \
})
static inline size_t size_add(size_t x, size_t y) {
return y >= SIZE_MAX - x ? SIZE_MAX : x + y;
return saturate_add(x, y, SIZE_MAX);
}
typedef struct {