summaryrefslogtreecommitdiff
path: root/src/math.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/math.c')
-rw-r--r--src/math.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/math.c b/src/math.c
index 366bd5e..4e9fee0 100644
--- a/src/math.c
+++ b/src/math.c
@@ -1,6 +1,7 @@
#include "config.h"
#include <assert.h>
+#include <errno.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
@@ -9,8 +10,23 @@
int
+add_size(const size_t x, const size_t y, size_t *const out) {
+ int rc = EOVERFLOW;
+
+ const bool overflows = (SIZE_MAX - x) < y;
+ if (overflows) {
+ goto out;
+ }
+
+ *out = x + y;
+ rc = 0;
+out:
+ return rc;
+}
+
+int
mul_size(const size_t x, const size_t y, size_t *const out) {
- int rc = -1;
+ int rc = EOVERFLOW;
assert(x != 0U);
assert(y != 0U);