1
0
Fork 0
mirror of https://github.com/reactos/reactos.git synced 2025-05-21 10:05:35 +00:00

[SHELL32]

- Fix crash during shell32:shlfileop test.
CORE-4476

svn path=/trunk/; revision=66388
This commit is contained in:
Giannis Adamopoulos 2015-02-21 14:36:22 +00:00
parent 8c7c00cbc2
commit b5ea02031c

View file

@ -1714,6 +1714,10 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
if (!lpFileOp) if (!lpFileOp)
return ERROR_INVALID_PARAMETER; return ERROR_INVALID_PARAMETER;
ret = CoInitialize(NULL);
if (FAILED(ret))
return ret;
check_flags(lpFileOp->fFlags); check_flags(lpFileOp->fFlags);
ZeroMemory(&flFrom, sizeof(FILE_LIST)); ZeroMemory(&flFrom, sizeof(FILE_LIST));
@ -1732,7 +1736,13 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
op.bManyItems = (flFrom.dwNumFiles > 1); op.bManyItems = (flFrom.dwNumFiles > 1);
if (lpFileOp->wFunc != FO_RENAME && !(lpFileOp->fFlags & FOF_SILENT)) { if (lpFileOp->wFunc != FO_RENAME && !(lpFileOp->fFlags & FOF_SILENT)) {
CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_IProgressDialog, (void**) &op.progress); ret = CoCreateInstance(CLSID_ProgressDialog,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARG(IProgressDialog, &op.progress));
if (FAILED(ret))
goto cleanup;
op.progress->StartProgressDialog(op.req->hwnd, NULL, PROGDLG_NORMAL & PROGDLG_AUTOTIME, NULL); op.progress->StartProgressDialog(op.req->hwnd, NULL, PROGDLG_NORMAL & PROGDLG_AUTOTIME, NULL);
_SetOperationTitle(&op); _SetOperationTitle(&op);
_FileOpCountManager(&op, &flFrom); _FileOpCountManager(&op, &flFrom);
@ -1762,6 +1772,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
op.progress->Release(); op.progress->Release();
} }
cleanup:
destroy_file_list(&flFrom); destroy_file_list(&flFrom);
if (lpFileOp->wFunc != FO_DELETE) if (lpFileOp->wFunc != FO_DELETE)
@ -1770,6 +1781,8 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
if (ret == ERROR_CANCELLED) if (ret == ERROR_CANCELLED)
lpFileOp->fAnyOperationsAborted = TRUE; lpFileOp->fAnyOperationsAborted = TRUE;
CoUninitialize();
return ret; return ret;
} }