From 04f7c20494de465114b98e281730cb46a8167f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Tue, 20 Dec 2016 10:19:05 +0000 Subject: [PATCH] Remove fd_read*() --- src/main.c | 66 ++++++++++++------------------------------------------ 1 file changed, 14 insertions(+), 52 deletions(-) diff --git a/src/main.c b/src/main.c index f43b726..444a549 100644 --- a/src/main.c +++ b/src/main.c @@ -84,56 +84,6 @@ gt_set_signal(void) sigaction(SIGPIPE, &sa, NULL); } -static ssize_t -fd_read(int fd, void *data, size_t size) -{ - if ((fd == -1) || !size) - return -1; - - ssize_t ret = read(fd, data, size); - - if (ret == -1) { - if (errno == EAGAIN || errno == EINTR) - return -1; - - if (errno) - perror("read"); - - return 0; - } - - return ret; -} - -static size_t -fd_read_all(int fd, void *data, size_t size) -{ - size_t done = 0; - - while (done < size) { - ssize_t ret = fd_read(fd, (uint8_t *)data + done, size - done); - - if (!ret) - break; - - if (ret < 0) { - struct pollfd pollfd = { - .fd = fd, - .events = POLLIN, - }; - - if (!poll(&pollfd, 1, gt.timeout)) - break; - - continue; - } - - done += ret; - } - - return done; -} - static void gt_print_secretkey(struct mud *mud) { @@ -165,11 +115,23 @@ gt_setup_secretkey(struct mud *mud, char *keyfile) unsigned char key[32]; char buf[2 * sizeof(key)]; - size_t r = fd_read_all(fd, buf, sizeof(buf)); + size_t size = 0; + + while (size < sizeof(buf)) { + ssize_t r = read(fd, &buf[size], sizeof(buf) - size); + + if (r <= (ssize_t)0) { + if (r && (errno == EAGAIN || errno == EINTR)) + continue; + break; + } + + size += r; + } close(fd); - if (r != sizeof(buf)) { + if (size != sizeof(buf)) { gt_log("unable to read secret key\n"); return -1; }