1322249Sbapt/* $Id: mandoc_aux.c,v 1.10 2017/06/12 19:05:47 schwarze Exp $ */ 2274876Sbapt/* 3274876Sbapt * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4322249Sbapt * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> 5274876Sbapt * 6274876Sbapt * Permission to use, copy, modify, and distribute this software for any 7274876Sbapt * purpose with or without fee is hereby granted, provided that the above 8274876Sbapt * copyright notice and this permission notice appear in all copies. 9274876Sbapt * 10274876Sbapt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES 11274876Sbapt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12274876Sbapt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR 13274876Sbapt * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14274876Sbapt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15274876Sbapt * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16274876Sbapt * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17274876Sbapt */ 18274876Sbapt#include "config.h" 19274876Sbapt 20274876Sbapt#include <sys/types.h> 21274876Sbapt 22294113Sbapt#if HAVE_ERR 23294113Sbapt#include <err.h> 24294113Sbapt#endif 25274876Sbapt#include <stdarg.h> 26274876Sbapt#include <stdlib.h> 27274876Sbapt#include <stdio.h> 28274876Sbapt#include <string.h> 29274876Sbapt 30274876Sbapt#include "mandoc.h" 31274876Sbapt#include "mandoc_aux.h" 32274876Sbapt 33294113Sbapt 34274876Sbaptint 35274876Sbaptmandoc_asprintf(char **dest, const char *fmt, ...) 36274876Sbapt{ 37274876Sbapt va_list ap; 38274876Sbapt int ret; 39274876Sbapt 40274876Sbapt va_start(ap, fmt); 41274876Sbapt ret = vasprintf(dest, fmt, ap); 42274876Sbapt va_end(ap); 43274876Sbapt 44294113Sbapt if (ret == -1) 45294113Sbapt err((int)MANDOCLEVEL_SYSERR, NULL); 46294113Sbapt return ret; 47274876Sbapt} 48274876Sbapt 49274876Sbaptvoid * 50274876Sbaptmandoc_calloc(size_t num, size_t size) 51274876Sbapt{ 52274876Sbapt void *ptr; 53274876Sbapt 54274876Sbapt ptr = calloc(num, size); 55294113Sbapt if (ptr == NULL) 56294113Sbapt err((int)MANDOCLEVEL_SYSERR, NULL); 57294113Sbapt return ptr; 58274876Sbapt} 59274876Sbapt 60274876Sbaptvoid * 61274876Sbaptmandoc_malloc(size_t size) 62274876Sbapt{ 63274876Sbapt void *ptr; 64274876Sbapt 65274876Sbapt ptr = malloc(size); 66294113Sbapt if (ptr == NULL) 67294113Sbapt err((int)MANDOCLEVEL_SYSERR, NULL); 68294113Sbapt return ptr; 69274876Sbapt} 70274876Sbapt 71274876Sbaptvoid * 72274876Sbaptmandoc_realloc(void *ptr, size_t size) 73274876Sbapt{ 74274876Sbapt ptr = realloc(ptr, size); 75294113Sbapt if (ptr == NULL) 76294113Sbapt err((int)MANDOCLEVEL_SYSERR, NULL); 77294113Sbapt return ptr; 78274876Sbapt} 79274876Sbapt 80274876Sbaptvoid * 81274876Sbaptmandoc_reallocarray(void *ptr, size_t num, size_t size) 82274876Sbapt{ 83274876Sbapt ptr = reallocarray(ptr, num, size); 84294113Sbapt if (ptr == NULL) 85294113Sbapt err((int)MANDOCLEVEL_SYSERR, NULL); 86294113Sbapt return ptr; 87274876Sbapt} 88274876Sbapt 89322249Sbaptvoid * 90322249Sbaptmandoc_recallocarray(void *ptr, size_t oldnum, size_t num, size_t size) 91322249Sbapt{ 92322249Sbapt ptr = recallocarray(ptr, oldnum, num, size); 93322249Sbapt if (ptr == NULL) 94322249Sbapt err((int)MANDOCLEVEL_SYSERR, NULL); 95322249Sbapt return ptr; 96322249Sbapt} 97322249Sbapt 98274876Sbaptchar * 99274876Sbaptmandoc_strdup(const char *ptr) 100274876Sbapt{ 101274876Sbapt char *p; 102274876Sbapt 103274876Sbapt p = strdup(ptr); 104294113Sbapt if (p == NULL) 105294113Sbapt err((int)MANDOCLEVEL_SYSERR, NULL); 106294113Sbapt return p; 107274876Sbapt} 108274876Sbapt 109274876Sbaptchar * 110274876Sbaptmandoc_strndup(const char *ptr, size_t sz) 111274876Sbapt{ 112274876Sbapt char *p; 113274876Sbapt 114274876Sbapt p = mandoc_malloc(sz + 1); 115274876Sbapt memcpy(p, ptr, sz); 116274876Sbapt p[(int)sz] = '\0'; 117294113Sbapt return p; 118274876Sbapt} 119