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