X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;ds=sidebyside;f=x5%2Fkhatus.c;h=fad399494102841390e6755a8575343fabad7c68;hb=03ed0008d381dbf3cda334e24842acf7783d3dbe;hp=93550a958b7505ce2c8afe1dc52bd7aa1d0935e7;hpb=efa97b71295ad84d9660c392100369f99d533fa7;p=khatus.git diff --git a/x5/khatus.c b/x5/khatus.c index 93550a9..fad3994 100644 --- a/x5/khatus.c +++ b/x5/khatus.c @@ -57,10 +57,10 @@ struct Config { }; enum read_status { - FAIL_FINAL = -2, - FAIL_TMP = -1, - END_OF_FILE = 0, - END_OF_MESSAGE = 1 + END_OF_FILE, + END_OF_MESSAGE, + RETRY, + FAILURE }; void @@ -328,22 +328,21 @@ fifo_read_error(Fifo *f, char *buf) enum read_status fifo_read_one(Fifo *f, char *buf) { - /* Initialize all to an impossible value: */ - ssize_t n = -5; /* Number of bytes read. */ - char c = -1; /* Character read. */ - int r = -1; /* Remaining unused slots in buffer range. */ + char c; /* Character read. */ + int r; /* Remaining unused slots in buffer range. */ for (;;) { - n = read(f->fd, &c, 1); - assert(n >= -1 && n <= 1); - switch (n) { + switch (read(f->fd, &c, 1)) { case -1: error("Failed to read: \"%s\". errno: %d, msg: %s\n", f->name, errno, strerror(errno)); - if (errno == 11) - return FAIL_TMP; - else - return FAIL_FINAL; + switch (errno) { + case EINTR: + case EAGAIN: + return RETRY; + default: + return FAILURE; + } case 0: debug("%s: End of FILE\n", f->name); f->pos_curr = f->pos_init; @@ -418,12 +417,12 @@ fifo_read_all(Config *cfg, char *buf) debug("reading: %s\n", f->name); switch (fifo_read_one(f, buf)) { case END_OF_FILE: - case FAIL_FINAL: + case FAILURE: close(f->fd); f->fd = -1; break; case END_OF_MESSAGE: - case FAIL_TMP: + case RETRY: break; default: assert(0);