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 20 char * 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 * 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 * 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 * 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 * 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