diff options
| author | Ricky Curtice <kf6kjg+hg@gmail.com> | 2011-04-29 14:23:27 -0700 |
|---|---|---|
| committer | Ricky Curtice <kf6kjg+hg@gmail.com> | 2011-04-29 14:23:27 -0700 |
| commit | 89216a6c213c126b8ab6dacaeb21340fa8f7a001 (patch) | |
| tree | 42d83ed5f5d34edf99c4b302d9d6744a33e5098f /indra/llcommon/llprocesslauncher.cpp | |
| parent | 26f2762b89705a69e831016ea67af9500907721d (diff) | |
| parent | 363e296dde5fbd56f9bf4382285b162712d582e2 (diff) | |
Merged with viewer-development.
The reason was to manually resolve a couple of merge problems, as upstream has had several changes since this was applied, and some of the changes overlapped.
Diffstat (limited to 'indra/llcommon/llprocesslauncher.cpp')
| -rw-r--r-- | indra/llcommon/llprocesslauncher.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/indra/llcommon/llprocesslauncher.cpp b/indra/llcommon/llprocesslauncher.cpp index 4b0f6b0251..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, NULL, &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. |
