diff options
| -rw-r--r-- | include/err.h | 24 | ||||
| -rw-r--r-- | src/linux/err.c | 60 | 
2 files changed, 84 insertions, 0 deletions
| diff --git a/include/err.h b/include/err.h new file mode 100644 index 00000000..5e33f9e4 --- /dev/null +++ b/include/err.h @@ -0,0 +1,24 @@ +#ifndef _ERR_H +#define _ERR_H + +#include <stdarg.h> + +#ifdef __cplusplus +extern "C" { +#endif + +void warn(const char *, ...); +void vwarn(const char *, va_list); +void warnx(const char *, ...); +void vwarnx(const char *, va_list); + +void err(int, const char *, ...); +void verr(int, const char *, va_list); +void errx(int, const char *, ...); +void verrx(int, const char *, va_list); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/linux/err.c b/src/linux/err.c new file mode 100644 index 00000000..abc26806 --- /dev/null +++ b/src/linux/err.c @@ -0,0 +1,60 @@ +#include <err.h> +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> + +void vwarn(const char *fmt, va_list ap) +{ +	vfprintf(stderr, fmt, ap); +	perror(""); +} + +void vwarnx(const char *fmt, va_list ap) +{ +	vfprintf(stderr, fmt, ap); +	putc('\n', stderr); +} + +void verr(int status, const char *fmt, va_list ap) +{ +	vwarn(fmt, ap); +	exit(status); +} + +void verrx(int status, const char *fmt, va_list ap) +{ +	vwarnx(fmt, ap); +	exit(status); +} + +void warn(const char *fmt, ...) +{ +	va_list ap; +	va_start(ap, fmt); +	vwarn(fmt, ap); +	va_end(ap); +} + +void warnx(const char *fmt, ...) +{ +	va_list ap; +	va_start(ap, fmt); +	vwarnx(fmt, ap); +	va_end(ap); +} + +void err(int status, const char *fmt, ...) +{ +	va_list ap; +	va_start(ap, fmt); +	verr(status, fmt, ap); +	va_end(ap); +} + +void errx(int status, const char *fmt, ...) +{ +	va_list ap; +	va_start(ap, fmt); +	verrx(status, fmt, ap); +	va_end(ap); +} | 
