X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=manager%2Fprogram.cpp;h=8b4e4afcdf6072bcc2c9825d83198fd3f7ddbd24;hp=ea5304c51075786c74218c8739b2a37675ac1918;hb=2ab27eb698cfd57977cc9cc25edcbfbeb3b1b1ee;hpb=f91a915d6f64f9d35e867d26e8ddb9c1b1ab0c1e diff --git a/manager/program.cpp b/manager/program.cpp index ea5304c..8b4e4af 100644 --- a/manager/program.cpp +++ b/manager/program.cpp @@ -10,6 +10,7 @@ using namespace std; + /** * Constructor * @param executablePath - path to the program that will be run @@ -21,6 +22,8 @@ using namespace std; */ Program::Program(const char * executablePath) : input(NULL), output(NULL), pid(0) { + + int readPipe[2]; int writePipe[2]; assert(pipe(readPipe) == 0); assert(pipe(writePipe) == 0); @@ -88,6 +91,7 @@ Program::~Program() * Sends a message to the wrapped AI program * WARNING: Always prints a new line after the message (so don't include a new line) * This is because everything is always line buffered. + * @returns true if the message was successfully sent; false if it was not (ie: the process was not running!) */ bool Program::SendMessage(const char * print, ...) { @@ -97,12 +101,15 @@ bool Program::SendMessage(const char * print, ...) va_list ap; va_start(ap, print); - vfprintf(output, print, ap); - fprintf(output, "\n"); - + if (vfprintf(output, print, ap) < 0 || fprintf(output, "\n") < 0) + { + va_end(ap); + return false; + } + va_end(ap); - va_end(ap); + return true; } @@ -161,3 +168,5 @@ bool Program::Running() const } + +