]> git.tdb.fi Git - gldbg.git/blobdiff - source/process.cpp
Replace per-file license notices with License.txt
[gldbg.git] / source / process.cpp
index 0fc9e98f6410e0b6657a50106a1d2459385d594e..88cb0fac533ebf3521c1f5e0139cb1eabb550961 100644 (file)
@@ -1,20 +1,14 @@
-/* $Id$
-
-This file is part of gldbg
-Copyright © 2009  Mikko Rasa, Mikkosoft Productions
-Distributed under the GPL
-*/
-
+#include <stdexcept>
 #include <cstdlib>
 #include <cerrno>
 #include <cstring>
+#include <unistd.h>
 #include <sys/ptrace.h>
 #include <sys/wait.h>
-#include <msp/core/except.h>
 #include "process.h"
+#include "strformat.h"
 
 using namespace std;
-using namespace Msp;
 
 Process::Process(const vector<string> &a):
        args(a),
@@ -30,7 +24,7 @@ void Process::setenv(const string &key, const string &value)
 void Process::launch()
 {
        if(state!=INACTIVE)
-               throw InvalidState("Program is already running");
+               throw logic_error("Program is already running");
 
        pid = fork();
        if(pid==0)
@@ -48,7 +42,7 @@ void Process::launch()
        else if(pid>0)
                state = STARTING;
        else
-               throw SystemError("Could not launch process", errno);
+               throw runtime_error(strformat("Could not launch process: %s", strerror(errno)));
 }
 
 int Process::check()
@@ -90,7 +84,7 @@ int Process::check()
 void Process::resume(int sig)
 {
        if(state!=STOPPED)
-               throw InvalidState("Program is not stopped");
+               throw logic_error("Program is not stopped");
        ptrace(PTRACE_CONT, 0, (void *)sig);
        state = RUNNING;
 }
@@ -98,7 +92,7 @@ void Process::resume(int sig)
 void Process::kill()
 {
        if(state==INACTIVE)
-               throw InvalidState("Program is not running");
+               throw logic_error("Program is not running");
        ptrace(PTRACE_KILL, 0, 0);
        // Make the debugger wait() for us
        state = RUNNING;
@@ -108,6 +102,6 @@ long Process::ptrace(int req, void *addr, void *data)
 {
        int ret = ::ptrace((__ptrace_request)req, pid, addr, data);
        if(ret==-1 && ((req!=PTRACE_PEEKTEXT && req!=PTRACE_PEEKDATA && req!=PTRACE_PEEKUSER) || errno))
-               throw SystemError("ptrace error", errno);
+               throw runtime_error(strformat("ptrace error: %s", strerror(errno)));
        return ret;
 }