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