diff --git a/include/err.h b/include/err.h index ec90327..4b02d8f 100644 --- a/include/err.h +++ b/include/err.h @@ -9,24 +9,46 @@ #else -#ifndef LIBCRYPTOCOMPAT_ERR_H -#define LIBCRYPTOCOMPAT_ERR_H +#ifndef LIBCOMPAT_ERR_H +#define LIBCOMPAT_ERR_H #include +#include #include #include +extern char *__progname; + +static inline _warn(int err, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + +static inline _warn(int err, const char *format, ...) +{ + va_list args; + va_start(args, format); + fprintf(stderr, "%s: ", __progname); + if (format != NULL) { + vfprintf(stderr, format, args); + if (err) + fprintf(stderr, ": "); + } + if (err) + fprintf(stderr, "%s", strerror(err)); + fprintf(stderr, "\n"); + va_end(args); +} + #define err(exitcode, format, args...) \ - errx(exitcode, format ": %s", ## args, strerror(errno)) + do { warn(format, ## args); exit(exitcode); } while (0) #define errx(exitcode, format, args...) \ do { warnx(format, ## args); exit(exitcode); } while (0) #define warn(format, args...) \ - warnx(format ": %s", ## args, strerror(errno)) + _warn(errno, format, ## args) #define warnx(format, args...) \ - fprintf(stderr, format "\n", ## args) + _warn(0, format, ## args) #endif