xref: /dragonfly/usr.bin/bmake/util.h (revision 0212bfce)
1 /*	$NetBSD: efun.c,v 1.6 2008/04/28 20:23:02 martin Exp $	*/
2 
3 /*-
4  * Copyright (c) 2006 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Christos Zoulas.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef _BMAKE_UTIL_H_
33 #define	_BMAKE_UTIL_H_
34 
35 #include <sys/cdefs.h>
36 #include <err.h>
37 #include <errno.h>
38 #include <string.h>
39 #include <stdlib.h>
40 #include <stdio.h>
41 #include <stdarg.h>
42 
43 static void (*efunc)(int, const char *, ...) = err;
44 
45 static __inline __always_inline char *
46 estrdup(const char *s)
47 {
48 	char *d = strdup(s);
49 	if (d == NULL)
50 		(*efunc)(1, "Cannot copy string");
51 	return d;
52 }
53 
54 static __inline __always_inline char *
55 estrndup(const char *s, size_t len)
56 {
57 	char *d = strndup(s, len);
58 	if (d == NULL)
59 		(*efunc)(1, "Cannot copy string");
60 	return d;
61 }
62 
63 static __inline __always_inline void *
64 emalloc(size_t n)
65 {
66 	void *p = malloc(n);
67 	if (p == NULL)
68 		(*efunc)(1, "Cannot allocate %zu bytes", n);
69 	return p;
70 }
71 
72 static __inline __always_inline void *
73 ecalloc(size_t n, size_t s)
74 {
75 	void *p = calloc(n, s);
76 	if (p == NULL)
77 		(*efunc)(1, "Cannot allocate %zu bytes", n);
78 	return p;
79 }
80 
81 static __inline __always_inline void *
82 erealloc(void *p, size_t n)
83 {
84 	void *q = realloc(p, n);
85 	if (q == NULL)
86 		(*efunc)(1, "Cannot re-allocate %zu bytes", n);
87 	return q;
88 }
89 
90 #endif /* _BMAKE_UTIL_H_ */
91