/************************************************************************* * PathCombine [SHELL32.37] */ LPVOID WINAPI PathCombineAW( LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile) { if (SHELL_OsIsUnicode()) return PathCombineW( szDest, lpszDir, lpszFile ); return PathCombineA( szDest, lpszDir, lpszFile ); }
HRESULT CMayaManager::UI_SaveOptions() { HRESULT hr= S_OK; LPDXCCPROPERTYBAG pBag= NULL; char szSettingFile[MAX_PATH]; MString mszAppDir; MGlobal::executeCommand( "internalVar -userAppDir", mszAppDir, false, false ); PathCombineA( szSettingFile, mszAppDir.asChar(), "DXUIOptions.xml" ); if(DXCC_SUCCEEDED(DXCCCreatePropertyBag(&pBag))) { RECT Location; GetWindowRect(g_Viewer.GetRenderWindow(), &Location); DXCCPROPERTY_KEY key; BOOL boolValue; INT intValue; pBag->AddProperty(PROPERTY_VIEWEROPEN, &key); boolValue= UI_GetViewerStartupState(); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &boolValue); pBag->AddProperty(PROPERTY_VIEWERWND, &key); pBag->SetPropertyValueAsData(key, DXCCPD_STRING, &m_ViewerBinding); pBag->AddProperty(PROPERTY_VIEWERPOSL, &key); pBag->SetPropertyValueAsData(key, DXCCPD_INT, &Location.left); pBag->AddProperty(PROPERTY_VIEWERPOST, &key); pBag->SetPropertyValueAsData(key, DXCCPD_INT, &Location.top); pBag->AddProperty(PROPERTY_VIEWERPOSR, &key); pBag->SetPropertyValueAsData(key, DXCCPD_INT, &Location.right); pBag->AddProperty(PROPERTY_VIEWERPOSB, &key); pBag->SetPropertyValueAsData(key, DXCCPD_INT, &Location.bottom); pBag->AddProperty(PROPERTY_RTPREVIEWING, &key); boolValue= UI_GetPreviewState(); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &boolValue); hr= DXCCSavePropertyBagAsFile(pBag, szSettingFile, VIEWER_OPTIONS_TYPENAME, VIEWER_OPTIONS_VERSION); if(DXCC_FAILED(hr)) DXCC_GOTO_EXIT(e_Exit, FALSE); } e_Exit: DXCC_RELEASE(pBag); return hr; }
void _fastcall CC_Put_globals_Hook(DWORD OutClass) { CHAR szConfigPath[MAX_PATH]; PathCombineA(szConfigPath, g_szDllPath, "YDTrigger.ini"); CreateDefine(BlizzardJ, USE_BJ_ANTI_LEAK); CreateDefine(BlizzardJ, USE_BJ_OPTIMIZATION); CreateDefine(BlizzardJ, USE_BJ_OPTIMIZATION_PRO); CreateDefine(BlizzardJ, USE_BJ_INLINE); CC_PutString(OutClass, 0, "#include <YDTrigger/Import.h>", 1); CC_PutString(OutClass, 0, "#include <YDTrigger/YDTrigger.h>", 1); CC_PutString(OutClass, 0, "globals", 1); ((DWORD*)OutClass)[3]++; }
String openTemporaryFile(const String&, PlatformFileHandle& handle) { handle = INVALID_HANDLE_VALUE; char tempPath[MAX_PATH]; int tempPathLength = ::GetTempPathA(WTF_ARRAY_LENGTH(tempPath), tempPath); if (tempPathLength <= 0 || tempPathLength > WTF_ARRAY_LENGTH(tempPath)) return String(); HCRYPTPROV hCryptProv = 0; if (!CryptAcquireContext(&hCryptProv, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) return String(); char proposedPath[MAX_PATH]; while (1) { char tempFile[] = "XXXXXXXX.tmp"; // Use 8.3 style name (more characters aren't helpful due to 8.3 short file names) const int randomPartLength = 8; if (!CryptGenRandom(hCryptProv, randomPartLength, reinterpret_cast<BYTE*>(tempFile))) break; // Limit to valid filesystem characters, also excluding others that could be problematic, like punctuation. // don't include both upper and lowercase since Windows file systems are typically not case sensitive. const char validChars[] = "0123456789abcdefghijklmnopqrstuvwxyz"; for (int i = 0; i < randomPartLength; ++i) tempFile[i] = validChars[tempFile[i] % (sizeof(validChars) - 1)]; ASSERT(strlen(tempFile) == sizeof(tempFile) - 1); if (!PathCombineA(proposedPath, tempPath, tempFile)) break; // use CREATE_NEW to avoid overwriting an existing file with the same name handle = CreateFileA(proposedPath, GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); if (!isHandleValid(handle) && GetLastError() == ERROR_ALREADY_EXISTS) continue; break; } CryptReleaseContext(hCryptProv, 0); if (!isHandleValid(handle)) return String(); return String::fromUTF8(proposedPath); }
bool WebIO::SetRelativeDirectory(std::string directory) { std::string currentDir; if (WebIO::GetDirectory(currentDir)) { WebIO::FormatPath(directory, true); WebIO::FormatPath(currentDir, true); char path[MAX_PATH] = { 0 }; PathCombineA(path, currentDir.c_str(), directory.c_str()); std::string newPath(path); WebIO::FormatPath(newPath, false); return WebIO::SetDirectory(newPath); } return false; }
int _tmain(int argc, _TCHAR* argv[]) { char *path = NULL, *pathDir = NULL; FILE *fpMview = NULL; FILE *fpDst = NULL; DWORD flag, sizeData, sizeDataDecompressed; if(argc<2)goto err; fpMview = _wfopen(argv[1], L"rb"); if(fpMview==NULL)goto err; path = (char *)malloc(4096); if(path==NULL)goto err; pathDir = (char *)malloc(4096); if(pathDir==NULL)goto err; buf = (BYTE *)malloc(bufSize); if(buf==NULL)goto err; while(1) { flag=0; sizeData=0; sizeDataDecompressed=0; int numPath = freadNullStr(fpMview, path, 4096); if(numPath==0)goto err; SanitizePath(path); freadNullStr(fpMview, NULL, 0); if(fread(&flag, 1, 4, fpMview)!=4)goto err; if(fread(&sizeData, 1, 4, fpMview)!=4)goto err; if(fread(&sizeDataDecompressed, 1, 4, fpMview)!=4)goto err; if(flag & 0x1)printf("\"%s\" flag=%u (compressed!), size=%u, decompressedSize=%u\n", path, flag, sizeData, sizeDataDecompressed); else printf("\"%s\" flag=%u, size=%u\n", path, flag, sizeData); if(PathCombineA(path, "out\\", path)==NULL)goto err; strcpy_s(pathDir, 4096, path); PathRemoveFileSpecA(pathDir); PathAddBackslashA(pathDir); BOOL bRet = MakeSureDirectoryPathExists(pathDir); fpDst = fopen(path, "wb"); if(fpDst==NULL)goto err; if(!FILEtoFILE(fpDst, fpMview, sizeData))goto err; fclose(fpDst); } if(buf)free(buf); if(path)free(path); if(pathDir)free(pathDir); if(fpMview)fclose(fpMview); if(fpDst)fclose(fpDst); return 0; err: if(buf)free(buf); if(path)free(path); if(pathDir)free(pathDir); if(fpMview)fclose(fpMview); if(fpDst)fclose(fpDst); return 0; }
HRESULT CMayaManager::UI_LoadOptions() { HRESULT hr= S_OK; LPDXCCPROPERTYBAG pBag= NULL; char szSettingFile[MAX_PATH]; MString mszAppDir; UINT iProperty; MGlobal::executeCommand( "internalVar -userAppDir", mszAppDir, false, false ); PathCombineA( szSettingFile, mszAppDir.asChar(), "DXUIOptions.xml" ); if(!DXCC_SUCCEEDED(DXCCLoadPropertyBagFromFile(szSettingFile, VIEWER_OPTIONS_TYPENAME, VIEWER_OPTIONS_VERSION, &pBag))) { UI_SaveOptions(); DXCCCreatePropertyBag(&pBag); } { DXCCPROPERTY_KEY key; DXCCPROPERTY_DESC desc; LPCVOID value; key= pBag->GetKey(PROPERTY_VIEWEROPEN); desc= pBag->GetPropertyDesc(key); pBag->GetPropertyValueAsData(key, &value); if(key && *(BOOL*)value) { char PanelName[MAX_PATH]; PanelName[0]= '\0'; MGlobal::executeCommand ("DirectX_SetViewerStartupState(1)"); key= pBag->GetKey(PROPERTY_VIEWERWND); desc= pBag->GetPropertyDesc(key); pBag->GetPropertyValueAsData(key, &value); if(key) { BindViewerToPanel((LPCSTR)value); if(0 == lstrcmpiA((LPCSTR)value, "floating")) { RECT WndRect = {0,0, 640, 480}; key= pBag->GetKey(PROPERTY_VIEWERPOSL); desc= pBag->GetPropertyDesc(key); pBag->GetPropertyValueAsData(key, &value); if(key) { WndRect.left= *(INT*)value; } key= pBag->GetKey(PROPERTY_VIEWERPOST); desc= pBag->GetPropertyDesc(key); pBag->GetPropertyValueAsData(key, &value); if(key) { WndRect.top= *(INT*)value; } key= pBag->GetKey(PROPERTY_VIEWERPOSR); desc= pBag->GetPropertyDesc(key); pBag->GetPropertyValueAsData(key, &value); if(key) { WndRect.right= *(INT*)value; } key= pBag->GetKey(PROPERTY_VIEWERPOSB); desc= pBag->GetPropertyDesc(key); pBag->GetPropertyValueAsData(key, &value); if(key) { WndRect.bottom= *(INT*)value; } MoveWindow(g_Viewer.GetRenderWindow(), WndRect.left, WndRect.top, WndRect.right - WndRect.left, WndRect.bottom - WndRect.top, true); } } } key= pBag->GetKey(PROPERTY_RTPREVIEWING); desc= pBag->GetPropertyDesc(key); pBag->GetPropertyValueAsData(key, &value); if(key) { CStringA cmd; cmd.Format("menuItem -e -cb %d $g_dxPreviewToggle", (*(BOOL*)value)); MGlobal::executeCommand (cmd.GetString()); } UI_SetPreviewState(UI_GetPreviewState()); } return hr; }
HRESULT CMayaManager::GetExportOptions(bool forcePopup) { HRESULT hr= S_OK; LPDXCCPROPERTYBAG pBag= NULL; UINT iProperty; char szSettingFile[MAX_PATH]; MString mszAppDir; DXCCPROPERTY_KEY key= NULL; LPCVOID value= NULL; ZeroMemory(&ExportOpts, sizeof(DXCCSaveSceneArgs)); MGlobal::executeCommand( "internalVar -userAppDir", mszAppDir, false, false ); PathCombineA( szSettingFile, mszAppDir.asChar(), "DXCCExportOptions.xml" ); if(DXCC_SUCCEEDED(DXCCLoadPropertyBagFromFile(szSettingFile, EXPORTER_OPTIONS_TYPENAME, EXPORTER_OPTIONS_VERSION, &pBag))) { key= pBag->GetKey(PROPERTY_POPUP); if(key) { pBag->GetPropertyValueAsData(key, &value); if(forcePopup || *(BOOL*)value) { DXCCShowPropertyBagDialog( pBag, EXPORTER_OPTIONS_TYPENAME, M3dView::applicationShell(), TRUE); } } DXCCSavePropertyBagAsFile( pBag, szSettingFile, EXPORTER_OPTIONS_TYPENAME, EXPORTER_OPTIONS_VERSION); } else { const BOOL True= true; const BOOL False= false; DXCCCreatePropertyBag(&pBag); pBag->AddProperty(PROPERTY_POPUP, &key); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &True); pBag->AddProperty(PROPERTY_MESH, &key); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &True); pBag->AddProperty(PROPERTY_ADJACENCIES, &key); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &True); pBag->AddProperty(PROPERTY_MATERIALS, &key); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &True); pBag->AddProperty(PROPERTY_EFFECTPATH_BOOL, &key); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &False); pBag->AddProperty(PROPERTY_EFFECTPATH_TEXT, &key); pBag->SetPropertyValueAsData(key, DXCCPD_STRING, ""); pBag->AddProperty(PROPERTY_TEXTUREPATH_BOOL, &key); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &False); pBag->AddProperty(PROPERTY_TEXTUREPATH_TEXT, &key); pBag->SetPropertyValueAsData(key, DXCCPD_STRING, ""); pBag->AddProperty(PROPERTY_RELATIVEPATH_BOOL, &key); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &False); pBag->AddProperty(PROPERTY_ANIMATION, &key); pBag->SetPropertyValueAsData(key, DXCCPD_BOOL, &True); hr= DXCCShowPropertyBagDialog(pBag, EXPORTER_OPTIONS_TYPENAME, NULL, TRUE); if(DXCC_FAILED(hr)) DXCC_GOTO_EXIT(e_Exit, FALSE); hr= DXCCSavePropertyBagAsFile( pBag, szSettingFile, EXPORTER_OPTIONS_TYPENAME, EXPORTER_OPTIONS_VERSION); if(DXCC_FAILED(hr)) DXCC_GOTO_EXIT(e_Exit, FALSE); } key= pBag->GetKey(PROPERTY_MESH); pBag->GetPropertyValueAsData(key, &value); ExportOpts.NoMeshes= ! *(BOOL*)value; key= pBag->GetKey(PROPERTY_ADJACENCIES); pBag->GetPropertyValueAsData(key, &value); ExportOpts.NoMeshAdjacencies= ! *(BOOL*)value; key= pBag->GetKey(PROPERTY_MATERIALS); pBag->GetPropertyValueAsData(key, &value); ExportOpts.NoMeshMaterials= ! *(BOOL*)value; key= pBag->GetKey(PROPERTY_EFFECTPATH_BOOL); pBag->GetPropertyValueAsData(key, &value); ExportOpts.ReplaceEffectPaths= *(BOOL*)value; key= pBag->GetKey(PROPERTY_EFFECTPATH_TEXT); pBag->GetPropertyValueAsData(key, &value); StringCchCopyA(ExportOpts.ReplacementEffectPath, MAX_PATH, (LPCSTR)value); key= pBag->GetKey(PROPERTY_TEXTUREPATH_BOOL); pBag->GetPropertyValueAsData(key, &value); ExportOpts.ReplaceTexturePaths= *(BOOL*)value; key= pBag->GetKey(PROPERTY_TEXTUREPATH_TEXT); pBag->GetPropertyValueAsData(key, &value); StringCchCopyA(ExportOpts.ReplacementTexturePath, MAX_PATH, (LPCSTR)value); key= pBag->GetKey(PROPERTY_RELATIVEPATH_BOOL); pBag->GetPropertyValueAsData(key, &value); ExportOpts.RelativePaths= *(BOOL*)value; key= pBag->GetKey(PROPERTY_ANIMATION); pBag->GetPropertyValueAsData(key, &value); ExportOpts.NoAnimation= ! *(BOOL*)value; e_Exit: DXCC_RELEASE(pBag); return hr; }
bool StringPathAppend(std::string* path, const std::string& more) { std::unique_ptr<char[]> buffer(new char[MAX_PATH]); *path = PathCombineA(buffer.get(), path->c_str(), more.c_str()); return !path->empty(); }
bool StringPathCombine(std::string* dest, const std::string& path, const std::string& more) { std::unique_ptr<char[]> buffer(new char[MAX_PATH]); *dest = PathCombineA(buffer.get(), path.c_str(), more.c_str()); return !dest->empty(); }
BOOL FilesPathCombineA(LPSTR dest, const LPSTR dir, const LPSTR file) { LPSTR p = (LPSTR)file; if(p != NULL)while(*p == '\\' || *p == '/')p++; return PathCombineA(dest, dir, p) == NULL ? FALSE : TRUE; }