Distributed under the LGPL
*/
-#include <iostream>
#include <sys/wait.h>
#include <fcntl.h>
#include <cstdlib>
#include <cstring>
+#include <msp/io/print.h>
#include "misc.h"
using namespace std;
using namespace Msp;
-string run_command(const StringList &argv)
+string run_command(const StringList &argv, int *status)
{
int pfd[2];
pipe(pfd);
::exit(1);
}
else if(pid==-1)
- cerr<<"Failed to execute "<<argv.front()<<'\n';
+ IO::print(IO::cerr, "Failed to execute %s\n", argv.front());
else
{
close(pfd[1]);
int len=read(pfd[0], buf, sizeof(buf));
if(len<=0)
{
- if(waitpid(pid, 0, WNOHANG))
+ int s;
+ if(waitpid(pid, &s, WNOHANG))
+ {
+ if(status)
+ {
+ if(WIFEXITED(s))
+ *status=WEXITSTATUS(s);
+ else
+ *status=-1;
+ }
break;
+ }
}
else
result.append(buf, len);