]> git.tdb.fi Git - builder.git/blobdiff - source/externalaction.cpp
Use mspio for all I/O operations
[builder.git] / source / externalaction.cpp
index 5d01f4f701071fd4b330b26618b897899a59110d..7e0a23de5021bcd7f3211fe201e7f85169727106 100644 (file)
@@ -1,62 +1,26 @@
 /* $Id$
 
 This file is part of builder
-Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2006-200 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
-#include <sys/wait.h>
-#include <iostream>
 #include <cstring>
 #include <cstdlib>
+#include <sys/wait.h>
 #include <msp/fs/dir.h>
+#include <msp/io/print.h>
+#include <msp/strings/utils.h>
 #include "builder.h"
 #include "externalaction.h"
 
 using namespace std;
 using namespace Msp;
 
-int ExternalAction::check()
-{
-       if(builder.get_dry_run())
-       {
-               signal_done.emit();
-               return 0;
-       }
-
-       if(!pid)
-               return exit_code;
-
-       int status;
-       if(waitpid(pid, &status, WNOHANG)==pid)
-       {
-               signal_done.emit();
-               if(WIFEXITED(status))
-                       exit_code=WEXITSTATUS(status);
-               else
-                       exit_code=254;
-               pid=0;
-               return exit_code;
-       }
-       else
-               return -1;
-}
-
-/**
-Starts the external program.  Fill in argv before calling this.
-*/
 void ExternalAction::launch()
 {
        if(builder.get_verbose()>=2)
-       {
-               for(StringList::const_iterator i=argv.begin(); i!=argv.end(); ++i)
-               {
-                       if(i!=argv.begin())
-                               cout<<' ';
-                       cout<<*i;
-               }
-               cout<<'\n';
-       }
+               IO::print("%s\n", join(argv.begin(), argv.end()));
 
        if(builder.get_dry_run())
                pid=-1;
@@ -75,10 +39,36 @@ void ExternalAction::launch()
                        if(!work_dir.empty())
                                FS::chdir(work_dir);
                        execvp(argv_[0], argv_);
-                       cout<<"Couldn't execute "<<argv.front()<<'\n';
+                       IO::print("Couldn't execute %s\n", argv.front());
                        exit(1);
                }
                else if(pid<0)
                        pid=0;
        }
 }
+
+int ExternalAction::check()
+{
+       if(builder.get_dry_run())
+       {
+               signal_done.emit();
+               return 0;
+       }
+
+       if(!pid)
+               return exit_code;
+
+       int status;
+       if(waitpid(pid, &status, WNOHANG)==pid)
+       {
+               signal_done.emit();
+               if(WIFEXITED(status))
+                       exit_code=WEXITSTATUS(status);
+               else
+                       exit_code=254;
+               pid=0;
+               return exit_code;
+       }
+       else
+               return -1;
+}