From cbf2276a8e36d90518c5f1f4f918de467f1dd610 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Tue, 22 Sep 2015 16:15:30 +0200 Subject: [PATCH] fixed EOF handling in send tool and msg_fscan() function --- server/src/msg.c | 8 ++------ server/src/random.c | 11 ++++------- server/src/send.c | 13 ++++++++----- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/server/src/msg.c b/server/src/msg.c index 7df3df117..b92374e1a 100644 --- a/server/src/msg.c +++ b/server/src/msg.c @@ -65,12 +65,8 @@ int msg_fscan(FILE *f, struct msg *m) char line[MSG_VALUES * 16]; char *next, *ptr = line; -retry: if (fgets(line, sizeof(line), f) == NULL) { - if (feof(f)) - goto retry; - else - return -1; /* An error occured */ - } + if (fgets(line, sizeof(line), f) == NULL) + return -1; /* An error occured */ m->ts.sec = (uint32_t) strtoul(ptr, &ptr, 10); ptr++; m->ts.nsec = (uint32_t) strtoul(ptr, &ptr, 10); diff --git a/server/src/random.c b/server/src/random.c index 9e9ac94e1..305d88dc0 100644 --- a/server/src/random.c +++ b/server/src/random.c @@ -21,7 +21,7 @@ int main(int argc, char *argv[]) { - if (argc <= 3 || argc > 4) { + if (argc < 3 || argc > 4) { printf("Usage: %s VALUES RATE [LIMIT]\n", argv[0]); printf(" VALUES is the number of values a message contains\n"); printf(" RATE how many messages per second\n"); @@ -35,9 +35,9 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - int limit = argc >= 4 ? atoi(argv[3]) : 0; - double rate = strtod(argv[2], NULL); struct msg m = MSG_INIT(atoi(argv[1])); + double rate = atof(argv[2]); + int limit = argc >= 4 ? atoi(argv[3]) : -1; /* Setup timer */ struct itimerspec its = { @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "# %-20s\t%s\t%s\n", "timestamp", "seqno", "data[]"); /* Block until 1/p->rate seconds elapsed */ - for (;;) { + while (limit-- > 0 || argc < 4) { m.sequence += timerfd_wait(tfd); struct timespec ts; @@ -69,9 +69,6 @@ int main(int argc, char *argv[]) msg_fprint(stdout, &m); fflush(stdout); - - if (limit && --limit == 0) - break; } close(tfd); diff --git a/server/src/send.c b/server/src/send.c index 4562d94fd..833715e1d 100644 --- a/server/src/send.c +++ b/server/src/send.c @@ -113,16 +113,19 @@ int main(int argc, char *argv[]) /* Print header */ fprintf(stderr, "# %-20s\t%s\t%s\n", "timestamp", "seqno", "data[]"); - while (!feof(stdin)) { - for (int i = 0; i < node->combine; i++) { - msg_fscan(stdin, &pool[i]); - msg_fprint(stdout, &pool[i]); + for (;;) { + int i = 0; + while (i < node->combine) { + if (msg_fscan(stdin, &pool[i]) > 0) + msg_fprint(stdout, &pool[i++]); + else if (feof(stdin)) + goto out; } node_write(node, pool, node->combine, 0, node->combine); } - quit(); +out: quit(); return 0; }