diff options
Diffstat (limited to 'Build/source/utils/asymptote/pipestream.cc')
-rw-r--r-- | Build/source/utils/asymptote/pipestream.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/Build/source/utils/asymptote/pipestream.cc b/Build/source/utils/asymptote/pipestream.cc index 8e8abba34d7..a809302bf50 100644 --- a/Build/source/utils/asymptote/pipestream.cc +++ b/Build/source/utils/asymptote/pipestream.cc @@ -41,7 +41,8 @@ void pipeHandler(int) } void iopipestream::open(const mem::vector<string> &command, const char *hint, - const char *application, int out_fileno) + const char *application, const char *Fatal, + int out_fileno) { if(pipe(in) == -1) { ostringstream buf; @@ -86,9 +87,10 @@ void iopipestream::open(const mem::vector<string> &command, const char *hint, close(out[1]); close(in[0]); *buffer=0; + Running=true; pipeopen=true; pipein=true; - Running=true; + fatal=Fatal; block(false,true); } @@ -182,11 +184,16 @@ void iopipestream::wait(const char *prompt) { sbuffer.clear(); size_t plen=strlen(prompt); + size_t flen=strlen(fatal); do { readbuffer(); sbuffer.append(buffer); - } while(!tailequals(sbuffer.c_str(),sbuffer.size(),prompt,plen)); + + if(tailequals(sbuffer.c_str(),sbuffer.size(),prompt,plen)) break; + if(*fatal && tailequals(sbuffer.c_str(),sbuffer.size(),fatal,flen)) + camp::reportError(sbuffer); + } while(true); } int iopipestream::wait() |