1784bddbcSKevin Lo /* $FreeBSD$ */ 29d62501fSDavid E. O'Brien /* $NetBSD: ealloc.c,v 1.1.1.1 1999/11/19 04:30:56 mrg Exp $ */ 39d62501fSDavid E. O'Brien 49d62501fSDavid E. O'Brien /* 59d62501fSDavid E. O'Brien * Copyright (c) 1988, 1989, 1990, 1993 69d62501fSDavid E. O'Brien * The Regents of the University of California. All rights reserved. 79d62501fSDavid E. O'Brien * Copyright (c) 1989 by Berkeley Softworks 89d62501fSDavid E. O'Brien * All rights reserved. 99d62501fSDavid E. O'Brien * 109d62501fSDavid E. O'Brien * This code is derived from software contributed to Berkeley by 119d62501fSDavid E. O'Brien * Adam de Boor. 129d62501fSDavid E. O'Brien * 139d62501fSDavid E. O'Brien * Redistribution and use in source and binary forms, with or without 149d62501fSDavid E. O'Brien * modification, are permitted provided that the following conditions 159d62501fSDavid E. O'Brien * are met: 169d62501fSDavid E. O'Brien * 1. Redistributions of source code must retain the above copyright 179d62501fSDavid E. O'Brien * notice, this list of conditions and the following disclaimer. 189d62501fSDavid E. O'Brien * 2. Redistributions in binary form must reproduce the above copyright 199d62501fSDavid E. O'Brien * notice, this list of conditions and the following disclaimer in the 209d62501fSDavid E. O'Brien * documentation and/or other materials provided with the distribution. 219d62501fSDavid E. O'Brien * 3. All advertising materials mentioning features or use of this software 229d62501fSDavid E. O'Brien * must display the following acknowledgement: 239d62501fSDavid E. O'Brien * This product includes software developed by the University of 249d62501fSDavid E. O'Brien * California, Berkeley and its contributors. 259d62501fSDavid E. O'Brien * 4. Neither the name of the University nor the names of its contributors 269d62501fSDavid E. O'Brien * may be used to endorse or promote products derived from this software 279d62501fSDavid E. O'Brien * without specific prior written permission. 289d62501fSDavid E. O'Brien * 299d62501fSDavid E. O'Brien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 309d62501fSDavid E. O'Brien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 319d62501fSDavid E. O'Brien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 329d62501fSDavid E. O'Brien * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 339d62501fSDavid E. O'Brien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 349d62501fSDavid E. O'Brien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 359d62501fSDavid E. O'Brien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 369d62501fSDavid E. O'Brien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 379d62501fSDavid E. O'Brien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 389d62501fSDavid E. O'Brien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 399d62501fSDavid E. O'Brien * SUCH DAMAGE. 409d62501fSDavid E. O'Brien */ 419d62501fSDavid E. O'Brien 429d62501fSDavid E. O'Brien #include <sys/cdefs.h> 439d62501fSDavid E. O'Brien #ifndef lint 449d62501fSDavid E. O'Brien __RCSID("$NetBSD: ealloc.c,v 1.1.1.1 1999/11/19 04:30:56 mrg Exp $"); 459d62501fSDavid E. O'Brien #endif /* not lint */ 469d62501fSDavid E. O'Brien 479d62501fSDavid E. O'Brien #include <stdio.h> 489d62501fSDavid E. O'Brien #include <stdlib.h> 499d62501fSDavid E. O'Brien #include <string.h> 509d62501fSDavid E. O'Brien #include <err.h> 519d62501fSDavid E. O'Brien 529d62501fSDavid E. O'Brien #include "ealloc.h" 539d62501fSDavid E. O'Brien 54784bddbcSKevin Lo static void enomem(void); 559d62501fSDavid E. O'Brien 569d62501fSDavid E. O'Brien /* 579d62501fSDavid E. O'Brien * enomem -- 589d62501fSDavid E. O'Brien * die when out of memory. 599d62501fSDavid E. O'Brien */ 609d62501fSDavid E. O'Brien static void 619d62501fSDavid E. O'Brien enomem() 629d62501fSDavid E. O'Brien { 639d62501fSDavid E. O'Brien errx(2, "Cannot allocate memory."); 649d62501fSDavid E. O'Brien } 659d62501fSDavid E. O'Brien 669d62501fSDavid E. O'Brien /* 679d62501fSDavid E. O'Brien * emalloc -- 689d62501fSDavid E. O'Brien * malloc, but die on error. 699d62501fSDavid E. O'Brien */ 709d62501fSDavid E. O'Brien void * 719d62501fSDavid E. O'Brien emalloc(len) 729d62501fSDavid E. O'Brien size_t len; 739d62501fSDavid E. O'Brien { 749d62501fSDavid E. O'Brien void *p; 759d62501fSDavid E. O'Brien 769d62501fSDavid E. O'Brien if ((p = malloc(len)) == NULL) 779d62501fSDavid E. O'Brien enomem(); 789d62501fSDavid E. O'Brien return(p); 799d62501fSDavid E. O'Brien } 809d62501fSDavid E. O'Brien 819d62501fSDavid E. O'Brien /* 829d62501fSDavid E. O'Brien * estrdup -- 839d62501fSDavid E. O'Brien * strdup, but die on error. 849d62501fSDavid E. O'Brien */ 859d62501fSDavid E. O'Brien char * 869d62501fSDavid E. O'Brien estrdup(str) 879d62501fSDavid E. O'Brien const char *str; 889d62501fSDavid E. O'Brien { 899d62501fSDavid E. O'Brien char *p; 909d62501fSDavid E. O'Brien 919d62501fSDavid E. O'Brien if ((p = strdup(str)) == NULL) 929d62501fSDavid E. O'Brien enomem(); 939d62501fSDavid E. O'Brien return(p); 949d62501fSDavid E. O'Brien } 959d62501fSDavid E. O'Brien 969d62501fSDavid E. O'Brien /* 979d62501fSDavid E. O'Brien * erealloc -- 989d62501fSDavid E. O'Brien * realloc, but die on error. 999d62501fSDavid E. O'Brien */ 1009d62501fSDavid E. O'Brien void * 1019d62501fSDavid E. O'Brien erealloc(ptr, size) 1029d62501fSDavid E. O'Brien void *ptr; 1039d62501fSDavid E. O'Brien size_t size; 1049d62501fSDavid E. O'Brien { 1059d62501fSDavid E. O'Brien if ((ptr = realloc(ptr, size)) == NULL) 1069d62501fSDavid E. O'Brien enomem(); 1079d62501fSDavid E. O'Brien return(ptr); 1089d62501fSDavid E. O'Brien } 1099d62501fSDavid E. O'Brien 1109d62501fSDavid E. O'Brien /* 1119d62501fSDavid E. O'Brien * ecalloc -- 1129d62501fSDavid E. O'Brien * calloc, but die on error. 1139d62501fSDavid E. O'Brien */ 1149d62501fSDavid E. O'Brien void * 1159d62501fSDavid E. O'Brien ecalloc(nmemb, size) 1169d62501fSDavid E. O'Brien size_t nmemb; 1179d62501fSDavid E. O'Brien size_t size; 1189d62501fSDavid E. O'Brien { 1199d62501fSDavid E. O'Brien void *ptr; 1209d62501fSDavid E. O'Brien 1219d62501fSDavid E. O'Brien if ((ptr = calloc(nmemb, size)) == NULL) 1229d62501fSDavid E. O'Brien enomem(); 1239d62501fSDavid E. O'Brien return(ptr); 1249d62501fSDavid E. O'Brien } 125