1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// sysProcess.cpp - External process
//
//////////////////////////////////////////////////////////////////////////
// wxWindows headers
#include <wx/wx.h>
// App headers
#include "pgAdmin3.h"
#include "utils/sysProcess.h"
sysProcess::sysProcess(wxEvtHandler *evh)
: wxProcess(evh)
{
pid = 0;
Redirect();
}
sysProcess *sysProcess::Create(const wxString &exec, wxEvtHandler *evh, wxArrayString *env)
{
sysProcess *proc = new sysProcess(evh);
if (env)
proc->SetEnvironment(*env);
if (!proc->Run(exec))
{
delete proc;
proc = 0;
}
return proc;
}
bool sysProcess::Run(const wxString &exec)
{
pid = wxExecute(exec, wxEXEC_ASYNC, this);
return (pid != 0);
}
void sysProcess::SetEnvironment(const wxArrayString &environment)
{
size_t i;
for (i = 0 ; i < environment.GetCount() ; i++)
{
wxString str = environment.Item(i);
wxSetEnv(str.BeforeFirst('='), str.AfterFirst('='));
}
}
void sysProcess::Abort()
{
if (pid)
wxKill(pid, wxSIGTERM);
}
wxString sysProcess::ReadInputStream()
{
if (IsInputAvailable())
return ReadStream(GetInputStream());
return wxEmptyString;
}
wxString sysProcess::ReadErrorStream()
{
if (IsErrorAvailable())
return ReadStream(GetErrorStream());
return wxEmptyString;
}
wxString sysProcess::ReadStream(wxInputStream *input)
{
wxString str;
char buffer[1000 + 1];
size_t size = 1;
while (size && !input->Eof())
{
input->Read(buffer, sizeof(buffer) - 1);
size = input->LastRead();
if (size)
{
buffer[size] = 0;
str.Append(wxString::Format(wxT("%s"), wxString(buffer, wxConvLibc).c_str()));
}
}
return str;
}
|