]> andersk Git - openssh.git/blobdiff - xmalloc.c
- djm@cvs.openbsd.org 2010/01/30 02:54:53
[openssh.git] / xmalloc.c
index 6d56781d921925df514608aacad1db30f9824a9b..9985b4cc2a3494cc89c1c6e3242b95de88712246 100644 (file)
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -1,3 +1,4 @@
+/* $OpenBSD: xmalloc.c,v 1.27 2006/08/03 03:34:42 deraadt Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
 
 #include "includes.h"
 
+#include <sys/param.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
 #include "xmalloc.h"
 #include "log.h"
 
@@ -35,10 +42,10 @@ xcalloc(size_t nmemb, size_t size)
 {
        void *ptr;
 
-        if (nmemb && size && SIZE_T_MAX / nmemb < size)
-               fatal("xcalloc: nmemb * size > SIZE_T_MAX");
        if (size == 0 || nmemb == 0)
                fatal("xcalloc: zero size");
+       if (SIZE_T_MAX / nmemb < size)
+               fatal("xcalloc: nmemb * size > SIZE_T_MAX");
        ptr = calloc(nmemb, size);
        if (ptr == NULL)
                fatal("xcalloc: out of memory (allocating %lu bytes)",
@@ -47,18 +54,22 @@ xcalloc(size_t nmemb, size_t size)
 }
 
 void *
-xrealloc(void *ptr, size_t new_size)
+xrealloc(void *ptr, size_t nmemb, size_t size)
 {
        void *new_ptr;
+       size_t new_size = nmemb * size;
 
        if (new_size == 0)
                fatal("xrealloc: zero size");
+       if (SIZE_T_MAX / nmemb < size)
+               fatal("xrealloc: nmemb * size > SIZE_T_MAX");
        if (ptr == NULL)
                new_ptr = malloc(new_size);
        else
                new_ptr = realloc(ptr, new_size);
        if (new_ptr == NULL)
-               fatal("xrealloc: out of memory (new_size %lu bytes)", (u_long) new_size);
+               fatal("xrealloc: out of memory (new_size %lu bytes)",
+                   (u_long) new_size);
        return new_ptr;
 }
 
This page took 2.46601 seconds and 4 git commands to generate.