From 7659aaa2e88cc0401d032d04602731ca45070fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= Date: Mon, 15 Aug 2016 14:33:26 +0200 Subject: [PATCH] Support reading input from named pipes Added support for line-by-line input reading from unix FIFOs. --- src/espeak-ng.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/espeak-ng.c b/src/espeak-ng.c index 54c55598..caa91b3b 100644 --- a/src/espeak-ng.c +++ b/src/espeak-ng.c @@ -652,12 +652,20 @@ int main(int argc, char **argv) flag_stdin = 2; } } else { + struct stat st; + if (stat(filename, &st) != 0) { + fprintf(stderr, "Failed to stat() file '%s'\n", filename); + exit(EXIT_FAILURE); + } filesize = GetFileLength(filename); f_text = fopen(filename, "r"); if (f_text == NULL) { fprintf(stderr, "Failed to read file '%s'\n", filename); exit(EXIT_FAILURE); } + if (S_ISFIFO(st.st_mode)) { + flag_stdin = 2; + } } if (p_text != NULL) { @@ -672,11 +680,13 @@ int main(int argc, char **argv) } if (flag_stdin == 2) { - // line by line input on stdin - while (fgets(p_text, max, stdin) != NULL) { + // line by line input on stdin or from FIFO + while (fgets(p_text, max, f_text) != NULL) { p_text[max-1] = 0; espeak_Synth(p_text, max, 0, POS_CHARACTER, 0, synth_flags, NULL, NULL); - + } + if (f_text != stdin) { + fclose(f_text); } } else { // bulk input on stdin