summaryrefslogtreecommitdiff
path: root/indra/llcommon/llprocesslauncher.cpp
diff options
context:
space:
mode:
authorAlain Linden <alain@lindenlab.com>2011-03-17 12:16:41 -0700
committerAlain Linden <alain@lindenlab.com>2011-03-17 12:16:41 -0700
commit313b77fd269665d059e64eee079d21da2a3129c1 (patch)
treefe3cccd7a60c654c5a867b541e83eccd105c5874 /indra/llcommon/llprocesslauncher.cpp
parentabffd7aa4f81d77f4816e4134ba7eea2a5f66f58 (diff)
Fix CHOP-544. Use cwd when creating a process on windows when the llprocesslauncher's working directory is not set. Currently "" will be passed for the working directory which breaks the launching of the updater script.
Diffstat (limited to 'indra/llcommon/llprocesslauncher.cpp')
-rw-r--r--indra/llcommon/llprocesslauncher.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/indra/llcommon/llprocesslauncher.cpp b/indra/llcommon/llprocesslauncher.cpp
index d46188104f..10950181fd 100644
--- a/indra/llcommon/llprocesslauncher.cpp
+++ b/indra/llcommon/llprocesslauncher.cpp
@@ -103,10 +103,30 @@ int LLProcessLauncher::launch(void)
char *args2 = new char[args.size() + 1];
strcpy(args2, args.c_str());
- if( ! CreateProcessA( NULL, args2, NULL, NULL, FALSE, 0, NULL, mWorkingDir.c_str(), &sinfo, &pinfo ) )
+ const char * working_directory = 0;
+ if(!mWorkingDir.empty()) working_directory = mWorkingDir.c_str();
+ if( ! CreateProcessA( NULL, args2, NULL, NULL, FALSE, 0, NULL, working_directory, &sinfo, &pinfo ) )
{
- // TODO: do better than returning the OS-specific error code on failure...
result = GetLastError();
+
+ LPTSTR error_str = 0;
+ if(
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ result,
+ 0,
+ (LPTSTR)&error_str,
+ 0,
+ NULL)
+ != 0)
+ {
+ char message[256];
+ wcstombs(message, error_str, 256);
+ message[255] = 0;
+ llwarns << "CreateProcessA failed: " << message << llendl;
+ LocalFree(error_str);
+ }
+
if(result == 0)
{
// Make absolutely certain we return a non-zero value on failure.