1 /* $NetBSD: mem.c,v 1.19 2021/08/31 17:22:24 rillig Exp $ */ 2 3 /* 4 * Copyright (c) 1994, 1995 Jochen Pohl 5 * All Rights Reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by Jochen Pohl for 18 * The NetBSD Project. 19 * 4. The name of the author may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #if HAVE_NBTOOL_CONFIG_H 35 #include "nbtool_config.h" 36 #endif 37 38 #include <sys/cdefs.h> 39 #if defined(__RCSID) && !defined(lint) 40 __RCSID("$NetBSD: mem.c,v 1.19 2021/08/31 17:22:24 rillig Exp $"); 41 #endif 42 43 #include <stdarg.h> 44 #include <stdlib.h> 45 #include <string.h> 46 #include <unistd.h> 47 48 #include "lint.h" 49 50 #if defined(IS_LINT1) || defined(IS_LINT2) 51 size_t 52 mem_block_size(void) 53 { 54 unsigned int pagesize; 55 56 pagesize = (unsigned int)getpagesize(); 57 return (MBLKSIZ + pagesize - 1) / pagesize * pagesize; 58 } 59 #endif 60 61 static void * 62 not_null(void *ptr) 63 { 64 65 if (ptr == NULL) 66 errx(1, "virtual memory exhausted"); 67 return ptr; 68 } 69 70 void * 71 xmalloc(size_t s) 72 { 73 74 return not_null(malloc(s)); 75 } 76 77 void * 78 xcalloc(size_t n, size_t s) 79 { 80 81 return not_null(calloc(n, s)); 82 } 83 84 void * 85 xrealloc(void *p, size_t s) 86 { 87 88 return not_null(realloc(p, s)); 89 } 90 91 char * 92 xstrdup(const char *s) 93 { 94 95 return not_null(strdup(s)); 96 } 97 98 #if defined(IS_XLINT) 99 char * 100 xasprintf(const char *fmt, ...) 101 { 102 char *str; 103 int e; 104 va_list ap; 105 106 va_start(ap, fmt); 107 e = vasprintf(&str, fmt, ap); 108 va_end(ap); 109 if (e < 0) 110 (void)not_null(NULL); 111 return str; 112 } 113 #endif 114