#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#include "eprintf.h"|
void
eprintf(
char
*fmt, ...)
{
va_list
args;
fflush
(stdout);
if
(progname() != NULL)
fprintf
(stderr,
"%s: "
, progname());
va_start
(args, fmt);
vfprintf
(stderr, fmt, args);
va_end
(args);
if
(fmt[0] !=
'\0'
&& fmt[
strlen
(fmt)-1] ==
':'
)
fprintf
(stderr,
"%s"
,
strerror
(
errno
));
fprintf
(stderr,
"\n"
);
exit
(2);
}
void
weprintf(
char
*fmt, ...)
{
va_list
args;
fflush
(stdout);
if
(progname() != NULL)
fwprintf(stderr,
"%s: "
, progname());
va_start
(args, fmt);
vfwprintf(stderr, fmt, args);
va_end
(args);
if
(fmt[0] !=
'\0'
&& fmt[wcslen(fmt)-1] ==
':'
)
fwprintf(stderr,
"%s"
,
strerror
(
errno
));
fwprintf(stderr,
"\n"
);
exit
(2);
}
char
*estrdup(
char
*s)
{
char
*t;
t = (
char
*)
malloc
(
strlen
(s)+1);
if
(t == NULL)
eprintf(
"estrdup(\"%.20s\") failed:"
, s);
strcpy
(t, s);
return
t;
}
void
*emalloc(
size_t
n)
{
void
*p;
p =
malloc
(n);
if
(p == NULL)
eprintf(
"malloc of %u bytes failed:"
, n);
return
p;
}
static
char
*name = NULL;
void
setprogname(
char
*str)
{
name = estrdup(str);
}
char
*progname(
void
)
{
return
name;
}