Annotation of src/usr.bin/mandoc/mandoc_aux.c, Revision 1.8
1.8 ! schwarze 1: /* $OpenBSD: mandoc_aux.c,v 1.7 2015/10/12 21:09:08 schwarze Exp $ */
1.1 schwarze 2: /*
3: * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
1.8 ! schwarze 4: * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
1.1 schwarze 5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: */
18: #include <sys/types.h>
19:
1.6 schwarze 20: #include <err.h>
1.2 schwarze 21: #include <stdarg.h>
1.1 schwarze 22: #include <stdlib.h>
23: #include <stdio.h>
24: #include <string.h>
25:
26: #include "mandoc.h"
27: #include "mandoc_aux.h"
1.2 schwarze 28:
29: int
30: mandoc_asprintf(char **dest, const char *fmt, ...)
31: {
32: va_list ap;
33: int ret;
34:
35: va_start(ap, fmt);
36: ret = vasprintf(dest, fmt, ap);
37: va_end(ap);
38:
1.6 schwarze 39: if (ret == -1)
40: err((int)MANDOCLEVEL_SYSERR, NULL);
1.5 schwarze 41: return ret;
1.2 schwarze 42: }
1.1 schwarze 43:
44: void *
45: mandoc_calloc(size_t num, size_t size)
46: {
47: void *ptr;
48:
49: ptr = calloc(num, size);
1.6 schwarze 50: if (ptr == NULL)
51: err((int)MANDOCLEVEL_SYSERR, NULL);
1.5 schwarze 52: return ptr;
1.1 schwarze 53: }
54:
55: void *
56: mandoc_malloc(size_t size)
57: {
58: void *ptr;
59:
60: ptr = malloc(size);
1.6 schwarze 61: if (ptr == NULL)
62: err((int)MANDOCLEVEL_SYSERR, NULL);
1.5 schwarze 63: return ptr;
1.1 schwarze 64: }
65:
66: void *
67: mandoc_realloc(void *ptr, size_t size)
68: {
69: ptr = realloc(ptr, size);
1.6 schwarze 70: if (ptr == NULL)
71: err((int)MANDOCLEVEL_SYSERR, NULL);
1.5 schwarze 72: return ptr;
1.3 schwarze 73: }
74:
75: void *
76: mandoc_reallocarray(void *ptr, size_t num, size_t size)
77: {
1.8 ! schwarze 78: ptr = reallocarray(ptr, num, size);
! 79: if (ptr == NULL)
! 80: err((int)MANDOCLEVEL_SYSERR, NULL);
! 81: return ptr;
! 82: }
1.3 schwarze 83:
1.8 ! schwarze 84: void *
! 85: mandoc_recallocarray(void *ptr, size_t oldnum, size_t num, size_t size)
! 86: {
! 87: ptr = recallocarray(ptr, oldnum, num, size);
1.6 schwarze 88: if (ptr == NULL)
89: err((int)MANDOCLEVEL_SYSERR, NULL);
1.5 schwarze 90: return ptr;
1.1 schwarze 91: }
92:
93: char *
94: mandoc_strdup(const char *ptr)
95: {
96: char *p;
97:
98: p = strdup(ptr);
1.7 schwarze 99: if (p == NULL)
1.6 schwarze 100: err((int)MANDOCLEVEL_SYSERR, NULL);
1.5 schwarze 101: return p;
1.1 schwarze 102: }
103:
104: char *
105: mandoc_strndup(const char *ptr, size_t sz)
106: {
107: char *p;
108:
109: p = mandoc_malloc(sz + 1);
110: memcpy(p, ptr, sz);
111: p[(int)sz] = '\0';
1.5 schwarze 112: return p;
1.1 schwarze 113: }