xref: /illumos-gate/usr/src/cmd/mandoc/mandoc_aux.c (revision 6640c13b)
1*6640c13bSYuri Pankov /*	$Id: mandoc_aux.c,v 1.11 2018/02/07 20:04:57 schwarze Exp $ */
2260e9a87SYuri Pankov /*
3260e9a87SYuri Pankov  * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4c66b8046SYuri Pankov  * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
5260e9a87SYuri Pankov  *
6260e9a87SYuri Pankov  * Permission to use, copy, modify, and distribute this software for any
7260e9a87SYuri Pankov  * purpose with or without fee is hereby granted, provided that the above
8260e9a87SYuri Pankov  * copyright notice and this permission notice appear in all copies.
9260e9a87SYuri Pankov  *
10260e9a87SYuri Pankov  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
11260e9a87SYuri Pankov  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12260e9a87SYuri Pankov  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
13260e9a87SYuri Pankov  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14260e9a87SYuri Pankov  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15260e9a87SYuri Pankov  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16260e9a87SYuri Pankov  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17260e9a87SYuri Pankov  */
18260e9a87SYuri Pankov #include "config.h"
19260e9a87SYuri Pankov 
20260e9a87SYuri Pankov #include <sys/types.h>
21260e9a87SYuri Pankov 
22371584c2SYuri Pankov #if HAVE_ERR
23371584c2SYuri Pankov #include <err.h>
24371584c2SYuri Pankov #endif
25260e9a87SYuri Pankov #include <stdarg.h>
26260e9a87SYuri Pankov #include <stdlib.h>
27260e9a87SYuri Pankov #include <stdio.h>
28260e9a87SYuri Pankov #include <string.h>
29260e9a87SYuri Pankov 
30260e9a87SYuri Pankov #include "mandoc.h"
31260e9a87SYuri Pankov #include "mandoc_aux.h"
32260e9a87SYuri Pankov 
33371584c2SYuri Pankov 
34260e9a87SYuri Pankov int
mandoc_asprintf(char ** dest,const char * fmt,...)35260e9a87SYuri Pankov mandoc_asprintf(char **dest, const char *fmt, ...)
36260e9a87SYuri Pankov {
37260e9a87SYuri Pankov 	va_list	 ap;
38260e9a87SYuri Pankov 	int	 ret;
39260e9a87SYuri Pankov 
40260e9a87SYuri Pankov 	va_start(ap, fmt);
41260e9a87SYuri Pankov 	ret = vasprintf(dest, fmt, ap);
42260e9a87SYuri Pankov 	va_end(ap);
43260e9a87SYuri Pankov 
44371584c2SYuri Pankov 	if (ret == -1)
45371584c2SYuri Pankov 		err((int)MANDOCLEVEL_SYSERR, NULL);
46371584c2SYuri Pankov 	return ret;
47260e9a87SYuri Pankov }
48260e9a87SYuri Pankov 
49260e9a87SYuri Pankov void *
mandoc_calloc(size_t num,size_t size)50260e9a87SYuri Pankov mandoc_calloc(size_t num, size_t size)
51260e9a87SYuri Pankov {
52260e9a87SYuri Pankov 	void	*ptr;
53260e9a87SYuri Pankov 
54260e9a87SYuri Pankov 	ptr = calloc(num, size);
55371584c2SYuri Pankov 	if (ptr == NULL)
56371584c2SYuri Pankov 		err((int)MANDOCLEVEL_SYSERR, NULL);
57371584c2SYuri Pankov 	return ptr;
58260e9a87SYuri Pankov }
59260e9a87SYuri Pankov 
60260e9a87SYuri Pankov void *
mandoc_malloc(size_t size)61260e9a87SYuri Pankov mandoc_malloc(size_t size)
62260e9a87SYuri Pankov {
63260e9a87SYuri Pankov 	void	*ptr;
64260e9a87SYuri Pankov 
65260e9a87SYuri Pankov 	ptr = malloc(size);
66371584c2SYuri Pankov 	if (ptr == NULL)
67371584c2SYuri Pankov 		err((int)MANDOCLEVEL_SYSERR, NULL);
68371584c2SYuri Pankov 	return ptr;
69260e9a87SYuri Pankov }
70260e9a87SYuri Pankov 
71260e9a87SYuri Pankov void *
mandoc_realloc(void * ptr,size_t size)72260e9a87SYuri Pankov mandoc_realloc(void *ptr, size_t size)
73260e9a87SYuri Pankov {
74260e9a87SYuri Pankov 	ptr = realloc(ptr, size);
75371584c2SYuri Pankov 	if (ptr == NULL)
76371584c2SYuri Pankov 		err((int)MANDOCLEVEL_SYSERR, NULL);
77371584c2SYuri Pankov 	return ptr;
78260e9a87SYuri Pankov }
79260e9a87SYuri Pankov 
80260e9a87SYuri Pankov void *
mandoc_reallocarray(void * ptr,size_t num,size_t size)81260e9a87SYuri Pankov mandoc_reallocarray(void *ptr, size_t num, size_t size)
82260e9a87SYuri Pankov {
83260e9a87SYuri Pankov 	ptr = reallocarray(ptr, num, size);
84371584c2SYuri Pankov 	if (ptr == NULL)
85371584c2SYuri Pankov 		err((int)MANDOCLEVEL_SYSERR, NULL);
86371584c2SYuri Pankov 	return ptr;
87260e9a87SYuri Pankov }
88260e9a87SYuri Pankov 
89c66b8046SYuri Pankov void *
mandoc_recallocarray(void * ptr,size_t oldnum,size_t num,size_t size)90c66b8046SYuri Pankov mandoc_recallocarray(void *ptr, size_t oldnum, size_t num, size_t size)
91c66b8046SYuri Pankov {
92c66b8046SYuri Pankov 	ptr = recallocarray(ptr, oldnum, num, size);
93c66b8046SYuri Pankov 	if (ptr == NULL)
94c66b8046SYuri Pankov 		err((int)MANDOCLEVEL_SYSERR, NULL);
95c66b8046SYuri Pankov 	return ptr;
96c66b8046SYuri Pankov }
97c66b8046SYuri Pankov 
98260e9a87SYuri Pankov char *
mandoc_strdup(const char * ptr)99260e9a87SYuri Pankov mandoc_strdup(const char *ptr)
100260e9a87SYuri Pankov {
101260e9a87SYuri Pankov 	char	*p;
102260e9a87SYuri Pankov 
103260e9a87SYuri Pankov 	p = strdup(ptr);
104371584c2SYuri Pankov 	if (p == NULL)
105371584c2SYuri Pankov 		err((int)MANDOCLEVEL_SYSERR, NULL);
106371584c2SYuri Pankov 	return p;
107260e9a87SYuri Pankov }
108260e9a87SYuri Pankov 
109260e9a87SYuri Pankov char *
mandoc_strndup(const char * ptr,size_t sz)110260e9a87SYuri Pankov mandoc_strndup(const char *ptr, size_t sz)
111260e9a87SYuri Pankov {
112260e9a87SYuri Pankov 	char	*p;
113260e9a87SYuri Pankov 
114*6640c13bSYuri Pankov 	p = strndup(ptr, sz);
115*6640c13bSYuri Pankov 	if (p == NULL)
116*6640c13bSYuri Pankov 		err((int)MANDOCLEVEL_SYSERR, NULL);
117371584c2SYuri Pankov 	return p;
118260e9a87SYuri Pankov }
119