On 15/04/2008, Reece Dunn msclrhd@googlemail.com wrote:
On 14/04/2008, Alexandre Julliard julliard@winehq.org wrote:
"Reece Dunn" msclrhd@googlemail.com writes:
@@ -459,7 +458,9 @@ HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR lpszPath, DWORD dwMode, switch(STGM_CREATE_MODE(dwMode)) { case STGM_FAILIFTHERE:
- dwCreate = OPEN_EXISTING;
- if (bCreate && PathFileExistsW(lpszPath))
return HRESULT_FROM_WIN32(ERROR_FILE_EXISTS);
- dwCreate = bCreate ? CREATE_ALWAYS : OPEN_EXISTING;
That case should be handled by CreateFile, you shouldn't check for the file existence explicitly.
The MSDN documentation for CreateFile (http://msdn2.microsoft.com/en-us/library/aa363858.aspx) suggests that CREATE_NEW has the desired behaviour. However, the Wine implementation is not handling this correctly. Therefore, I'll improve the CreateFile tests to test the CREATE_NEW behaviour.
There were tests for the CREATE_NEW case in kernel32/tests/file.c, verifying this behaviour. I tracked the problem down to a strange way of converting a GetLastError status to a HRESULT. Fixing that got the desired behaviour (see my new patch).
- Reece