TEST(StdDuck, print_value_function) { CreateEnvironment(); testing::internal::CaptureStdout(); VALUE func = CreateFunction(TestStdDuck::DummyFunc); AddParameter(func, "arg0"); PrintValue(func); ASSERT_STREQ("function(arg0)", testing::internal::GetCapturedStdout().c_str()); FreeEnvironment(); }
TEST(StdDuck, print_value_string) { CreateEnvironment(); testing::internal::CaptureStdout(); VALUE val; val.type = VAL_STRING; val.data.string = "1"; PrintValue(val); ASSERT_STREQ("1", testing::internal::GetCapturedStdout().c_str()); FreeEnvironment(); }
static void MergeProcData(HostData *dst,HostData *src) { TProcessData *s,*d; if(!dst || !dst->ProcData) return; if(!src->ProcData) { FreeProcData(dst); return; } s = src->ProcData; d = dst->ProcData; if( (d->Executable && !s->Executable)|| (d->Executable && s->Executable && strcmp(d->Executable,s->Executable))) ProcStrRemove(&d->Executable,&d->ExeSize); if( (d->WorkingDir && !s->WorkingDir)|| (d->WorkingDir && s->WorkingDir && strcmp(d->WorkingDir,s->WorkingDir))) ProcStrRemove(&d->WorkingDir,&d->WDSize); if( (d->UserOptions && !s->UserOptions)|| (d->UserOptions && s->UserOptions && strcmp(d->UserOptions,s->UserOptions))) ProcStrRemove(&d->UserOptions,&d->OptSize); if( (d->PluginOptions && !s->PluginOptions)|| (d->PluginOptions && s->PluginOptions && strcmp(d->PluginOptions,s->PluginOptions))) ProcStrRemove(&d->PluginOptions,&d->PluginOptSize); if( (d->Environment && !d->Environment) || (d->Environment && s->Environment && (d->EnvSize != s->EnvSize))) FreeEnvironment(dst); if(d->LockIt != s->LockIt) d->LockIt = 2; if(d->LoadProfile != s->LoadProfile) d->LoadProfile = 2; }
BOOL WINAPI DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved) { OSVERSIONINFOW osvi; switch (dwReason) { case DLL_PROCESS_ATTACH://1 /* initialize version info */ //DPRINT1("Process Attach %d\n", nAttachCount); //DPRINT1("Process Attach\n"); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); GetVersionExW( &osvi ); _winver = (osvi.dwMajorVersion << 8) | osvi.dwMinorVersion; _winmajor = osvi.dwMajorVersion; _winminor = osvi.dwMinorVersion; _osplatform = osvi.dwPlatformId; _osver = osvi.dwBuildNumber; hHeap = HeapCreate(0, 100000, 0); if (hHeap == NULL) return FALSE; /* create tls stuff */ if (!CreateThreadData()) return FALSE; if (BlockEnvToEnvironA() < 0) return FALSE; if (BlockEnvToEnvironW() < 0) { FreeEnvironment(_environ); return FALSE; } _acmdln = _strdup(GetCommandLineA()); _wcmdln = _wcsdup(GetCommandLineW()); /* FIXME: more initializations... */ /* Initialization of the WINE code */ msvcrt_init_mt_locks(); msvcrt_init_io(); setlocale(0, "C"); //_setmbcp(_MB_CP_LOCALE); TRACE("Attach done\n"); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: FreeThreadData(NULL); break; case DLL_PROCESS_DETACH: //DPRINT1("Detach %d\n", nAttachCount); //DPRINT("Detach\n"); /* FIXME: more cleanup... */ /* Deinit of the WINE code */ msvcrt_free_io(); msvcrt_free_mt_locks(); _atexit_cleanup(); /* destroy tls stuff */ DestroyThreadData(); if (__winitenv && __winitenv != _wenviron) FreeEnvironment((char**)__winitenv); if (_wenviron) FreeEnvironment((char**)_wenviron); if (__initenv && __initenv != _environ) FreeEnvironment(__initenv); if (_environ) FreeEnvironment(_environ); /* destroy heap */ HeapDestroy(hHeap); TRACE("Detach done\n"); break; } return TRUE; }
BOOL WINAPI DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved) { OSVERSIONINFOW osvi; switch (dwReason) { case DLL_PROCESS_ATTACH: /* initialize version info */ TRACE("Process Attach\n"); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); GetVersionExW( &osvi ); _winver = (osvi.dwMajorVersion << 8) | osvi.dwMinorVersion; _winmajor = osvi.dwMajorVersion; _winminor = osvi.dwMinorVersion; _osplatform = osvi.dwPlatformId; _osver = osvi.dwBuildNumber; /* create tls stuff */ if (!msvcrt_init_tls()) return FALSE; if (BlockEnvToEnvironA() < 0) return FALSE; if (BlockEnvToEnvironW() < 0) { FreeEnvironment(_environ); return FALSE; } _acmdln = _strdup(GetCommandLineA()); _wcmdln = _wcsdup(GetCommandLineW()); /* Initialization of the WINE code */ msvcrt_init_mt_locks(); //msvcrt_init_math(); msvcrt_init_io(); //msvcrt_init_console(); //msvcrt_init_args(); //msvcrt_init_signals(); TRACE("Attach done\n"); break; case DLL_THREAD_ATTACH: //msvcrt_get_thread_data creates data when first called break; case DLL_THREAD_DETACH: msvcrt_free_tls_mem(); break; case DLL_PROCESS_DETACH: TRACE("Detach\n"); /* Deinit of the WINE code */ msvcrt_free_io(); if (reserved) break; msvcrt_free_mt_locks(); //msvcrt_free_console(); //msvcrt_free_args(); //msvcrt_free_signals(); msvcrt_free_tls_mem(); if (!msvcrt_free_tls()) return FALSE; if(global_locale) MSVCRT__free_locale(global_locale); if (__winitenv && __winitenv != _wenviron) FreeEnvironment((char**)__winitenv); if (_wenviron) FreeEnvironment((char**)_wenviron); if (__initenv && __initenv != _environ) FreeEnvironment(__initenv); if (_environ) FreeEnvironment(_environ); TRACE("Detach done\n"); break; } return TRUE; }
STDMETHODIMP PartCoverConnector2::StartTarget( BSTR p_targetPath, BSTR p_targetWorkingDir, BSTR p_targetArguments, VARIANT_BOOL redirectOutput, IConnectorActionCallback* callback) { HRESULT hr; _bstr_t targetPath(p_targetPath); _bstr_t targetWorkingDir(p_targetWorkingDir); _bstr_t targetArguments(p_targetArguments); if (targetWorkingDir.length() == 0 || targetPath.length() == 0 ) return E_INVALIDARG; if(callback != 0 ) callback->OpenMessagePipe(); // init message center if(FAILED(hr = m_center.Open())) return hr; if(callback != 0 ) callback->TargetSetEnvironmentVars(); targetArguments = _bstr_t("\"") + targetPath + _bstr_t("\" ") + targetArguments; // get current working dir and settings StringMap env = ParseEnvironment(); env[_T("Cor_Enable_Profiling")] = _T("1"); env[_T("Cor_Profiler")] = _T("{") _T(DRIVER_CORPROFILER_GUID) _T("}"); env[OPTION_MESSOPT] = m_center.getId(); if (m_driverLogging > 0) { DynamicArray<TCHAR> curBuffer(5); _stprintf_s(curBuffer, curBuffer.size(), _T("%d"), m_driverLogging); env[OPTION_VERBOSE] = curBuffer; } if (m_useFileLogging) { DWORD curLength = ::GetCurrentDirectory(0, NULL); DynamicArray<TCHAR> curBuffer(curLength + 25); if (curLength = ::GetCurrentDirectory(curLength + 1, curBuffer)) { _stprintf_s(curBuffer + curLength, 25, DRIVER_LOG_FILENAME); env[OPTION_LOGFILE] = curBuffer; m_logFile = curBuffer; } } if (m_usePipeLogging) { env[OPTION_LOGPIPE] = _T("1"); } // copy old and new env settings LPTSTR new_env = CreateEnvironment(env); if(callback != 0 ) callback->TargetCreateProcess(); // extract STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); if (redirectOutput == VARIANT_TRUE) { si.dwFlags = STARTF_USESTDHANDLES; si.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); si.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); si.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); } ZeroMemory(&pi, sizeof(pi)); DynamicArray<TCHAR> args(targetArguments.length() + 1); _tcscpy_s(args, targetArguments.length() + 1, targetArguments); BOOL created = ::CreateProcess( NULL, // Application args, // command line NULL, // lpProcessAttributes, NULL, // lpThreadAttributes, redirectOutput == VARIANT_TRUE ? TRUE : FALSE, // bInheritHandles, #ifdef _UNICODE CREATE_UNICODE_ENVIRONMENT | #endif (redirectOutput == VARIANT_TRUE ? 0 : CREATE_NEW_CONSOLE), new_env, targetWorkingDir, &si, &pi ); // clear environment FreeEnvironment(new_env); if (!created) return HRESULT_FROM_WIN32( ::GetLastError() ); if(callback != 0 ) callback->TargetWaitDriver(); if (FAILED(hr = m_center.WaitForClient())) return hr; if(callback != 0 ) callback->DriverConnected(); struct Starter : ITransferrableVisitor { IConnectorActionCallback* m_callback; public: bool readyToGo; Starter(IConnectorActionCallback* callback) : m_callback(callback), readyToGo(false) {} void on(MessageType type) { if (Messages::C_RequestStart == type) readyToGo = true; } void on(FunctionMap& value) {} void on(Rules& value) {} void on(InstrumentResults& value) {} void on(LogMessage& value) { if (m_callback != 0) m_callback->LogMessage(value.getThreadId(), value.getTicks(), _bstr_t(value.getMessage().c_str())); } } messageVisitor(callback); ITransferrable* message; while(SUCCEEDED(m_center.Wait(message))) { message->visit(messageVisitor); destroy(message); if (messageVisitor.readyToGo) break; } if (!messageVisitor.readyToGo) { ATLTRACE("PartCoverConnector2::StartTarget - C_RequestStart wait error"); return E_ABORT; } if(callback != 0 ) callback->DriverSendRules(); m_center.Send(m_rules); m_center.Send(Messages::Message<Messages::C_EndOfInputs>()); if(callback != 0 ) callback->DriverWaitEoIConfirm(); messageVisitor.readyToGo = false; while(SUCCEEDED(m_center.Wait(message))) { message->visit(messageVisitor); destroy(message); if (messageVisitor.readyToGo) break; } return true; }