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