aboutsummaryrefslogtreecommitdiff
path: root/src/util/io.cc
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-09-03 12:40:05 +0000
committer_ov4 <ov4@ov4.org>2026-09-03 12:40:05 +0000
commit5a6b17235a10aea87b3b74122df861536a6efdd2 (patch)
treebb7a844f7ef18c6b8648977b1383bc78c9435e9f /src/util/io.cc
parent065ca31d261e55b26bcd4ddc5877b8a0ac9e77b7 (diff)
add safe_output: async-signal-safe output
Diffstat (limited to 'src/util/io.cc')
-rw-r--r--src/util/io.cc33
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
*/