diff --git a/src/espeak.cpp b/src/espeak.cpp
index 17e64fa..813be50 100644
--- a/src/espeak.cpp
+++ b/src/espeak.cpp
@@ -726,8 +726,17 @@ int main (int argc, char **argv)
}
else
{
+ struct stat st;
+ if (stat(filename, &st) != 0) {
+ fprintf(stderr, "Failed to stat() file '%s'\n", filename);
+ exit(1);
+ }
filesize = GetFileLength(filename);
f_text = fopen(filename,"r");
+ if (S_ISFIFO(st.st_mode))
+ {
+ flag_stdin = 2;
+ }
}
if((f_text == NULL) && (p_text == NULL))
@@ -751,13 +760,16 @@ 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
{