diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-06-12 06:52:58 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-06-12 06:52:58 -0700 |
commit | 547e1d5b6bf8945ecc3f680bd2dbd88bc4da56d5 (patch) | |
tree | 33866a5f68be66d86c1058d46a5ec95b82853c7b /lib.c | |
parent | 45ae26abca02ae71d46fd4baa2fba1a0b311e816 (diff) | |
download | txr-547e1d5b6bf8945ecc3f680bd2dbd88bc4da56d5.tar.gz txr-547e1d5b6bf8945ecc3f680bd2dbd88bc4da56d5.tar.bz2 txr-547e1d5b6bf8945ecc3f680bd2dbd88bc4da56d5.zip |
lib: new chk_xalloc, with mult overflow check.
This will simplify code that allocates an array-like
object whose size is the product of two numbers.
* lib.c (chk_xalloc): New function.
* lib.h (chk_xalloc): Declared.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -2699,6 +2699,18 @@ mem_t *chk_copy_obj(mem_t *orig, size_t size) return copy; } +mem_t *chk_xalloc(ucnum m, ucnum n, val self) +{ + ucnum mn = m * n; + size_t size = mn; + + if ((m > 0 && mn / m != n) || (ucnum) size != mn) + uw_throwf(error_s, lit("~s: memory allocation size overflow"), + self, nao); + + return chk_malloc(size); +} + val cons(val car, val cdr) { val obj; |