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