1*4226f635SJason King /* 2*4226f635SJason King * This file and its contents are supplied under the terms of the 3*4226f635SJason King * Common Development and Distribution License ("CDDL"), version 1.0. 4*4226f635SJason King * You may only use this file in accordance with the terms of version 5*4226f635SJason King * 1.0 of the CDDL. 6*4226f635SJason King * 7*4226f635SJason King * A full copy of the text of the CDDL should have accompanied this 8*4226f635SJason King * source. A copy of the CDDL is also available via the Internet at 9*4226f635SJason King * http://www.illumos.org/license/CDDL. 10*4226f635SJason King */ 11*4226f635SJason King 12*4226f635SJason King /* 13*4226f635SJason King * Copyright 2017 Jason King 14*4226f635SJason King */ 15*4226f635SJason King 16*4226f635SJason King #include <sys/debug.h> 17*4226f635SJason King #include <stdlib.h> 18*4226f635SJason King #include <string.h> 19*4226f635SJason King #include "demangle-sys.h" 20*4226f635SJason King #include "demangle_int.h" 21*4226f635SJason King 22*4226f635SJason King void * 23*4226f635SJason King zalloc(sysdem_ops_t *ops, size_t len) 24*4226f635SJason King { 25*4226f635SJason King void *p = ops->alloc(len); 26*4226f635SJason King 27*4226f635SJason King if (p != NULL) 28*4226f635SJason King (void) memset(p, 0, len); 29*4226f635SJason King 30*4226f635SJason King #ifdef DEBUG 31*4226f635SJason King /* 32*4226f635SJason King * In normal operation, we should never exhaust memory. Either 33*4226f635SJason King * something's wrong, or the system is so hosed that aborting 34*4226f635SJason King * shouldn't hurt anything, and it gives us a more useful stack 35*4226f635SJason King * trace. 36*4226f635SJason King */ 37*4226f635SJason King if (p == NULL) 38*4226f635SJason King abort(); 39*4226f635SJason King #endif 40*4226f635SJason King 41*4226f635SJason King return (p); 42*4226f635SJason King } 43*4226f635SJason King 44*4226f635SJason King void 45*4226f635SJason King xfree(sysdem_ops_t *ops, void *p, size_t len) 46*4226f635SJason King { 47*4226f635SJason King if (p == NULL || len == 0) 48*4226f635SJason King return; 49*4226f635SJason King 50*4226f635SJason King ops->free(p, len); 51*4226f635SJason King } 52*4226f635SJason King 53*4226f635SJason King void * 54*4226f635SJason King xrealloc(sysdem_ops_t *ops, void *p, size_t oldsz, size_t newsz) 55*4226f635SJason King { 56*4226f635SJason King if (newsz == oldsz) 57*4226f635SJason King return (p); 58*4226f635SJason King 59*4226f635SJason King VERIFY3U(newsz, >, oldsz); 60*4226f635SJason King 61*4226f635SJason King void *temp = zalloc(ops, newsz); 62*4226f635SJason King 63*4226f635SJason King if (temp == NULL) 64*4226f635SJason King return (NULL); 65*4226f635SJason King 66*4226f635SJason King if (oldsz > 0) { 67*4226f635SJason King (void) memcpy(temp, p, oldsz); 68*4226f635SJason King xfree(ops, p, oldsz); 69*4226f635SJason King } 70*4226f635SJason King 71*4226f635SJason King return (temp); 72*4226f635SJason King } 73*4226f635SJason King 74*4226f635SJason King /*ARGSUSED*/ 75*4226f635SJason King static void 76*4226f635SJason King def_free(void *p, size_t len) 77*4226f635SJason King { 78*4226f635SJason King free(p); 79*4226f635SJason King } 80*4226f635SJason King 81*4226f635SJason King static sysdem_ops_t i_sysdem_ops_default = { 82*4226f635SJason King .alloc = malloc, 83*4226f635SJason King .free = def_free 84*4226f635SJason King }; 85*4226f635SJason King sysdem_ops_t *sysdem_ops_default = &i_sysdem_ops_default; 86