/* error.h — GNU-style error reporting. * * Red Bear OS / relibc. Mirrors glibc : error() and error_at_line() * print the program name (best effort), a formatted message, and optionally a * strerror() of errnum to stderr, then exit() when status is non-zero. Provided * as complete inline implementations so portable tooling (elfutils/libelf, * GNU-style CLIs) that includes builds and behaves correctly. */ #ifndef _ERROR_H #define _ERROR_H 1 #include #include #include #include #ifdef __cplusplus extern "C" { #endif static inline void error(int __status, int __errnum, const char *__format, ...) { va_list __ap; fflush(stdout); va_start(__ap, __format); vfprintf(stderr, __format, __ap); va_end(__ap); if (__errnum != 0) { fprintf(stderr, ": %s", strerror(__errnum)); } fputc('\n', stderr); if (__status != 0) { exit(__status); } } static inline void error_at_line(int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) { va_list __ap; fflush(stdout); if (__fname != NULL) { fprintf(stderr, "%s:%u: ", __fname, __lineno); } va_start(__ap, __format); vfprintf(stderr, __format, __ap); va_end(__ap); if (__errnum != 0) { fprintf(stderr, ": %s", strerror(__errnum)); } fputc('\n', stderr); if (__status != 0) { exit(__status); } } #ifdef __cplusplus } #endif #endif /* error.h */