NetBSD/gnu/usr.bin/ld/etc.c

138 lines
2.1 KiB
C
Raw Normal View History

1993-10-17 00:52:27 +03:00
/*
* $Id: etc.c,v 1.6 1994/04/22 07:57:54 pk Exp $
1993-10-17 00:52:27 +03:00
*/
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <sys/time.h>
#include <fcntl.h>
#include <ar.h>
#include <ranlib.h>
#include <a.out.h>
#include <stab.h>
#include <string.h>
#if __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#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));
1993-10-17 00:52:27 +03:00
/*
* 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)();
1993-10-17 00:52:27 +03:00
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;
1993-10-17 00:52:27 +03:00
{
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;
}