summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/pipestream.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/pipestream.cc')
-rw-r--r--Build/source/utils/asymptote/pipestream.cc13
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()