1 /* $OpenBSD: etc.c,v 1.7 2006/05/12 23:35:16 deraadt 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 char *
xstrdup(const char * s)15 xstrdup(const char *s)
16 {
17 char *ptr;
18
19 if ((ptr = strdup(s)) == NULL)
20 err(1, OOM_MSG);
21 return (ptr);
22 }
23
24 void *
xmalloc(size_t size)25 xmalloc(size_t size)
26 {
27 void *ptr;
28
29 if ((ptr = malloc(size)) == NULL)
30 err(1, OOM_MSG);
31 return (ptr);
32 }
33
34 void *
xrealloc(void * ptr,size_t size)35 xrealloc(void *ptr, size_t size)
36 {
37 void *nptr;
38
39 if ((nptr = realloc(ptr, size)) == NULL)
40 err(1, OOM_MSG);
41 return (nptr);
42 }
43
44 void *
xcalloc(size_t nmemb,size_t size)45 xcalloc(size_t nmemb, size_t size)
46 {
47 void *ptr;
48
49 ptr = calloc(nmemb, size);
50 if (ptr == NULL)
51 err(1, OOM_MSG);
52 return ptr;
53 }
54
55 char *
concat(const char * s1,const char * s2,const char * s3)56 concat(const char *s1, const char *s2, const char *s3)
57 {
58 char *str;
59 size_t len;
60
61 len = strlen(s1) + strlen(s2) + strlen(s3) + 1;
62 str = xmalloc(len);
63
64 strlcpy(str, s1, len);
65 strlcat(str, s2, len);
66 strlcat(str, s3, len);
67
68 return (str);
69 }
70