diff options
Diffstat (limited to 'plugins/PluginUpdater/pu_stub/src/pu_stub.cpp')
| -rw-r--r-- | plugins/PluginUpdater/pu_stub/src/pu_stub.cpp | 32 | 
1 files changed, 30 insertions, 2 deletions
diff --git a/plugins/PluginUpdater/pu_stub/src/pu_stub.cpp b/plugins/PluginUpdater/pu_stub/src/pu_stub.cpp index 60c67f7c1a..c3cd302482 100644 --- a/plugins/PluginUpdater/pu_stub/src/pu_stub.cpp +++ b/plugins/PluginUpdater/pu_stub/src/pu_stub.cpp @@ -21,8 +21,9 @@ void log(const wchar_t *tszFormat, ...)  int CreateDirectoryTreeW(const wchar_t* szDir)  { -	wchar_t szTestDir[MAX_PATH]; -	lstrcpynW(szTestDir, szDir, MAX_PATH); +	wchar_t szTestDir[MAX_PATH+1]; +	if (lstrcpynW(szTestDir, szDir, MAX_PATH) == nullptr) +		szTestDir[MAX_PATH] = 0;  	DWORD dwAttributes = GetFileAttributesW(szTestDir);  	if (dwAttributes != INVALID_FILE_ATTRIBUTES && (dwAttributes & FILE_ATTRIBUTE_DIRECTORY)) @@ -38,6 +39,28 @@ int CreateDirectoryTreeW(const wchar_t* szDir)  	return (CreateDirectoryW(szTestDir, nullptr) == 0) ? GetLastError() : 0;  } +int DeleteDirectoryTreeW(const wchar_t *pwszDirName) +{ +	// file name shall be double sero ended +	wchar_t wszPath[MAX_PATH + 2]; +	if (lstrcpynW(wszPath, pwszDirName, MAX_PATH) == nullptr) +		wszPath[MAX_PATH] = 0; +	wszPath[lstrlenW(wszPath) + 1] = 0; + +	SHFILEOPSTRUCTW file_op = { +		NULL, +		FO_DELETE, +		wszPath, +		L"", +		FOF_NOCONFIRMATION | +		FOF_NOERRORUI | +		FOF_SILENT, +		false, +		0, +		L"" }; +	return SHFileOperationW(&file_op); +} +  void CreatePathToFileW(wchar_t *wszFilePath)  {  	wchar_t* pszLastBackslash = wcsrchr(wszFilePath, '\\'); @@ -132,6 +155,11 @@ int APIENTRY wWinMain(HINSTANCE /*hInstance*/, HINSTANCE, LPTSTR lpCmdLine, int)  			dwError = 0;  			break; +		case 6: // delete folder recursively +			DeleteDirectoryTreeW(ptszFile1); +			dwError = 0; +			break; +  		default:  			dwError = ERROR_UNKNOWN_FEATURE;  		}  | 
