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