xref: /dragonfly/usr.bin/bmake/util.h (revision ee2cba8aae8c6b2ce0b6c6fc150e61c1736c64e8)
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 *
estrdup(const char * s)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 *
estrndup(const char * s,size_t len)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 *
emalloc(size_t n)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 *
ecalloc(size_t n,size_t s)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 *
erealloc(void * p,size_t n)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