Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libc/stdlib Revert prior, no idea why it was causing me ...



details:   https://anonhg.NetBSD.org/src/rev/7f5a86683d37
branches:  trunk
changeset: 344601:7f5a86683d37
user:      roy <roy%NetBSD.org@localhost>
date:      Wed Apr 06 11:07:58 2016 +0000

description:
Revert prior, no idea why it was causing me problems, but it no longer does.

diffstat:

 lib/libc/stdlib/reallocarray.c |  28 +++++++++++-----------------
 1 files changed, 11 insertions(+), 17 deletions(-)

diffs (49 lines):

diff -r c837bf76b4cc -r 7f5a86683d37 lib/libc/stdlib/reallocarray.c
--- a/lib/libc/stdlib/reallocarray.c    Wed Apr 06 09:57:00 2016 +0000
+++ b/lib/libc/stdlib/reallocarray.c    Wed Apr 06 11:07:58 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: reallocarray.c,v 1.6 2016/04/05 15:01:26 roy Exp $     */
+/*     $NetBSD: reallocarray.c,v 1.7 2016/04/06 11:07:58 roy Exp $     */
 /*     $OpenBSD: reallocarray.c,v 1.1 2014/05/08 21:43:49 deraadt Exp $        */
 
 /*-
@@ -31,29 +31,23 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: reallocarray.c,v 1.6 2016/04/05 15:01:26 roy Exp $");
+__RCSID("$NetBSD: reallocarray.c,v 1.7 2016/04/06 11:07:58 roy Exp $");
 
 #define _OPENBSD_SOURCE
 #include <errno.h>
-#include <limits.h>
 #include <stdlib.h>
 
-#define SQRT_SIZE_MAX (((size_t)1) << (sizeof(size_t) * CHAR_BIT / 2))
 void *
 reallocarray(void *optr, size_t nmemb, size_t size)
 {
+       int e;
 
-       /*
-        * Try to avoid division here.
-        *
-        * It isn't possible to overflow during multiplication if neither
-        * operand uses any of the most significant half of the bits.
-        */
-       if (__predict_false((nmemb | size) >= SQRT_SIZE_MAX &&
-                           nmemb > SIZE_MAX / size))
-       {
-               errno = EOVERFLOW;
-               return NULL;
-       }
-       return realloc(optr, nmemb * size);
+       if (nmemb == 0 || size == 0)
+               return realloc(optr, 0);
+
+       e = reallocarr(&optr, nmemb, size);
+       if (e == 0)
+               return optr;
+       errno = e;
+       return NULL;
 }



Home | Main Index | Thread Index | Old Index