//////////////////////////////////////////////////////////////////////////////////// // // Formats Resource. // static DWORD FormatResource(_In_ LPSTR pszResource, _Out_ LPSTR *ppszBuffer, ...) { DWORD dwSize = (DWORD)strlen(pszResource) + MAX_PATH; DWORD dwLoop = 0; va_list vaList; HRESULT hResult = E_FAIL; va_start(vaList, ppszBuffer); // *ppszBuffer should be NULL when passed in. *ppszBuffer = NULL; // Allocate and format the string. do { if(NULL != *ppszBuffer) { delete[] *ppszBuffer; } *ppszBuffer = new CHAR[dwSize]; if(NULL == *ppszBuffer) { goto Cleanup; } hResult = StringCbVPrintfA(*ppszBuffer, dwSize, pszResource, vaList); if(STRSAFE_E_INSUFFICIENT_BUFFER == hResult) { dwSize *= 2; } } while ( FAILED(hResult) && (dwLoop++ < MAX_LOOP)); Cleanup: // Check to see if we hit error. if(FAILED(hResult)) { if(NULL != *ppszBuffer) { delete[] *ppszBuffer; *ppszBuffer = NULL; } } va_end(vaList); if(*ppszBuffer) { DWORD dwToReturn = 0; if(SUCCEEDED(SIZETToDWord(strlen(*ppszBuffer), &dwToReturn))) { return dwToReturn; } } return 0; }
void CoreClrEmbedding::GetPathToBootstrapper(char* pathToBootstrapper, size_t bufferSize) { #ifdef EDGE_PLATFORM_APPLE ssize_t pathLength = proc_pidpath(getpid(), pathToBootstrapper, bufferSize); #elif defined(EDGE_PLATFORM_WINDOWS) DWORD dwBufferSize; SIZETToDWord(bufferSize, &dwBufferSize); size_t pathLength = GetModuleFileName(GetModuleHandle(NULL), pathToBootstrapper, dwBufferSize); #else ssize_t pathLength = readlink("/proc/self/exe", pathToBootstrapper, bufferSize); #endif assert(pathLength > 0); // ensure pathToBootstrapper is null terminated, readlink for example // will not null terminate it. pathToBootstrapper[pathLength] = '\0'; }