From 872cf03f26c2801ae6c3008ce5fa0d7856f5f85d Mon Sep 17 00:00:00 2001 From: Kacper Date: Sun, 14 Dec 2025 18:10:13 +0100 Subject: libc: implement err/warn functions --- lib/libc/err/Kbuild | 8 ++++++++ lib/libc/err/err.c | 10 ++++++++++ lib/libc/err/errx.c | 10 ++++++++++ lib/libc/err/verr.c | 9 +++++++++ lib/libc/err/verrx.c | 9 +++++++++ lib/libc/err/vwarn.c | 16 ++++++++++++++++ lib/libc/err/vwarnx.c | 16 ++++++++++++++++ lib/libc/err/warn.c | 10 ++++++++++ lib/libc/err/warnx.c | 10 ++++++++++ 9 files changed, 98 insertions(+) create mode 100644 lib/libc/err/Kbuild create mode 100644 lib/libc/err/err.c create mode 100644 lib/libc/err/errx.c create mode 100644 lib/libc/err/verr.c create mode 100644 lib/libc/err/verrx.c create mode 100644 lib/libc/err/vwarn.c create mode 100644 lib/libc/err/vwarnx.c create mode 100644 lib/libc/err/warn.c create mode 100644 lib/libc/err/warnx.c (limited to 'lib/libc/err') diff --git a/lib/libc/err/Kbuild b/lib/libc/err/Kbuild new file mode 100644 index 00000000..e60623f5 --- /dev/null +++ b/lib/libc/err/Kbuild @@ -0,0 +1,8 @@ +obj-y += err.o +obj-y += errx.o +obj-y += verr.o +obj-y += verrx.o +obj-y += vwarn.o +obj-y += vwarnx.o +obj-y += warn.o +obj-y += warnx.o diff --git a/lib/libc/err/err.c b/lib/libc/err/err.c new file mode 100644 index 00000000..5b1b2b02 --- /dev/null +++ b/lib/libc/err/err.c @@ -0,0 +1,10 @@ +#include +#include + +__dead void err(int eval, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + verr(eval, fmt, ap); + va_end(ap); +} diff --git a/lib/libc/err/errx.c b/lib/libc/err/errx.c new file mode 100644 index 00000000..0afe999e --- /dev/null +++ b/lib/libc/err/errx.c @@ -0,0 +1,10 @@ +#include +#include + +__dead void errx(int eval, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + verrx(eval, fmt, ap); + va_end(ap); +} diff --git a/lib/libc/err/verr.c b/lib/libc/err/verr.c new file mode 100644 index 00000000..d769c15c --- /dev/null +++ b/lib/libc/err/verr.c @@ -0,0 +1,9 @@ +#include +#include +#include + +__dead void verr(int eval, const char *fmt, va_list args) +{ + vwarn(fmt, args); + exit(eval); +} diff --git a/lib/libc/err/verrx.c b/lib/libc/err/verrx.c new file mode 100644 index 00000000..d769c15c --- /dev/null +++ b/lib/libc/err/verrx.c @@ -0,0 +1,9 @@ +#include +#include +#include + +__dead void verr(int eval, const char *fmt, va_list args) +{ + vwarn(fmt, args); + exit(eval); +} diff --git a/lib/libc/err/vwarn.c b/lib/libc/err/vwarn.c new file mode 100644 index 00000000..2f485d93 --- /dev/null +++ b/lib/libc/err/vwarn.c @@ -0,0 +1,16 @@ +#include +#include + +extern char *__progname; + +void vwarn(const char *fmt, va_list args) +{ + fprintf(stderr, "%s: ", __progname); + + if (fmt != NULL) { + vfprintf(stderr, fmt, args); + fprintf(stderr, ": "); + } + + perror(NULL); +} diff --git a/lib/libc/err/vwarnx.c b/lib/libc/err/vwarnx.c new file mode 100644 index 00000000..2f485d93 --- /dev/null +++ b/lib/libc/err/vwarnx.c @@ -0,0 +1,16 @@ +#include +#include + +extern char *__progname; + +void vwarn(const char *fmt, va_list args) +{ + fprintf(stderr, "%s: ", __progname); + + if (fmt != NULL) { + vfprintf(stderr, fmt, args); + fprintf(stderr, ": "); + } + + perror(NULL); +} diff --git a/lib/libc/err/warn.c b/lib/libc/err/warn.c new file mode 100644 index 00000000..4f12995a --- /dev/null +++ b/lib/libc/err/warn.c @@ -0,0 +1,10 @@ +#include +#include + +void warn(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vwarn(fmt, ap); + va_end(ap); +} diff --git a/lib/libc/err/warnx.c b/lib/libc/err/warnx.c new file mode 100644 index 00000000..fa0e6fda --- /dev/null +++ b/lib/libc/err/warnx.c @@ -0,0 +1,10 @@ +#include +#include + +void warnx(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vwarnx(fmt, ap); + va_end(ap); +} -- cgit v1.2.3