winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
November 2009
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
3 participants
910 discussions
Start a n
N
ew thread
Juan Lang : crypt32: Abstract function used to read from reading a serialized store.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: 51a1f5a64241f14d872ccf0b7dfa0c45c2217a24 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=51a1f5a64241f14d872ccf0b7…
Author: Juan Lang <juan.lang(a)gmail.com> Date: Mon Nov 2 12:31:15 2009 -0800 crypt32: Abstract function used to read from reading a serialized store. --- dlls/crypt32/serialize.c | 23 +++++++++++++++++++---- 1 files changed, 19 insertions(+), 4 deletions(-) diff --git a/dlls/crypt32/serialize.c b/dlls/crypt32/serialize.c index 2cc6ffd..45a3e25 100644 --- a/dlls/crypt32/serialize.c +++ b/dlls/crypt32/serialize.c @@ -425,14 +425,18 @@ const void *CRYPT_ReadSerializedElement(const BYTE *pbElement, DWORD cbElement, static const BYTE fileHeader[] = { 0, 0, 0, 0, 'C','E','R','T' }; -BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) +typedef BOOL (*read_serialized_func)(void *handle, void *buffer, + DWORD bytesToRead, DWORD *bytesRead); + +static BOOL CRYPT_ReadSerializedStore(void *handle, + read_serialized_func read_func, HCERTSTORE store) { BYTE fileHeaderBuf[sizeof(fileHeader)]; DWORD read; BOOL ret; /* Failure reading is non-critical, we'll leave the store empty */ - ret = ReadFile(file, fileHeaderBuf, sizeof(fileHeaderBuf), &read, NULL); + ret = read_func(handle, fileHeaderBuf, sizeof(fileHeaderBuf), &read); if (ret) { if (!read) @@ -448,7 +452,7 @@ BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) DWORD bufSize = 0; do { - ret = ReadFile(file, &propHdr, sizeof(propHdr), &read, NULL); + ret = read_func(handle, &propHdr, sizeof(propHdr), &read); if (ret && read == sizeof(propHdr)) { if (contextInterface && context && @@ -470,7 +474,7 @@ BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) } if (buf) { - ret = ReadFile(file, buf, propHdr.cb, &read, NULL); + ret = read_func(handle, buf, propHdr.cb, &read); if (ret && read == propHdr.cb) { if (propHdr.propID == CERT_CERT_PROP_ID) @@ -519,6 +523,17 @@ BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) return ret; } +static BOOL read_file_wrapper(void *handle, void *buffer, DWORD bytesToRead, + DWORD *bytesRead) +{ + return ReadFile(handle, buffer, bytesToRead, bytesRead, NULL); +} + +BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) +{ + return CRYPT_ReadSerializedStore(file, read_file_wrapper, store); +} + static BOOL WINAPI CRYPT_SerializeCertNoHash(PCCERT_CONTEXT pCertContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement) {
1
0
0
0
Eric Pouech : mmsystem.dll16: Fix the callback function.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: ceddc0ae1b95c95a650c121f89e430c5fc82ad67 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ceddc0ae1b95c95a650c121f8…
Author: Eric Pouech <eric.pouech(a)orange.fr> Date: Mon Nov 2 22:17:54 2009 +0100 mmsystem.dll16: Fix the callback function. --- dlls/mmsystem.dll16/message16.c | 39 ++++++++++++++++++--------------------- 1 files changed, 18 insertions(+), 21 deletions(-) diff --git a/dlls/mmsystem.dll16/message16.c b/dlls/mmsystem.dll16/message16.c index a43c559..af1c6c9 100644 --- a/dlls/mmsystem.dll16/message16.c +++ b/dlls/mmsystem.dll16/message16.c @@ -793,12 +793,12 @@ typedef void (*MMSYSTDRV_MAPCB)(DWORD wMsg, DWORD_PTR* dwUser static struct mmsystdrv_thunk { BYTE popl_eax; /* popl %eax (return address) */ - BYTE pushl_func; /* pushl $pfn16 (16bit callback function) */ + BYTE pushl_this; /* pushl this (this very thunk) */ struct mmsystdrv_thunk* this; BYTE pushl_eax; /* pushl %eax */ BYTE jmp; /* ljmp MMDRV_Callback1632 */ DWORD callback; - DWORD pfn16; + DWORD pfn16; /* 16bit callback function */ void* hMmdrv; /* Handle to 32bit mmdrv object */ enum MMSYSTEM_DriverType kind; } *MMSYSTDRV_Thunks; @@ -823,32 +823,29 @@ static struct MMSYSTDRV_Type * MMSYSTDRV_Callback3216 * */ -static LRESULT CALLBACK MMSYSTDRV_Callback3216(struct mmsystdrv_thunk* thunk, DWORD uFlags, HDRVR hDev, +static LRESULT CALLBACK MMSYSTDRV_Callback3216(struct mmsystdrv_thunk* thunk, HDRVR hDev, DWORD wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { + WORD args[8]; + assert(thunk->kind < MMSYSTDRV_MAX); assert(MMSYSTEM_DriversType[thunk->kind].mapcb); MMSYSTEM_DriversType[thunk->kind].mapcb(wMsg, &dwUser, &dwParam1, &dwParam2); - if ((uFlags & DCB_TYPEMASK) == DCB_FUNCTION) - { - WORD args[8]; - /* 16 bit func, call it */ - TRACE("Function (16 bit) !\n"); - - args[7] = HDRVR_16(hDev); - args[6] = wMsg; - args[5] = HIWORD(dwUser); - args[4] = LOWORD(dwUser); - args[3] = HIWORD(dwParam1); - args[2] = LOWORD(dwParam1); - args[1] = HIWORD(dwParam2); - args[0] = LOWORD(dwParam2); - return WOWCallback16Ex(thunk->pfn16, WCB16_PASCAL, sizeof(args), args, NULL); - } - return DriverCallback(thunk->pfn16, uFlags, hDev, wMsg, dwUser, dwParam1, dwParam2); + /* 16 bit func, call it */ + TRACE("Function (16 bit) %x!\n", thunk->pfn16); + + args[7] = HDRVR_16(hDev); + args[6] = wMsg; + args[5] = HIWORD(dwUser); + args[4] = LOWORD(dwUser); + args[3] = HIWORD(dwParam1); + args[2] = LOWORD(dwParam1); + args[1] = HIWORD(dwParam2); + args[0] = LOWORD(dwParam2); + return WOWCallback16Ex(thunk->pfn16, WCB16_PASCAL, sizeof(args), args, NULL); } /****************************************************************** @@ -872,7 +869,7 @@ struct mmsystdrv_thunk* MMSYSTDRV_AddThunk(DWORD pfn16, enum MMSYSTEM_Driv for (thunk = MMSYSTDRV_Thunks; thunk < &MMSYSTDRV_Thunks[MMSYSTDRV_MAX_THUNKS]; thunk++) { thunk->popl_eax = 0x58; /* popl %eax */ - thunk->pushl_func = 0x68; /* pushl $pfn16 */ + thunk->pushl_this = 0x68; /* pushl this */ thunk->this = thunk; thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->jmp = 0xe9; /* jmp MMDRV_Callback3216 */
1
0
0
0
Jörg Höhle : mciwave: Update message and comments .
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: e652b6f6fa6580276d5ccc4146607b7b9ecd590d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=e652b6f6fa6580276d5ccc414…
Author: Jörg Höhle <hoehle(a)users.sourceforge.net> Date: Sat Oct 31 09:11:55 2009 +0100 mciwave: Update message and comments. --- dlls/mciwave/mciwave.c | 18 ++++++++---------- 1 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dlls/mciwave/mciwave.c b/dlls/mciwave/mciwave.c index d15603b..be7d3b1 100644 --- a/dlls/mciwave/mciwave.c +++ b/dlls/mciwave/mciwave.c @@ -1,5 +1,5 @@ /* - * Sample Wine Driver for MCI wave forms + * Wine Driver for MCI wave forms * * Copyright 1994 Martin Ayotte * 1999,2000,2005 Eric Pouech @@ -295,7 +295,7 @@ static DWORD WAVE_mciReadFmt(WINE_MCIWAVE* wmw, const MMCKINFO* pckMainRIFF) } /************************************************************************** - * WAVE_mciDefaultFmt [internal] + * WAVE_mciDefaultFmt [internal] */ static DWORD WAVE_mciDefaultFmt(WINE_MCIWAVE* wmw) { @@ -697,9 +697,7 @@ static void CALLBACK WAVE_mciPlayCallback(HWAVEOUT hwo, UINT uMsg, } /****************************************************************** - * WAVE_mciPlayWaitDone - * - * + * WAVE_mciPlayWaitDone [internal] */ static void WAVE_mciPlayWaitDone(WINE_MCIWAVE* wmw) { @@ -904,7 +902,7 @@ cleanUp: } /************************************************************************** - * WAVE_mciPlayCallback [internal] + * WAVE_mciRecordCallback [internal] */ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, @@ -947,8 +945,7 @@ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg, } /****************************************************************** - * bWAVE_mciRecordWaitDone - * + * WAVE_mciRecordWaitDone [internal] */ static void WAVE_mciRecordWaitDone(WINE_MCIWAVE* wmw) { @@ -991,7 +988,7 @@ static DWORD WAVE_mciRecord(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt wmw->fInput = TRUE; /** This function will be called again by a thread when async is used. - * We have to set MCI_MODE_PLAY before we do this so that the app can spin + * We have to set MCI_MODE_RECORD before we do this so that the app can spin * on MCI_STATUS, so we have to allow it here if we're not going to start this thread. */ if ((wmw->dwStatus != MCI_MODE_STOP) && ((wmw->dwStatus != MCI_MODE_RECORD) && (dwFlags & MCI_WAIT))) { @@ -1331,6 +1328,7 @@ static DWORD WAVE_mciSet(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpPa TRACE("MCI_WAVE_SET_CHANNELS = %d\n", wmw->wfxRef.nChannels); } if (dwFlags & MCI_WAVE_SET_FORMATTAG) { + /* Dangerous because the correct cbSize cannot be set */ wmw->wfxRef.wFormatTag = ((LPMCI_WAVE_SET_PARMS)lpParms)->wFormatTag; TRACE("MCI_WAVE_SET_FORMATTAG = %d\n", wmw->wfxRef.wFormatTag); } @@ -1674,7 +1672,7 @@ LRESULT CALLBACK MCIWAVE_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, case DRV_ENABLE: return 1; case DRV_DISABLE: return 1; case DRV_QUERYCONFIGURE: return 1; - case DRV_CONFIGURE: MessageBoxA(0, "Sample MultiMedia Driver !", "OSS Driver", MB_OK); return 1; + case DRV_CONFIGURE: MessageBoxA(0, "MCI waveaudio Driver !", "Wine Driver", MB_OK); return 1; case DRV_INSTALL: return DRVCNF_RESTART; case DRV_REMOVE: return DRVCNF_RESTART; }
1
0
0
0
Paul Vriens : ddraw/tests: Fix a test failure on systems with no DirectDraw7.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: 8a1f0eed8ee146b20901c1a7085bfcda0266aac2 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=8a1f0eed8ee146b20901c1a70…
Author: Paul Vriens <Paul.Vriens.Wine(a)gmail.com> Date: Mon Nov 2 12:03:32 2009 +0100 ddraw/tests: Fix a test failure on systems with no DirectDraw7. --- dlls/ddraw/tests/ddrawmodes.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/dlls/ddraw/tests/ddrawmodes.c b/dlls/ddraw/tests/ddrawmodes.c index d8026ef..e44c6bc 100644 --- a/dlls/ddraw/tests/ddrawmodes.c +++ b/dlls/ddraw/tests/ddrawmodes.c @@ -654,6 +654,11 @@ static void testddraw7(void) DWORD *pend; hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw7, (void **) &dd7); + if (hr==E_NOINTERFACE) + { + win_skip("DirectDraw7 is not supported\n"); + return; + } ok(hr==DD_OK, "IDirectDraw7_QueryInterface returned %08x\n", hr); if (hr==DD_OK)
1
0
0
0
Paul Vriens : advapi32: Add some input parameter checks to OpenBackupEventLog.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: e94c1ce3aea2f3ccf7468a2ea5aed82df17b013b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=e94c1ce3aea2f3ccf7468a2ea…
Author: Paul Vriens <Paul.Vriens.Wine(a)gmail.com> Date: Mon Nov 2 10:31:17 2009 +0100 advapi32: Add some input parameter checks to OpenBackupEventLog. --- dlls/advapi32/eventlog.c | 36 ++++++++++++++++++++++++++++++++---- dlls/advapi32/tests/eventlog.c | 12 ------------ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/dlls/advapi32/eventlog.c b/dlls/advapi32/eventlog.c index f72dba9..4990112 100644 --- a/dlls/advapi32/eventlog.c +++ b/dlls/advapi32/eventlog.c @@ -378,8 +378,16 @@ BOOL WINAPI NotifyChangeEventLog( HANDLE hEventLog, HANDLE hEvent ) */ HANDLE WINAPI OpenBackupEventLogA( LPCSTR lpUNCServerName, LPCSTR lpFileName ) { - FIXME("(%s,%s) stub\n", debugstr_a(lpUNCServerName), debugstr_a(lpFileName)); - return (HANDLE)0xcafe4242; + LPWSTR uncnameW, filenameW; + HANDLE handle; + + uncnameW = SERV_dup(lpUNCServerName); + filenameW = SERV_dup(lpFileName); + handle = OpenBackupEventLogW(uncnameW, filenameW); + HeapFree(GetProcessHeap(), 0, uncnameW); + HeapFree(GetProcessHeap(), 0, filenameW); + + return handle; } /****************************************************************************** @@ -389,8 +397,28 @@ HANDLE WINAPI OpenBackupEventLogA( LPCSTR lpUNCServerName, LPCSTR lpFileName ) */ HANDLE WINAPI OpenBackupEventLogW( LPCWSTR lpUNCServerName, LPCWSTR lpFileName ) { - FIXME("(%s,%s) stub\n", debugstr_w(lpUNCServerName), debugstr_w(lpFileName)); - return (HANDLE)0xcafe4242; + FIXME("(%s,%s) stub\n", debugstr_w(lpUNCServerName), debugstr_w(lpFileName)); + + if (!lpFileName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + + if (lpUNCServerName && lpUNCServerName[0]) + { + FIXME("Remote server not supported\n"); + SetLastError(RPC_S_SERVER_UNAVAILABLE); + return NULL; + } + + if (GetFileAttributesW(lpFileName) == INVALID_FILE_ATTRIBUTES) + { + SetLastError(ERROR_FILE_NOT_FOUND); + return NULL; + } + + return (HANDLE)0xcafe4242; } /****************************************************************************** diff --git a/dlls/advapi32/tests/eventlog.c b/dlls/advapi32/tests/eventlog.c index 56df6d9..8a96c69 100644 --- a/dlls/advapi32/tests/eventlog.c +++ b/dlls/advapi32/tests/eventlog.c @@ -413,37 +413,25 @@ static void test_openbackup(void) SetLastError(0xdeadbeef); handle = OpenBackupEventLogA(NULL, NULL); - todo_wine - { ok(handle == NULL, "Didn't expect a handle\n"); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } SetLastError(0xdeadbeef); handle = OpenBackupEventLogA(NULL, "idontexist.evt"); - todo_wine - { ok(handle == NULL, "Didn't expect a handle\n"); ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - } SetLastError(0xdeadbeef); handle = OpenBackupEventLogA("IDontExist", NULL); - todo_wine - { ok(handle == NULL, "Didn't expect a handle\n"); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } SetLastError(0xdeadbeef); handle = OpenBackupEventLogA("IDontExist", "idontexist.evt"); - todo_wine - { ok(handle == NULL, "Didn't expect a handle\n"); ok(GetLastError() == RPC_S_SERVER_UNAVAILABLE || GetLastError() == RPC_S_INVALID_NET_ADDR, /* Some Vista and Win7 */ "Expected RPC_S_SERVER_UNAVAILABLE, got %d\n", GetLastError()); - } /* Make a backup eventlog to work with */ DeleteFileA(backup);
1
0
0
0
Paul Vriens : advapi32/tests: Add some OpenBackupEventLog tests.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: 381533e59bfe7c855ddfee11e2c25f173a18c990 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=381533e59bfe7c855ddfee11e…
Author: Paul Vriens <Paul.Vriens.Wine(a)gmail.com> Date: Mon Nov 2 10:14:12 2009 +0100 advapi32/tests: Add some OpenBackupEventLog tests. --- dlls/advapi32/tests/eventlog.c | 102 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 102 insertions(+), 0 deletions(-) diff --git a/dlls/advapi32/tests/eventlog.c b/dlls/advapi32/tests/eventlog.c index f6377a6..56df6d9 100644 --- a/dlls/advapi32/tests/eventlog.c +++ b/dlls/advapi32/tests/eventlog.c @@ -404,6 +404,107 @@ static void test_read(void) CloseEventLog(handle); } +static void test_openbackup(void) +{ + HANDLE handle, handle2, file; + DWORD written; + const char backup[] = "backup.evt"; + const char text[] = "Just some text"; + + SetLastError(0xdeadbeef); + handle = OpenBackupEventLogA(NULL, NULL); + todo_wine + { + ok(handle == NULL, "Didn't expect a handle\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + } + + SetLastError(0xdeadbeef); + handle = OpenBackupEventLogA(NULL, "idontexist.evt"); + todo_wine + { + ok(handle == NULL, "Didn't expect a handle\n"); + ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); + } + + SetLastError(0xdeadbeef); + handle = OpenBackupEventLogA("IDontExist", NULL); + todo_wine + { + ok(handle == NULL, "Didn't expect a handle\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + } + + SetLastError(0xdeadbeef); + handle = OpenBackupEventLogA("IDontExist", "idontexist.evt"); + todo_wine + { + ok(handle == NULL, "Didn't expect a handle\n"); + ok(GetLastError() == RPC_S_SERVER_UNAVAILABLE || + GetLastError() == RPC_S_INVALID_NET_ADDR, /* Some Vista and Win7 */ + "Expected RPC_S_SERVER_UNAVAILABLE, got %d\n", GetLastError()); + } + + /* Make a backup eventlog to work with */ + DeleteFileA(backup); + handle = OpenEventLogA(NULL, "Application"); + BackupEventLogA(handle, backup); + CloseEventLog(handle); + + /* FIXME: Wine stops here */ + if (GetFileAttributesA(backup) == INVALID_FILE_ATTRIBUTES) + { + skip("We don't have a backup eventlog to work with\n"); + return; + } + + SetLastError(0xdeadbeef); + handle = OpenBackupEventLogA("IDontExist", backup); + ok(handle == NULL, "Didn't expect a handle\n"); + ok(GetLastError() == RPC_S_SERVER_UNAVAILABLE || + GetLastError() == RPC_S_INVALID_NET_ADDR, /* Some Vista and Win7 */ + "Expected RPC_S_SERVER_UNAVAILABLE, got %d\n", GetLastError()); + + /* Empty servername should be read as local server */ + handle = OpenBackupEventLogA("", backup); + ok(handle != NULL, "Expected a handle\n"); + CloseEventLog(handle); + + handle = OpenBackupEventLogA(NULL, backup); + ok(handle != NULL, "Expected a handle\n"); + + /* Can we open that same backup eventlog more than once? */ + handle2 = OpenBackupEventLogA(NULL, backup); + ok(handle2 != NULL, "Expected a handle\n"); + ok(handle2 != handle, "Didn't expect the same handle\n"); + CloseEventLog(handle2); + + CloseEventLog(handle); + DeleteFileA(backup); + + /* Is there any content checking done? */ + file = CreateFileA(backup, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL); + CloseHandle(file); + SetLastError(0xdeadbeef); + handle = OpenBackupEventLogA(NULL, backup); + ok(handle == NULL, "Didn't expect a handle\n"); + ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY || + GetLastError() == ERROR_EVENTLOG_FILE_CORRUPT, /* Vista and Win7 */ + "Expected ERROR_NOT_ENOUGH_MEMORY, got %d\n", GetLastError()); + CloseEventLog(handle); + DeleteFileA(backup); + + file = CreateFileA(backup, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL); + WriteFile(file, text, sizeof(text), &written, NULL); + CloseHandle(file); + SetLastError(0xdeadbeef); + handle = OpenBackupEventLogA(NULL, backup); + ok(handle == NULL, "Didn't expect a handle\n"); + ok(GetLastError() == ERROR_EVENTLOG_FILE_CORRUPT, "Expected ERROR_EVENTLOG_FILE_CORRUPT, got %d\n", GetLastError()); + CloseEventLog(handle); + DeleteFileA(backup); +} + START_TEST(eventlog) { SetLastError(0xdeadbeef); @@ -422,5 +523,6 @@ START_TEST(eventlog) test_count(); test_oldest(); test_backup(); + test_openbackup(); test_read(); }
1
0
0
0
Paul Vriens : advapi32/tests: Add some ReadEventLogA tests.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: 531363f6e68c30227c6fcb1e18f39998df05a621 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=531363f6e68c30227c6fcb1e1…
Author: Paul Vriens <Paul.Vriens.Wine(a)gmail.com> Date: Sun Nov 1 16:02:40 2009 +0100 advapi32/tests: Add some ReadEventLogA tests. --- dlls/advapi32/tests/eventlog.c | 149 ++++++++++++++++++++++++++++++++++++++++ include/winnt.h | 24 +++++++ 2 files changed, 173 insertions(+), 0 deletions(-) diff --git a/dlls/advapi32/tests/eventlog.c b/dlls/advapi32/tests/eventlog.c index 9794f30..f6377a6 100644 --- a/dlls/advapi32/tests/eventlog.c +++ b/dlls/advapi32/tests/eventlog.c @@ -256,6 +256,154 @@ static void test_backup(void) DeleteFileA(backup); } +static void test_read(void) +{ + HANDLE handle; + BOOL ret; + DWORD count, toread, read, needed; + void *buf; + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(NULL, 0, 0, NULL, 0, NULL, NULL); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + read = 0xdeadbeef; + SetLastError(0xdeadbeef); + ret = ReadEventLogA(NULL, 0, 0, NULL, 0, &read, NULL); + ok(!ret, "Expected failure\n"); + ok(read == 0xdeadbeef, "Expected 'read' parameter to remain unchanged\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + needed = 0xdeadbeef; + SetLastError(0xdeadbeef); + ret = ReadEventLogA(NULL, 0, 0, NULL, 0, NULL, &needed); + ok(!ret, "Expected failure\n"); + ok(needed == 0xdeadbeef, "Expected 'needed' parameter to remain unchanged\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + /* 'read' and 'needed' are only filled when the needed buffer size is passed back or when the call succeeds */ + SetLastError(0xdeadbeef); + ret = ReadEventLogA(NULL, 0, 0, NULL, 0, &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(NULL, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ, 0, NULL, 0, NULL, NULL); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(NULL, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ, 0, NULL, 0, &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + buf = NULL; + SetLastError(0xdeadbeef); + ret = ReadEventLogA(NULL, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ, + 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + buf = HeapAlloc(GetProcessHeap(), 0, sizeof(EVENTLOGRECORD)); + SetLastError(0xdeadbeef); + ret = ReadEventLogA(NULL, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ, + 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); + HeapFree(GetProcessHeap(), 0, buf); + + handle = OpenEventLogA(NULL, "Application"); + + /* Show that we need the proper dwFlags with a (for the rest) proper call */ + buf = HeapAlloc(GetProcessHeap(), 0, sizeof(EVENTLOGRECORD)); + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(handle, 0, 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(handle, EVENTLOG_SEQUENTIAL_READ, 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(handle, EVENTLOG_SEEK_READ, 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(handle, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ | EVENTLOG_BACKWARDS_READ, + 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(handle, EVENTLOG_SEEK_READ | EVENTLOG_FORWARDS_READ | EVENTLOG_BACKWARDS_READ, + 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = ReadEventLogA(handle, EVENTLOG_SEEK_READ | EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ, + 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + HeapFree(GetProcessHeap(), 0, buf); + + /* First check if there are any records (in practice only on Wine: FIXME) */ + count = 0; + GetNumberOfEventLogRecords(handle, &count); + if (!count) + { + skip("No records in the 'Application' log\n"); + CloseEventLog(handle); + return; + } + + /* Get the buffer size for the first record */ + buf = HeapAlloc(GetProcessHeap(), 0, sizeof(EVENTLOGRECORD)); + read = needed = 0xdeadbeef; + SetLastError(0xdeadbeef); + ret = ReadEventLogA(handle, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ, + 0, buf, sizeof(EVENTLOGRECORD), &read, &needed); + ok(!ret, "Expected failure\n"); + ok(read == 0, "Expected no bytes read\n"); + ok(needed > sizeof(EVENTLOGRECORD), "Expected the needed buffersize to be bigger than sizeof(EVENTLOGRECORD)\n"); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + /* Read the first record */ + toread = needed; + buf = HeapReAlloc(GetProcessHeap(), 0, buf, toread); + read = needed = 0xdeadbeef; + SetLastError(0xdeadbeef); + ret = ReadEventLogA(handle, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ, 0, buf, toread, &read, &needed); + ok(ret, "Expected succes\n"); + ok(read == toread || + broken(read < toread), /* NT4 wants a buffer size way bigger than just 1 record */ + "Expected the requested size to be read\n"); + ok(needed == 0, "Expected no extra bytes to be read\n"); + HeapFree(GetProcessHeap(), 0, buf); + + CloseEventLog(handle); +} + START_TEST(eventlog) { SetLastError(0xdeadbeef); @@ -274,4 +422,5 @@ START_TEST(eventlog) test_count(); test_oldest(); test_backup(); + test_read(); } diff --git a/include/winnt.h b/include/winnt.h index fd267c3..032e9c1 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -4972,6 +4972,30 @@ typedef struct _TAPE_GET_MEDIA_PARAMETERS { #define EVENTLOG_AUDIT_SUCCESS 0x0008 #define EVENTLOG_AUDIT_FAILURE 0x0010 +#define EVENTLOG_SEQUENTIAL_READ 0x0001 +#define EVENTLOG_SEEK_READ 0x0002 +#define EVENTLOG_FORWARDS_READ 0x0004 +#define EVENTLOG_BACKWARDS_READ 0x0008 + +typedef struct _EVENTLOGRECORD { + DWORD Length; + DWORD Reserved; + DWORD RecordNumber; + DWORD TimeGenerated; + DWORD TimeWritten; + DWORD EventID; + WORD EventType; + WORD NumStrings; + WORD EventCategory; + WORD ReservedFlags; + DWORD ClosingRecordNumber; + DWORD StringOffset; + DWORD UserSidLength; + DWORD UserSidOffset; + DWORD DataLength; + DWORD DataOffset; +} EVENTLOGRECORD, *PEVENTLOGRECORD; + #define SERVICE_BOOT_START 0x00000000 #define SERVICE_SYSTEM_START 0x00000001 #define SERVICE_AUTO_START 0x00000002
1
0
0
0
Jacek Caban : mshtml: Moved readystate to HTMLWindow.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: deef1401860ecdebb6bf24950ecc0bcf766bb95e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=deef1401860ecdebb6bf24950…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sun Nov 1 19:25:13 2009 +0100 mshtml: Moved readystate to HTMLWindow. --- dlls/mshtml/editor.c | 6 +++--- dlls/mshtml/htmldoc.c | 5 ++--- dlls/mshtml/htmldoc3.c | 2 +- dlls/mshtml/htmlwindow.c | 1 + dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/mutation.c | 2 +- dlls/mshtml/nsevents.c | 5 ++++- dlls/mshtml/olecmd.c | 2 +- dlls/mshtml/persist.c | 2 +- 9 files changed, 15 insertions(+), 12 deletions(-) diff --git a/dlls/mshtml/editor.c b/dlls/mshtml/editor.c index 651e856..568e127 100644 --- a/dlls/mshtml/editor.c +++ b/dlls/mshtml/editor.c @@ -150,7 +150,7 @@ static DWORD query_ns_edit_status(HTMLDocument *This, const char *nscmd) nsICommandParams *nsparam; PRBool b = FALSE; - if(This->doc_obj->usermode != EDITMODE || This->doc_obj->readystate < READYSTATE_INTERACTIVE) + if(This->doc_obj->usermode != EDITMODE || This->window->readystate < READYSTATE_INTERACTIVE) return OLECMDF_SUPPORTED; if(This->doc_obj->nscontainer && nscmd) { @@ -185,7 +185,7 @@ static DWORD query_align_status(HTMLDocument *This, const char *align_str) nsICommandParams *nsparam; char *align = NULL; - if(This->doc_obj->usermode != EDITMODE || This->doc_obj->readystate < READYSTATE_INTERACTIVE) + if(This->doc_obj->usermode != EDITMODE || This->window->readystate < READYSTATE_INTERACTIVE) return OLECMDF_SUPPORTED; if(This->doc_obj->nscontainer) { @@ -713,7 +713,7 @@ static HRESULT query_justify(HTMLDocument *This, OLECMD *cmd) case IDM_JUSTIFYLEFT: TRACE("(%p) IDM_JUSTIFYLEFT\n", This); /* FIXME: We should set OLECMDF_LATCHED only if it's set explicitly. */ - if(This->doc_obj->usermode != EDITMODE || This->doc_obj->readystate < READYSTATE_INTERACTIVE) + if(This->doc_obj->usermode != EDITMODE || This->window->readystate < READYSTATE_INTERACTIVE) cmd->cmdf = OLECMDF_SUPPORTED; else cmd->cmdf = OLECMDF_SUPPORTED | OLECMDF_ENABLED; diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index bc20a2d..836f1ae 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -455,7 +455,7 @@ static HRESULT WINAPI HTMLDocument_get_readyState(IHTMLDocument2 *iface, BSTR *p if(!p) return E_POINTER; - *p = SysAllocString(readystate_str[This->doc_obj->readystate]); + *p = SysAllocString(readystate_str[This->window->readystate]); return S_OK; } @@ -1503,7 +1503,7 @@ static HRESULT WINAPI DocDispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMemb return E_INVALIDARG; V_VT(pVarResult) = VT_I4; - V_I4(pVarResult) = This->doc_obj->readystate; + V_I4(pVarResult) = This->window->readystate; return S_OK; } @@ -1978,7 +1978,6 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject) doc->basedoc.doc_obj = doc; doc->usermode = UNKNOWN_USERMODE; - doc->readystate = READYSTATE_UNINITIALIZED; doc->nscontainer = NSContainer_Create(doc, NULL); if(!doc->nscontainer) { diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c index e4c2d4f..a00fa95 100644 --- a/dlls/mshtml/htmldoc3.c +++ b/dlls/mshtml/htmldoc3.c @@ -141,7 +141,7 @@ static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, I TRACE("(%p)->(%p)\n", This, p); - if(This->doc_obj->readystate == READYSTATE_UNINITIALIZED) { + if(This->window->readystate == READYSTATE_UNINITIALIZED) { *p = NULL; return S_OK; } diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 6158b32..9f3b3e7 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -1648,6 +1648,7 @@ HRESULT HTMLWindow_Create(HTMLDocumentObj *doc_obj, nsIDOMWindow *nswindow, HTML } window->scriptmode = parent ? parent->scriptmode : SCRIPTMODE_GECKO; + window->readystate = READYSTATE_UNINITIALIZED; list_init(&window->script_hosts); window->task_magic = get_task_target_magic(); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 175dce7..94d835d 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -227,6 +227,7 @@ struct HTMLWindow { nsIDOMWindow *nswindow; HTMLWindow *parent; HTMLFrameBase *frame_element; + READYSTATE readystate; nsChannelBSC *bscallback; IMoniker *mon; @@ -366,7 +367,6 @@ struct HTMLDocumentObj { BOOL focus; USERMODE usermode; - READYSTATE readystate; LPWSTR mime; DWORD update; diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index ba636dd..b3cc62a 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -366,7 +366,7 @@ static void handle_end_load(HTMLDocumentNode *This) TRACE("\n"); if(This != This->basedoc.doc_obj->basedoc.doc_node) { - set_ready_state(This, READYSTATE_INTERACTIVE); + set_ready_state(This->basedoc.window, READYSTATE_INTERACTIVE); return; } diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c index aa87442..096dcb3 100644 --- a/dlls/mshtml/nsevents.c +++ b/dlls/mshtml/nsevents.c @@ -123,7 +123,7 @@ static nsresult NSAPI handle_blur(nsIDOMEventListener *iface, nsIDOMEvent *event TRACE("(%p)\n", doc); - if(!doc) + if(!doc || !doc->basedoc.doc_obj) return NS_ERROR_FAILURE; doc_obj = doc->basedoc.doc_obj; @@ -195,6 +195,9 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event if(doc_obj->usermode == EDITMODE) handle_edit_load(&doc_obj->basedoc); + if(doc->basedoc.window->readystate != READYSTATE_COMPLETE) + set_ready_state(doc->basedoc.window, READYSTATE_COMPLETE); + if(!doc->nsdoc) { ERR("NULL nsdoc\n"); return NS_ERROR_FAILURE; diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c index bd3b162..b54f064 100644 --- a/dlls/mshtml/olecmd.c +++ b/dlls/mshtml/olecmd.c @@ -555,7 +555,7 @@ static HRESULT exec_editmode(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, if(This->doc_obj->frame) IOleInPlaceFrame_SetStatusText(This->doc_obj->frame, NULL); - This->doc_obj->readystate = READYSTATE_UNINITIALIZED; + This->window->readystate = READYSTATE_UNINITIALIZED; if(This->doc_obj->client) { IOleCommandTarget *cmdtrg; diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index ec2c830..805d7f0 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -275,7 +275,7 @@ static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BO void set_ready_state(HTMLWindow *window, READYSTATE readystate) { - window->doc_obj->readystate = readystate; + window->readystate = readystate; if(window->doc_obj->basedoc.window == window) call_property_onchanged(&window->doc_obj->basedoc.cp_propnotif, DISPID_READYSTATE); }
1
0
0
0
Jacek Caban : mshtml: Moved add_script_runner call to push_mutation_queue.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: ccaa3c463194e52de229a655437e1b1cf0ed6d07 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ccaa3c463194e52de229a6554…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sun Nov 1 19:24:55 2009 +0100 mshtml: Moved add_script_runner call to push_mutation_queue. --- dlls/mshtml/mutation.c | 15 +++++++-------- 1 files changed, 7 insertions(+), 8 deletions(-) diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index 03f3e90..ba636dd 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -246,10 +246,12 @@ static void push_mutation_queue(HTMLDocumentNode *doc, DWORD type, nsISupports * if(nsiface) nsISupports_AddRef(nsiface); - if(doc->mutation_queue_tail) + if(doc->mutation_queue_tail) { doc->mutation_queue_tail = doc->mutation_queue_tail->next = elem; - else + }else { doc->mutation_queue = doc->mutation_queue_tail = elem; + add_script_runner(doc); + } } static void pop_mutation_queue(HTMLDocumentNode *doc) @@ -363,8 +365,10 @@ static void handle_end_load(HTMLDocumentNode *This) TRACE("\n"); - if(This != This->basedoc.doc_obj->basedoc.doc_node) + if(This != This->basedoc.doc_obj->basedoc.doc_node) { + set_ready_state(This, READYSTATE_INTERACTIVE); return; + } task = heap_alloc(sizeof(docobj_task_t)); if(!task) @@ -584,7 +588,6 @@ static void NSAPI nsDocumentObserver_EndLoad(nsIDocumentObserver *iface, nsIDocu This->content_ready = TRUE; push_mutation_queue(This, MUTATION_ENDLOAD, NULL); - add_script_runner(This); } static void NSAPI nsDocumentObserver_ContentStatesChanged(nsIDocumentObserver *iface, nsIDocument *aDocument, @@ -646,7 +649,6 @@ static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface, push_mutation_queue(This, MUTATION_COMMENT, (nsISupports*)nscomment); nsIDOMComment_Release(nscomment); - add_script_runner(This); } nsres = nsISupports_QueryInterface(aContent, &IID_nsIDOMHTMLIFrameElement, (void**)&nsiframe); @@ -655,7 +657,6 @@ static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface, push_mutation_queue(This, MUTATION_IFRAME, (nsISupports*)nsiframe); nsIDOMHTMLIFrameElement_Release(nsiframe); - add_script_runner(This); } nsres = nsISupports_QueryInterface(aContent, &IID_nsIDOMHTMLFrameElement, (void**)&nsframe); @@ -664,7 +665,6 @@ static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface, push_mutation_queue(This, MUTATION_FRAME, (nsISupports*)nsframe); nsIDOMHTMLFrameElement_Release(nsframe); - add_script_runner(This); } } @@ -683,7 +683,6 @@ static void NSAPI nsDocumentObserver_DoneAddingChildren(nsIDocumentObserver *ifa push_mutation_queue(This, MUTATION_SCRIPT, (nsISupports*)nsscript); nsIDOMHTMLScriptElement_Release(nsscript); - add_script_runner(This); } }
1
0
0
0
Jacek Caban : mshtml: Handle EndLoad via script runner.
by Alexandre Julliard
03 Nov '09
03 Nov '09
Module: wine Branch: master Commit: 73bf0d8f9a315810194dee87939484233c68febb URL:
http://source.winehq.org/git/wine.git/?a=commit;h=73bf0d8f9a315810194dee879…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sun Nov 1 19:24:34 2009 +0100 mshtml: Handle EndLoad via script runner. --- dlls/mshtml/mutation.c | 99 +++++++++++++++++++++++++++-------------------- 1 files changed, 57 insertions(+), 42 deletions(-) diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index f550809..03f3e90 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -37,6 +37,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); enum { MUTATION_COMMENT, + MUTATION_ENDLOAD, MUTATION_FRAME, MUTATION_IFRAME, MUTATION_SCRIPT @@ -231,6 +232,26 @@ static nsrefcnt NSAPI nsRunnable_Release(nsIRunnable *iface) return htmldoc_release(&This->basedoc); } +static void push_mutation_queue(HTMLDocumentNode *doc, DWORD type, nsISupports *nsiface) +{ + mutation_queue_t *elem; + + elem = heap_alloc(sizeof(mutation_queue_t)); + if(!elem) + return; + + elem->next = NULL; + elem->type = type; + elem->nsiface = nsiface; + if(nsiface) + nsISupports_AddRef(nsiface); + + if(doc->mutation_queue_tail) + doc->mutation_queue_tail = doc->mutation_queue_tail->next = elem; + else + doc->mutation_queue = doc->mutation_queue_tail = elem; +} + static void pop_mutation_queue(HTMLDocumentNode *doc) { mutation_queue_t *tmp = doc->mutation_queue; @@ -242,7 +263,8 @@ static void pop_mutation_queue(HTMLDocumentNode *doc) if(!tmp->next) doc->mutation_queue_tail = NULL; - nsISupports_Release(tmp->nsiface); + if(tmp->nsiface) + nsISupports_Release(tmp->nsiface); heap_free(tmp); } @@ -329,6 +351,34 @@ static nsresult init_frame_window(HTMLDocumentNode *doc, nsISupports *nsunk) return nsres; } +static void parse_complete_proc(task_t *_task) +{ + docobj_task_t *task = (docobj_task_t*)_task; + parse_complete(task->doc); +} + +static void handle_end_load(HTMLDocumentNode *This) +{ + docobj_task_t *task; + + TRACE("\n"); + + if(This != This->basedoc.doc_obj->basedoc.doc_node) + return; + + task = heap_alloc(sizeof(docobj_task_t)); + if(!task) + return; + + task->doc = This->basedoc.doc_obj; + + /* + * This should be done in the worker thread that parses HTML, + * but we don't have such thread (Gecko parses HTML for us). + */ + push_task(&task->header, &parse_complete_proc, This->basedoc.doc_obj->basedoc.task_magic); +} + static nsresult NSAPI nsRunnable_Run(nsIRunnable *iface) { HTMLDocumentNode *This = NSRUNNABLE_THIS(iface); @@ -385,6 +435,10 @@ static nsresult NSAPI nsRunnable_Run(nsIRunnable *iface) break; } + case MUTATION_ENDLOAD: + handle_end_load(This); + break; + case MUTATION_FRAME: init_frame_window(This, This->mutation_queue->nsiface); break; @@ -522,12 +576,6 @@ static void NSAPI nsDocumentObserver_BeginLoad(nsIDocumentObserver *iface, nsIDo { } -static void parse_complete_proc(task_t *_task) -{ - docobj_task_t *task = (docobj_task_t*)_task; - parse_complete(task->doc); -} - static void NSAPI nsDocumentObserver_EndLoad(nsIDocumentObserver *iface, nsIDocument *aDocument) { HTMLDocumentNode *This = NSDOCOBS_THIS(iface); @@ -535,22 +583,8 @@ static void NSAPI nsDocumentObserver_EndLoad(nsIDocumentObserver *iface, nsIDocu TRACE("\n"); This->content_ready = TRUE; - - if(This == This->basedoc.doc_obj->basedoc.doc_node) { - docobj_task_t *task; - - task = heap_alloc(sizeof(docobj_task_t)); - if(!task) - return; - - task->doc = This->basedoc.doc_obj; - - /* - * This should be done in the worker thread that parses HTML, - * but we don't have such thread (Gecko parses HTML for us). - */ - push_task(&task->header, &parse_complete_proc, This->basedoc.doc_obj->basedoc.task_magic); - } + push_mutation_queue(This, MUTATION_ENDLOAD, NULL); + add_script_runner(This); } static void NSAPI nsDocumentObserver_ContentStatesChanged(nsIDocumentObserver *iface, nsIDocument *aDocument, @@ -588,25 +622,6 @@ static void NSAPI nsDocumentObserver_StyleRuleRemoved(nsIDocumentObserver *iface { } -static void push_mutation_queue(HTMLDocumentNode *doc, DWORD type, nsISupports *nsiface) -{ - mutation_queue_t *elem; - - elem = heap_alloc(sizeof(mutation_queue_t)); - if(!elem) - return; - - elem->next = NULL; - elem->type = type; - elem->nsiface = nsiface; - nsISupports_AddRef(nsiface); - - if(doc->mutation_queue_tail) - doc->mutation_queue_tail = doc->mutation_queue_tail->next = elem; - else - doc->mutation_queue = doc->mutation_queue_tail = elem; -} - static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface, nsIDocument *aDocument, nsIContent *aContent) {
1
0
0
0
← Newer
1
...
84
85
86
87
88
89
90
91
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Results per page:
10
25
50
100
200