| /* SPDX-License-Identifier: LGPL-2.1 OR MIT */ | |
| /* | |
| * formatted error message for NOLIBC | |
| * Copyright (C) 2026 Thomas Weißschuh <linux@weissschuh.net> | |
| */ | |
| /* make sure to include all global symbols */ | |
| #include "nolibc.h" | |
| #ifndef _NOLIBC_ERR_H | |
| #define _NOLIBC_ERR_H | |
| #include "errno.h" | |
| #include "stdarg.h" | |
| #include "sys.h" | |
| static __attribute__((unused)) | |
| void vwarn(const char *fmt, va_list args) | |
| { | |
| fprintf(stderr, "%s: ", program_invocation_short_name); | |
| vfprintf(stderr, fmt, args); | |
| fprintf(stderr, ": %m\n"); | |
| } | |
| static __attribute__((unused)) | |
| void vwarnx(const char *fmt, va_list args) | |
| { | |
| fprintf(stderr, "%s: ", program_invocation_short_name); | |
| vfprintf(stderr, fmt, args); | |
| fprintf(stderr, "\n"); | |
| } | |
| static __attribute__((unused)) | |
| void warn(const char *fmt, ...) | |
| { | |
| va_list args; | |
| va_start(args, fmt); | |
| vwarn(fmt, args); | |
| va_end(args); | |
| } | |
| static __attribute__((unused)) | |
| void warnx(const char *fmt, ...) | |
| { | |
| va_list args; | |
| va_start(args, fmt); | |
| vwarnx(fmt, args); | |
| va_end(args); | |
| } | |
| static __attribute__((noreturn, unused)) | |
| void verr(int eval, const char *fmt, va_list args) | |
| { | |
| vwarn(fmt, args); | |
| exit(eval); | |
| } | |
| static __attribute__((noreturn, unused)) | |
| void verrx(int eval, const char *fmt, va_list args) | |
| { | |
| warnx(fmt, args); | |
| exit(eval); | |
| } | |
| static __attribute__((noreturn, unused)) | |
| void err(int eval, const char *fmt, ...) | |
| { | |
| va_list args; | |
| va_start(args, fmt); | |
| verr(eval, fmt, args); | |
| va_end(args); | |
| } | |
| static __attribute__((noreturn, unused)) | |
| void errx(int eval, const char *fmt, ...) | |
| { | |
| va_list args; | |
| va_start(args, fmt); | |
| verrx(eval, fmt, args); | |
| va_end(args); | |
| } | |
| #endif /* _NOLIBC_ERR_H */ |