summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/main.c b/main.c
index 89e22ce..5d991fa 100644
--- a/main.c
+++ b/main.c
@@ -45,6 +45,49 @@ int redraw_method = REDRAW_UNSPEC;
struct termios orig_term;
int dont_have_tty;
+/* Write buf to fd handling partial writes. Exit on failure. */
+void
+write_buf_or_fail(int fd, const void *buf, size_t count)
+{
+ while (count != 0)
+ {
+ ssize_t ret = write(fd, buf, count);
+
+ if (ret >= 0)
+ {
+ buf = (const char *)buf + ret;
+ count -= ret;
+ }
+ else if (ret < 0 && errno == EINTR)
+ continue;
+ else
+ {
+ printf(EOS "\r\n[write failed]\r\n");
+ exit(1);
+ }
+ }
+}
+
+/* Write pkt to fd. Exit on failure. */
+void
+write_packet_or_fail(int fd, const struct packet *pkt)
+{
+ while (1)
+ {
+ ssize_t ret = write(fd, pkt, sizeof(struct packet));
+
+ if (ret == sizeof(struct packet))
+ return;
+ else if (ret < 0 && errno == EINTR)
+ continue;
+ else
+ {
+ printf(EOS "\r\n[write failed]\r\n");
+ exit(1);
+ }
+ }
+}
+
static void
usage()
{