/* * $Id: etc.c,v 1.6 1994/04/22 07:57:54 pk Exp $ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #if __STDC__ #include #else #include #endif #include "ld.h" /* * Report a nonfatal error. */ void #if __STDC__ error(char *fmt, ...) #else error(fmt, va_alist) char *fmt; va_dcl #endif { va_list ap; #if __STDC__ va_start(ap, fmt); #else va_start(ap); #endif (void)fprintf(stderr, "%s: ", progname); (void)vfprintf(stderr, fmt, ap); (void)fprintf(stderr, "\n"); va_end(ap); } void (*fatal_cleanup_hook)__P((void)); /* * Report a fatal error. */ void #if __STDC__ fatal(char *fmt, ...) #else fatal(fmt, va_alist) char *fmt; va_dcl #endif { va_list ap; #if __STDC__ va_start(ap, fmt); #else va_start(ap); #endif (void)fprintf(stderr, "%s: ", progname); (void)vfprintf(stderr, fmt, ap); (void)fprintf(stderr, "\n"); va_end(ap); if (fatal_cleanup_hook) (*fatal_cleanup_hook)(); exit(1); } /* * Return a newly-allocated string whose contents concatenate * the strings S1, S2, S3. */ char * concat(s1, s2, s3) const char *s1, *s2, *s3; { register int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); register char *result = (char *) xmalloc (len1 + len2 + len3 + 1); strcpy (result, s1); strcpy (result + len1, s2); strcpy (result + len1 + len2, s3); result[len1 + len2 + len3] = 0; return result; } /* Like malloc but get fatal error if memory is exhausted. */ void * xmalloc(size) int size; { register void *result = (void *)malloc (size); if (!result) fatal ("virtual memory exhausted", 0); return result; } /* Like realloc but get fatal error if memory is exhausted. */ void * xrealloc(ptr, size) void *ptr; int size; { register void *result; if (ptr == NULL) result = (void *)malloc (size); else result = (void *)realloc (ptr, size); if (!result) fatal ("virtual memory exhausted", 0); return result; }