terom@1: #include terom@1: #include terom@1: #include terom@1: #include terom@1: #include terom@1: terom@6: #include "log.h" terom@1: terom@1: static void _generic_err_vargs (int use_stderr, const char *func, int perr, const char *fmt, va_list va) { terom@1: FILE *stream = use_stderr ? stderr : stdout; terom@1: terom@1: if (func) terom@1: fprintf(stream, "%s: ", func); terom@1: terom@1: vfprintf(stream, fmt, va); terom@1: terom@1: if (perr) terom@2: fprintf(stream, ": %s\n", strerror(perr > 0 ? errno : -perr)); terom@1: terom@1: fprintf(stream, "\n"); terom@1: } terom@1: terom@1: void _generic_err (int use_stderr, const char *func, int perr, const char *fmt, ...) { terom@1: va_list va; terom@1: terom@1: va_start(va, fmt); terom@1: _generic_err_vargs(use_stderr, func, perr, fmt, va); terom@1: va_end(va); terom@1: } terom@1: terom@1: void _generic_err_exit (int use_stderr, const char *func, int perr, const char *fmt, ...) { terom@1: va_list va; terom@1: terom@1: va_start(va, fmt); terom@1: _generic_err_vargs(use_stderr, func, perr, fmt, va); terom@1: va_end(va); terom@1: terom@1: exit(EXIT_FAILURE); terom@1: } terom@1: