xref: /openbsd/libexec/ld.so/ldconfig/etc.c (revision 3d8e19a1)
1 /* $OpenBSD: etc.c,v 1.8 2019/12/17 17:16:32 guenther Exp $ */
2 
3 /* Public Domain */
4 
5 #include <sys/types.h>
6 
7 #include <err.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include "ld.h"
11 
12 #define	OOM_MSG	"Out of memory"
13 
14 __dead void
_dl_oom(void)15 _dl_oom(void)
16 {
17 	err(1, OOM_MSG);
18 }
19 
20 char *
xstrdup(const char * s)21 xstrdup(const char *s)
22 {
23 	char *ptr;
24 
25 	if ((ptr = strdup(s)) == NULL)
26 		err(1, OOM_MSG);
27 	return (ptr);
28 }
29 
30 void *
xmalloc(size_t size)31 xmalloc(size_t size)
32 {
33 	void *ptr;
34 
35 	if ((ptr = malloc(size)) == NULL)
36 		err(1, OOM_MSG);
37 	return (ptr);
38 }
39 
40 void *
xrealloc(void * ptr,size_t size)41 xrealloc(void *ptr, size_t size)
42 {
43 	void *nptr;
44 
45 	if ((nptr = realloc(ptr, size)) == NULL)
46 		err(1, OOM_MSG);
47 	return (nptr);
48 }
49 
50 void *
xcalloc(size_t nmemb,size_t size)51 xcalloc(size_t nmemb, size_t size)
52 {
53 	void *ptr;
54 
55 	ptr = calloc(nmemb, size);
56 	if (ptr == NULL)
57 		err(1, OOM_MSG);
58 	return ptr;
59 }
60 
61 char *
concat(const char * s1,const char * s2,const char * s3)62 concat(const char *s1, const char *s2, const char *s3)
63 {
64 	char *str;
65 	size_t len;
66 
67 	len = strlen(s1) + strlen(s2) + strlen(s3) + 1;
68 	str = xmalloc(len);
69 
70 	strlcpy(str, s1, len);
71 	strlcat(str, s2, len);
72 	strlcat(str, s3, len);
73 
74 	return (str);
75 }
76