Add support for specifying child process cwd and env to wxExecute().
Add an optional wxExecuteEnv parameter to wxExecute() which allows to specify the initial working directory and custom environment for the child process. Closes #12163. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65896 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -543,6 +543,43 @@ wxString wxGetCurrentDir()
|
||||
|
||||
#endif // 0
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Environment
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxGetEnvMap(wxEnvVariableHashMap *map)
|
||||
{
|
||||
wxCHECK_MSG( map, false, wxS("output pointer can't be NULL") );
|
||||
|
||||
#if defined(__VISUALC__)
|
||||
wxChar **env = _tenviron;
|
||||
#else // non-MSVC
|
||||
// Not sure if other compilers have _tenviron so use the (more standard)
|
||||
// ANSI version only for them.
|
||||
char ** env = environ;
|
||||
#endif
|
||||
|
||||
if ( env )
|
||||
{
|
||||
wxString name,
|
||||
value;
|
||||
while ( *env )
|
||||
{
|
||||
const wxString var(*env);
|
||||
|
||||
name = var.BeforeFirst(wxS('='), &value);
|
||||
|
||||
(*map)[name] = value;
|
||||
|
||||
env++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxExecute
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -590,13 +627,14 @@ static bool ReadAll(wxInputStream *is, wxArrayString& output)
|
||||
static long wxDoExecuteWithCapture(const wxString& command,
|
||||
wxArrayString& output,
|
||||
wxArrayString* error,
|
||||
int flags)
|
||||
int flags,
|
||||
const wxExecuteEnv *env)
|
||||
{
|
||||
// create a wxProcess which will capture the output
|
||||
wxProcess *process = new wxProcess;
|
||||
process->Redirect();
|
||||
|
||||
long rc = wxExecute(command, wxEXEC_SYNC | flags, process);
|
||||
long rc = wxExecute(command, wxEXEC_SYNC | flags, process, env);
|
||||
|
||||
#if wxUSE_STREAMS
|
||||
if ( rc != -1 )
|
||||
@@ -621,17 +659,19 @@ static long wxDoExecuteWithCapture(const wxString& command,
|
||||
return rc;
|
||||
}
|
||||
|
||||
long wxExecute(const wxString& command, wxArrayString& output, int flags)
|
||||
long wxExecute(const wxString& command, wxArrayString& output, int flags,
|
||||
const wxExecuteEnv *env)
|
||||
{
|
||||
return wxDoExecuteWithCapture(command, output, NULL, flags);
|
||||
return wxDoExecuteWithCapture(command, output, NULL, flags, env);
|
||||
}
|
||||
|
||||
long wxExecute(const wxString& command,
|
||||
wxArrayString& output,
|
||||
wxArrayString& error,
|
||||
int flags)
|
||||
int flags,
|
||||
const wxExecuteEnv *env)
|
||||
{
|
||||
return wxDoExecuteWithCapture(command, output, &error, flags);
|
||||
return wxDoExecuteWithCapture(command, output, &error, flags, env);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user