diff options
| -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 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. | 
