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
15_dl_oom(void)
16{
17	err(1, OOM_MSG);
18}
19
20char *
21xstrdup(const char *s)
22{
23	char *ptr;
24
25	if ((ptr = strdup(s)) == NULL)
26		err(1, OOM_MSG);
27	return (ptr);
28}
29
30void *
31xmalloc(size_t size)
32{
33	void *ptr;
34
35	if ((ptr = malloc(size)) == NULL)
36		err(1, OOM_MSG);
37	return (ptr);
38}
39
40void *
41xrealloc(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
50void *
51xcalloc(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
61char *
62concat(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