diff options
author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2021-06-01 18:21:08 +0200 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2021-06-01 18:21:08 +0200 |
commit | 55ac2338fcf5c3f2f3f812fd53063ce58aa38a49 (patch) | |
tree | 034020ab2e64a27b98a7bb87296fd24675ddf9d2 /util.c | |
parent | cbb82666e00815aa2dbcc3f144460f3003b46b70 (diff) |
portability and standards: add BSD-like err() and errx() functions
These are BSD functions.
- HaikuOS now compiles without having to use libbsd.
- Tested on SerenityOS (for fun), which doesn't have these functions (yet).
With a small change to support wcwidth() sfeed works on SerenityOS.
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -1,5 +1,6 @@ #include <ctype.h> #include <errno.h> +#include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -7,6 +8,44 @@ #include "util.h" +/* print to stderr, print error message of errno and exit(). + Unlike BSD err() it does not prefix __progname */ +__dead void +err(int exitstatus, const char *fmt, ...) +{ + va_list ap; + int saved_errno; + + saved_errno = errno; + + if (fmt) { + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fprintf(stderr, ": "); + } + fprintf(stderr, "%s\n", strerror(saved_errno)); + + exit(exitstatus); +} + +/* print to stderr and exit(). + Unlike BSD errx() it does not prefix __progname */ +__dead void +errx(int exitstatus, const char *fmt, ...) +{ + va_list ap; + + if (fmt) { + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + } + fputs("\n", stderr); + + exit(exitstatus); +} + /* check if string has a non-empty scheme / protocol part */ int uri_hasscheme(const char *s) |