diff options
| author | _ov4 <ov4@ov4.org> | 2026-09-03 12:40:05 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-09-03 12:40:05 +0000 |
| commit | 5a6b17235a10aea87b3b74122df861536a6efdd2 (patch) | |
| tree | bb7a844f7ef18c6b8648977b1383bc78c9435e9f /src/util/io.cc | |
| parent | 065ca31d261e55b26bcd4ddc5877b8a0ac9e77b7 (diff) | |
add safe_output: async-signal-safe output
Diffstat (limited to 'src/util/io.cc')
| -rw-r--r-- | src/util/io.cc | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/util/io.cc b/src/util/io.cc index 1fe37e5..09479e6 100644 --- a/src/util/io.cc +++ b/src/util/io.cc @@ -22,7 +22,7 @@ void safe_print(const char *s, bool ignore_wrap) void safe_print(int x) { int errno_old = errno; - char msg[LENGTH]; + char msg[NUMBER_LENGTH]; itoa(x, msg, DECIMAL); safe_print(msg); errno = errno_old; @@ -110,6 +110,37 @@ char *itoa(int num, char* str, int base) return str; } +void wrap_eliminator(char *s, char replacement) +{ + if (replacement == '\0') + { + char *r = s; + char *w = s; + while (*r) { + if (*r != '\n') + *w++ = *r; + r++; + } + *w = '\0'; + return; + } + size_t len = strlen(s); + for (size_t i = 0; i < len; i++) + if (s[i] == '\n') + s[i] = replacement; +} + +void write_helper(const char *s) +{ + int errno_old = errno; + + size_t len = strlen(s); + for (size_t i = 0; i < len; i++) + write(STDIN_FILENO, &s[i], 1); + + errno = errno_old; +} + /* * usage - print a help message */ |
