version 1.16, 2001/07/23 18:21:46 |
version 1.16.20.1, 2006/09/30 04:06:51 |
|
|
|
/* $OpenBSD$ */ |
/* |
/* |
* Author: Tatu Ylonen <ylo@cs.hut.fi> |
* Author: Tatu Ylonen <ylo@cs.hut.fi> |
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
|
|
* called by a name other than "ssh" or "Secure Shell". |
* called by a name other than "ssh" or "Secure Shell". |
*/ |
*/ |
|
|
#include "includes.h" |
#include <sys/param.h> |
RCSID("$OpenBSD$"); |
#include <stdarg.h> |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
|
#include "xmalloc.h" |
#include "xmalloc.h" |
#include "log.h" |
#include "log.h" |
|
|
} |
} |
|
|
void * |
void * |
xrealloc(void *ptr, size_t new_size) |
xcalloc(size_t nmemb, size_t size) |
{ |
{ |
|
void *ptr; |
|
|
|
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)", |
|
(u_long)(size * nmemb)); |
|
return ptr; |
|
} |
|
|
|
void * |
|
xrealloc(void *ptr, size_t nmemb, size_t size) |
|
{ |
void *new_ptr; |
void *new_ptr; |
|
size_t new_size = nmemb * size; |
|
|
if (new_size == 0) |
if (new_size == 0) |
fatal("xrealloc: zero size"); |
fatal("xrealloc: zero size"); |
|
if (SIZE_T_MAX / nmemb < size) |
|
fatal("xrealloc: nmemb * size > SIZE_T_MAX"); |
if (ptr == NULL) |
if (ptr == NULL) |
new_ptr = malloc(new_size); |
new_ptr = malloc(new_size); |
else |
else |
new_ptr = realloc(ptr, new_size); |
new_ptr = realloc(ptr, new_size); |
if (new_ptr == NULL) |
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; |
return new_ptr; |
} |
} |
|
|
|
|
cp = xmalloc(len); |
cp = xmalloc(len); |
strlcpy(cp, str, len); |
strlcpy(cp, str, len); |
return cp; |
return cp; |
|
} |
|
|
|
int |
|
xasprintf(char **ret, const char *fmt, ...) |
|
{ |
|
va_list ap; |
|
int i; |
|
|
|
va_start(ap, fmt); |
|
i = vasprintf(ret, fmt, ap); |
|
va_end(ap); |
|
|
|
if (i < 0 || *ret == NULL) |
|
fatal("xasprintf: could not allocate memory"); |
|
|
|
return (i); |
} |
} |