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
October 2010
----- 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
2 participants
1174 discussions
Start a n
N
ew thread
Vincent Povirk : mscoree: Implement LoadLibraryShim.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: 1682a92dd5552ce2996a9a002fe86adff20fdbe1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1682a92dd5552ce2996a9a002…
Author: Vincent Povirk <vincent(a)codeweavers.com> Date: Wed Oct 27 10:51:19 2010 -0500 mscoree: Implement LoadLibraryShim. --- dlls/mscoree/metahost.c | 17 +++++++++++++++-- dlls/mscoree/mscoree_main.c | 38 +++++++++++++++++++++++++++++++++++--- dlls/mscoree/mscoree_private.h | 2 ++ dlls/mscoree/tests/mscoree.c | 2 +- 4 files changed, 53 insertions(+), 6 deletions(-) diff --git a/dlls/mscoree/metahost.c b/dlls/mscoree/metahost.c index 57fce37..0f28788 100644 --- a/dlls/mscoree/metahost.c +++ b/dlls/mscoree/metahost.c @@ -249,9 +249,17 @@ static HRESULT WINAPI CLRRuntimeInfo_LoadErrorString(ICLRRuntimeInfo* iface, static HRESULT WINAPI CLRRuntimeInfo_LoadLibrary(ICLRRuntimeInfo* iface, LPCWSTR pwzDllName, HMODULE *phndModule) { - FIXME("%p %s %p\n", iface, debugstr_w(pwzDllName), phndModule); + WCHAR version[MAX_PATH]; + HRESULT hr; + DWORD cchBuffer; - return E_NOTIMPL; + TRACE("%p %s %p\n", iface, debugstr_w(pwzDllName), phndModule); + + cchBuffer = MAX_PATH; + hr = ICLRRuntimeInfo_GetVersionString(iface, version, &cchBuffer); + if (FAILED(hr)) return hr; + + return LoadLibraryShim(pwzDllName, version, NULL, phndModule); } static HRESULT WINAPI CLRRuntimeInfo_GetProcAddress(ICLRRuntimeInfo* iface, @@ -947,3 +955,8 @@ HRESULT get_runtime_info(LPCWSTR exefile, LPCWSTR version, LPCWSTR config_file, return CLR_E_SHIM_RUNTIME; } + +HRESULT force_get_runtime_info(ICLRRuntimeInfo **result) +{ + return IUnknown_QueryInterface((IUnknown*)&runtimes[0], &IID_ICLRRuntimeInfo, (void**)result); +} diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c index a57d766..9c91112 100644 --- a/dlls/mscoree/mscoree_main.c +++ b/dlls/mscoree/mscoree_main.c @@ -549,10 +549,42 @@ HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR pExe, LPCWSTR pwszVersion, LPCWST HRESULT WINAPI LoadLibraryShim( LPCWSTR szDllName, LPCWSTR szVersion, LPVOID pvReserved, HMODULE * phModDll) { - FIXME("(%p %s, %p, %p, %p): semi-stub\n", szDllName, debugstr_w(szDllName), szVersion, pvReserved, phModDll); + HRESULT ret=S_OK; + WCHAR dll_filename[MAX_PATH]; + WCHAR version[MAX_PATH]; + static const WCHAR default_version[] = {'v','1','.','1','.','4','3','2','2',0}; + static const WCHAR slash[] = {'\\',0}; + DWORD dummy; - if (phModDll) *phModDll = LoadLibraryW(szDllName); - return S_OK; + TRACE("(%p %s, %p, %p, %p)\n", szDllName, debugstr_w(szDllName), szVersion, pvReserved, phModDll); + + if (!szDllName || !phModDll) + return E_POINTER; + + if (!get_install_root(dll_filename)) + { + ERR("error reading registry key for installroot\n"); + dll_filename[0] = 0; + } + else + { + if (!szVersion) + { + ret = GetCORVersion(version, MAX_PATH, &dummy); + if (SUCCEEDED(ret)) + szVersion = version; + else + szVersion = default_version; + } + strcatW(dll_filename, szVersion); + strcatW(dll_filename, slash); + } + + strcatW(dll_filename, szDllName); + + *phModDll = LoadLibraryW(dll_filename); + + return *phModDll ? S_OK : E_HANDLE; } HRESULT WINAPI LockClrVersion(FLockClrVersionCallback hostCallback, FLockClrVersionCallback *pBeginHostSetup, FLockClrVersionCallback *pEndHostSetup) diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h index 6273b82..62fa0bf 100644 --- a/dlls/mscoree/mscoree_private.h +++ b/dlls/mscoree/mscoree_private.h @@ -48,6 +48,8 @@ typedef struct CLRRuntimeInfo extern HRESULT get_runtime_info(LPCWSTR exefile, LPCWSTR version, LPCWSTR config_file, DWORD startup_flags, DWORD runtimeinfo_flags, BOOL legacy, ICLRRuntimeInfo **result); +extern HRESULT force_get_runtime_info(ICLRRuntimeInfo **result); + /* Mono 2.6 embedding */ typedef struct _MonoDomain MonoDomain; typedef struct _MonoAssembly MonoAssembly; diff --git a/dlls/mscoree/tests/mscoree.c b/dlls/mscoree/tests/mscoree.c index cafd8d8..6426ac6 100644 --- a/dlls/mscoree/tests/mscoree.c +++ b/dlls/mscoree/tests/mscoree.c @@ -241,7 +241,7 @@ static void test_loadlibraryshim(void) } hr = pLoadLibraryShim(nosuchdll, latest, NULL, &hdll); - todo_wine ok(hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); + ok(hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); if (SUCCEEDED(hr)) FreeLibrary(hdll);
1
0
0
0
Vincent Povirk : wine.inf: Add some .NET-related fakedlls.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: 852133973f8d77c0e12fae230895187b537eb1ae URL:
http://source.winehq.org/git/wine.git/?a=commit;h=852133973f8d77c0e12fae230…
Author: Vincent Povirk <vincent(a)codeweavers.com> Date: Wed Oct 27 10:21:38 2010 -0500 wine.inf: Add some .NET-related fakedlls. --- tools/wine.inf.in | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/tools/wine.inf.in b/tools/wine.inf.in index a4434b4..88b79ac 100644 --- a/tools/wine.inf.in +++ b/tools/wine.inf.in @@ -2599,8 +2599,11 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G" 12,,mountmgr.sys 10,Microsoft.NET\Framework\v1.1.4322,aspnet_regiis.exe 10,Microsoft.NET\Framework\v1.1.4322,ngen.exe +10,Microsoft.NET\Framework\v1.1.4322,fusion.dll 10,Microsoft.NET\Framework\v2.0.50727,ngen.exe 10,Microsoft.NET\Framework\v2.0.50727,fusion.dll +10,Microsoft.NET\Framework\v4.0.30319,ngen.exe +10,Microsoft.NET\Framework\v4.0.30319,fusion.dll 11,wbem,mofcomp.exe 16422,Internet Explorer,iexplore.exe 11,,*
1
0
0
0
Vincent Povirk : mscoree: Add tests for LoadLibraryShim.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: a96941a3bfa5d01029efd665a7ad8d41d8f30832 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=a96941a3bfa5d01029efd665a…
Author: Vincent Povirk <vincent(a)codeweavers.com> Date: Tue Oct 26 14:37:28 2010 -0500 mscoree: Add tests for LoadLibraryShim. --- dlls/mscoree/tests/mscoree.c | 130 +++++++++++++++++++++++++++++++++++++++++- 1 files changed, 129 insertions(+), 1 deletions(-) diff --git a/dlls/mscoree/tests/mscoree.c b/dlls/mscoree/tests/mscoree.c index a50ce97..cafd8d8 100644 --- a/dlls/mscoree/tests/mscoree.c +++ b/dlls/mscoree/tests/mscoree.c @@ -25,6 +25,25 @@ static HMODULE hmscoree; static HRESULT (WINAPI *pGetCORVersion)(LPWSTR, DWORD, DWORD*); static HRESULT (WINAPI *pGetCORSystemDirectory)(LPWSTR, DWORD, DWORD*); static HRESULT (WINAPI *pGetRequestedRuntimeInfo)(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, DWORD, LPWSTR, DWORD, DWORD*, LPWSTR, DWORD, DWORD*); +static HRESULT (WINAPI *pLoadLibraryShim)(LPCWSTR, LPCWSTR, LPVOID, HMODULE*); + +static WCHAR tolowerW( WCHAR ch ) +{ + if (ch >= 'A' && ch <= 'Z') return ch|32; + else return ch; +} + +static WCHAR *strstriW( const WCHAR *str, const WCHAR *sub ) +{ + while (*str) + { + const WCHAR *p1 = str, *p2 = sub; + while (*p1 && *p2 && tolowerW(*p1) == tolowerW(*p2)) { p1++; p2++; } + if (!*p2) return (WCHAR *)str; + str++; + } + return NULL; +} static BOOL init_functionpointers(void) { @@ -39,8 +58,9 @@ static BOOL init_functionpointers(void) pGetCORVersion = (void *)GetProcAddress(hmscoree, "GetCORVersion"); pGetCORSystemDirectory = (void *)GetProcAddress(hmscoree, "GetCORSystemDirectory"); pGetRequestedRuntimeInfo = (void *)GetProcAddress(hmscoree, "GetRequestedRuntimeInfo"); + pLoadLibraryShim = (void *)GetProcAddress(hmscoree, "LoadLibraryShim"); - if (!pGetCORVersion || !pGetCORSystemDirectory || !pGetRequestedRuntimeInfo) + if (!pGetCORVersion || !pGetCORSystemDirectory || !pGetRequestedRuntimeInfo || !pLoadLibraryShim) { win_skip("functions not available\n"); FreeLibrary(hmscoree); @@ -129,12 +149,120 @@ static void test_versioninfo(void) ok(!lstrcmpW(version, v2_0), "version is %s , expected %s\n", wine_dbgstr_w(version), wine_dbgstr_w(v2_0)); } +static void test_loadlibraryshim(void) +{ + const WCHAR v4_0[] = {'v','4','.','0','.','3','0','3','1','9',0}; + const WCHAR v2_0[] = {'v','2','.','0','.','5','0','7','2','7',0}; + const WCHAR v1_1[] = {'v','1','.','1','.','4','3','2','2',0}; + const WCHAR vbogus[] = {'v','b','o','g','u','s',0}; + const WCHAR fusion[] = {'f','u','s','i','o','n',0}; + const WCHAR fusiondll[] = {'f','u','s','i','o','n','.','d','l','l',0}; + const WCHAR nosuchdll[] = {'j','n','v','n','l','.','d','l','l',0}; + const WCHAR gdipdll[] = {'g','d','i','p','l','u','s','.','d','l','l',0}; + const WCHAR gdidll[] = {'g','d','i','3','2','.','d','l','l',0}; + HRESULT hr; + const WCHAR *latest = NULL; + HMODULE hdll; + WCHAR dllpath[MAX_PATH]; + + hr = pLoadLibraryShim(fusion, v1_1, NULL, &hdll); + ok(hr == S_OK || hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + { + latest = v1_1; + + GetModuleFileNameW(hdll, dllpath, MAX_PATH); + + todo_wine ok(strstriW(dllpath, v1_1) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + ok(strstriW(dllpath, fusiondll) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + + FreeLibrary(hdll); + } + + hr = pLoadLibraryShim(fusion, v2_0, NULL, &hdll); + ok(hr == S_OK || hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + { + latest = v2_0; + + GetModuleFileNameW(hdll, dllpath, MAX_PATH); + + todo_wine ok(strstriW(dllpath, v2_0) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + ok(strstriW(dllpath, fusiondll) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + + FreeLibrary(hdll); + } + + hr = pLoadLibraryShim(fusion, v4_0, NULL, &hdll); + ok(hr == S_OK || hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + { + /* LoadLibraryShim with a NULL version prefers 2.0 and earlier */ + if (!latest) + latest = v4_0; + + GetModuleFileNameW(hdll, dllpath, MAX_PATH); + + todo_wine ok(strstriW(dllpath, v4_0) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + ok(strstriW(dllpath, fusiondll) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + + FreeLibrary(hdll); + } + + hr = pLoadLibraryShim(fusion, vbogus, NULL, &hdll); + todo_wine ok(hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + FreeLibrary(hdll); + + hr = pLoadLibraryShim(fusion, NULL, NULL, &hdll); + ok(hr == S_OK, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + { + GetModuleFileNameW(hdll, dllpath, MAX_PATH); + + if (latest) + todo_wine ok(strstriW(dllpath, latest) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + ok(strstriW(dllpath, fusiondll) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + + FreeLibrary(hdll); + } + + hr = pLoadLibraryShim(fusiondll, NULL, NULL, &hdll); + ok(hr == S_OK, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + { + GetModuleFileNameW(hdll, dllpath, MAX_PATH); + + if (latest) + todo_wine ok(strstriW(dllpath, latest) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + ok(strstriW(dllpath, fusiondll) != 0, "incorrect fusion.dll path %s\n", wine_dbgstr_w(dllpath)); + + FreeLibrary(hdll); + } + + hr = pLoadLibraryShim(nosuchdll, latest, NULL, &hdll); + todo_wine ok(hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + FreeLibrary(hdll); + + hr = pLoadLibraryShim(gdipdll, latest, NULL, &hdll); + todo_wine ok(hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + FreeLibrary(hdll); + + hr = pLoadLibraryShim(gdidll, latest, NULL, &hdll); + todo_wine ok(hr == E_HANDLE, "LoadLibraryShim failed, hr=%x\n", hr); + if (SUCCEEDED(hr)) + FreeLibrary(hdll); +} + START_TEST(mscoree) { if (!init_functionpointers()) return; test_versioninfo(); + test_loadlibraryshim(); FreeLibrary(hmscoree); }
1
0
0
0
Austin Lund : comdlg32/tests: Fixed up handling of temporary file in printdlg tests.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: 5f98620c052040f3d853c1a7f11a2ca9e6109d04 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5f98620c052040f3d853c1a7f…
Author: Austin Lund <austin.lund(a)gmail.com> Date: Wed Oct 27 10:32:35 2010 +1000 comdlg32/tests: Fixed up handling of temporary file in printdlg tests. --- dlls/comdlg32/tests/printdlg.c | 12 +++++------- 1 files changed, 5 insertions(+), 7 deletions(-) diff --git a/dlls/comdlg32/tests/printdlg.c b/dlls/comdlg32/tests/printdlg.c index f021b01..cad080d 100644 --- a/dlls/comdlg32/tests/printdlg.c +++ b/dlls/comdlg32/tests/printdlg.c @@ -320,18 +320,14 @@ static void test_abort_proc(void) if (!PrintDlgA(&pd)) { skip("No default printer available.\n"); - ok(DeleteFileA(filename), "Failed to delete temporary file\n"); - return; + goto end; } GlobalFree(pd.hDevMode); GlobalFree(pd.hDevNames); ok(pd.hDC != NULL, "PrintDlg didn't return a DC.\n"); if (!(print_dc = pd.hDC)) - { - ok(DeleteFileA(filename), "Failed to delete temporary file\n"); - return; - } + goto end; ok(SetAbortProc(print_dc, abort_proc) > 0, "SetAbortProc failed\n"); ok(!abort_proc_called, "AbortProc got called unexpectedly by SetAbortProc.\n"); @@ -371,7 +367,9 @@ static void test_abort_proc(void) abort_proc_called = FALSE; end: - ok(DeleteFileA(filename), "Failed to delete temporary file\n"); + SetLastError(0xdeadbeef); + if(!DeleteFileA(filename)) + trace("Failed to delete temporary file (err = %x)\n", GetLastError()); } /* ########################### */
1
0
0
0
Aric Stewart : winegstreamer: Add gstreamer YUV->RGB transform filter.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: 82a232d1544eb71e3db3e94d0f88a63e7968fe4d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=82a232d1544eb71e3db3e94d0…
Author: Aric Stewart <aric(a)codeweavers.com> Date: Wed Oct 27 13:14:15 2010 -0500 winegstreamer: Add gstreamer YUV->RGB transform filter. --- dlls/winegstreamer/gst_guids.h | 1 + dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/gsttffilter.c | 124 ++++++++++++++++++++++++++++++++++++++ dlls/winegstreamer/main.c | 35 +++++++++++ 4 files changed, 161 insertions(+), 0 deletions(-) diff --git a/dlls/winegstreamer/gst_guids.h b/dlls/winegstreamer/gst_guids.h index 8997d94..4445578 100644 --- a/dlls/winegstreamer/gst_guids.h +++ b/dlls/winegstreamer/gst_guids.h @@ -24,3 +24,4 @@ DEFINE_GUID(CLSID_Gstreamer_Splitter, 0xf9d8d64e, 0xa144, 0x47dc, 0x8e, 0xe0, 0xf5, 0x34, 0x98, 0x37, 0x2c, 0x29); DEFINE_GUID(WINESUBTYPE_Gstreamer, 0xffffffff, 0x128f, 0x4dd1, 0xad, 0x22, 0xbe, 0xcf, 0xa6, 0x6c, 0xe7, 0xaa); +DEFINE_GUID(CLSID_Gstreamer_YUV, 0x2d5507df, 0x5ac9, 0x4bb9, 0x9c, 0x09, 0xb2, 0x80, 0xfc, 0x0b, 0xce, 0x01); diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 6838419..a11e8ae 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -40,6 +40,7 @@ /* enum media */ void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE * pmt); +IUnknown * CALLBACK Gstreamer_YUV_create(IUnknown *pUnkOuter, HRESULT *phr); IUnknown * CALLBACK Gstreamer_Splitter_create(IUnknown *pUnkOuter, HRESULT *phr); void g_thread_impl_init(void); diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c index f5093b4..7a13e6f 100644 --- a/dlls/winegstreamer/gsttffilter.c +++ b/dlls/winegstreamer/gsttffilter.c @@ -441,6 +441,130 @@ static HRESULT Gstreamer_transform_create(IUnknown *punkout, const CLSID *clsid, return S_OK; } +static HRESULT WINAPI Gstreamer_YUV_QueryConnect(TransformFilter *iface, const AM_MEDIA_TYPE *amt) { + GstTfImpl *This = (GstTfImpl*)iface; + TRACE("%p %p\n", This, amt); + dump_AM_MEDIA_TYPE(amt); + + if (!IsEqualGUID(&amt->majortype, &MEDIATYPE_Video) || + (!IsEqualGUID(&amt->formattype, &FORMAT_VideoInfo) && + !IsEqualGUID(&amt->formattype, &FORMAT_VideoInfo2))) + return S_FALSE; + if (memcmp(&amt->subtype.Data2, &MEDIATYPE_Video.Data2, sizeof(GUID) - sizeof(amt->subtype.Data1))) + return S_FALSE; + switch (amt->subtype.Data1) { + case mmioFOURCC('I','4','2','0'): + case mmioFOURCC('Y','V','1','2'): + case mmioFOURCC('N','V','1','2'): + case mmioFOURCC('N','V','2','1'): + case mmioFOURCC('Y','U','Y','2'): + case mmioFOURCC('Y','V','Y','U'): + return S_OK; + default: + WARN("Unhandled fourcc %s\n", debugstr_an((char*)&amt->subtype.Data1, 4)); + return S_FALSE; + } +} + +static HRESULT WINAPI Gstreamer_YUV_ConnectInput(TransformFilter *tf, PIN_DIRECTION dir, IPin *pin) +{ + return S_OK; +} + +static HRESULT WINAPI Gstreamer_YUV_SetMediaType(TransformFilter *tf, PIN_DIRECTION dir, const AM_MEDIA_TYPE *amt) { + GstTfImpl *This = (GstTfImpl*)tf; + GstCaps *capsin, *capsout; + AM_MEDIA_TYPE *outpmt = &This->tf.pmt; + HRESULT hr; + int avgtime; + DWORD width, height; + + if (dir != PINDIR_INPUT) + return S_OK; + + if (Gstreamer_YUV_QueryConnect(&This->tf, amt) == S_FALSE || !amt->pbFormat) + return E_FAIL; + + FreeMediaType(outpmt); + CopyMediaType(outpmt, amt); + + if (IsEqualGUID(&amt->formattype, &FORMAT_VideoInfo)) { + VIDEOINFOHEADER *vih = (VIDEOINFOHEADER*)outpmt->pbFormat; + avgtime = vih->AvgTimePerFrame; + width = vih->bmiHeader.biWidth; + height = vih->bmiHeader.biHeight; + if ((LONG)vih->bmiHeader.biHeight > 0) + vih->bmiHeader.biHeight = -vih->bmiHeader.biHeight; + vih->bmiHeader.biBitCount = 24; + vih->bmiHeader.biCompression = BI_RGB; + } else { + VIDEOINFOHEADER2 *vih = (VIDEOINFOHEADER2*)outpmt->pbFormat; + avgtime = vih->AvgTimePerFrame; + width = vih->bmiHeader.biWidth; + height = vih->bmiHeader.biHeight; + if ((LONG)vih->bmiHeader.biHeight > 0) + vih->bmiHeader.biHeight = -vih->bmiHeader.biHeight; + vih->bmiHeader.biBitCount = 24; + vih->bmiHeader.biCompression = BI_RGB; + } + if (!avgtime) + avgtime = 10000000 / 30; + + outpmt->subtype = MEDIASUBTYPE_RGB24; + + capsin = gst_caps_new_simple("video/x-raw-yuv", + "format", GST_TYPE_FOURCC, amt->subtype.Data1, + "width", G_TYPE_INT, width, + "height", G_TYPE_INT, height, + "framerate", GST_TYPE_FRACTION, 10000000, avgtime, + NULL); + capsout = gst_caps_new_simple("video/x-raw-rgb", + "endianness", G_TYPE_INT, 4321, + "width", G_TYPE_INT, width, + "height", G_TYPE_INT, height, + "framerate", GST_TYPE_FRACTION, 10000000, avgtime, + "bpp", G_TYPE_INT, 24, + "depth", G_TYPE_INT, 24, + "red_mask", G_TYPE_INT, 0xff, + "green_mask", G_TYPE_INT, 0xff00, + "blue_mask", G_TYPE_INT, 0xff0000, + NULL); + + hr = Gstreamer_transform_ConnectInput(This, amt, capsin, capsout); + gst_caps_unref(capsin); + gst_caps_unref(capsout); + + This->cbBuffer = width * height * 4; + return hr; +} + +static const TransformFilterFuncTable Gstreamer_YUV_vtbl = { + Gstreamer_transform_DecideBufferSize, + Gstreamer_transform_ProcessBegin, + Gstreamer_transform_ProcessData, + Gstreamer_transform_ProcessEnd, + Gstreamer_YUV_QueryConnect, + Gstreamer_YUV_SetMediaType, + Gstreamer_YUV_ConnectInput, + Gstreamer_transform_Cleanup, + Gstreamer_transform_EndOfStream, + Gstreamer_transform_BeginFlush, + Gstreamer_transform_EndFlush, + Gstreamer_transform_NewSegment +}; + +IUnknown * CALLBACK Gstreamer_YUV_create(IUnknown *punkout, HRESULT *phr) +{ + IUnknown *obj = NULL; + if (!Gstreamer_init()) + { + *phr = E_FAIL; + return NULL; + } + *phr = Gstreamer_transform_create(punkout, &CLSID_Gstreamer_YUV, "ffmpegcolorspace", &Gstreamer_YUV_vtbl, (LPVOID*)&obj); + return obj; +} + HRESULT WINAPI GSTTf_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv) { HRESULT hr; diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index 1fafc35..dba15c5 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -45,6 +45,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(gstreamer); static const WCHAR wGstreamer_Splitter[] = {'G','S','t','r','e','a','m','e','r',' ','s','p','l','i','t','t','e','r',' ','f','i','l','t','e','r',0}; +static const WCHAR wGstreamer_YUV[] = +{'G','S','t','r','e','a','m','e','r',' ','Y','U','V',' ','f','i','l','t','e','r',0}; static WCHAR wNull[] = {'\0'}; @@ -93,6 +95,32 @@ static const AMOVIESETUP_FILTER amfSplitter = amfSplitPin }; +static const AMOVIESETUP_PIN amfYUVPin[] = +{ { wNull, + FALSE, FALSE, FALSE, FALSE, + &GUID_NULL, + NULL, + 1, + amfMTvideo + }, + { + wNull, + FALSE, TRUE, FALSE, FALSE, + &GUID_NULL, + NULL, + 1, + amfMTvideo + }, +}; + +static const AMOVIESETUP_FILTER amfYUV = +{ &CLSID_Gstreamer_YUV, + wGstreamer_YUV, + MERIT_UNLIKELY, + 2, + amfYUVPin +}; + FactoryTemplate const g_Templates[] = { { wGstreamer_Splitter, @@ -101,6 +129,13 @@ FactoryTemplate const g_Templates[] = { NULL, &amfSplitter, }, + { + wGstreamer_YUV, + &CLSID_Gstreamer_YUV, + Gstreamer_YUV_create, + NULL, + &amfYUV, + }, }; const int g_cTemplates = sizeof(g_Templates) / sizeof (g_Templates[0]);
1
0
0
0
Aric Stewart : winegstreamer: Add structure for gstreamer transform filters .
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: aeb19307c7842451c88def79bcffb1fc451fc569 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=aeb19307c7842451c88def79b…
Author: Aric Stewart <aric(a)codeweavers.com> Date: Wed Oct 27 13:14:06 2010 -0500 winegstreamer: Add structure for gstreamer transform filters. --- dlls/winegstreamer/Makefile.in | 1 + dlls/winegstreamer/gsttffilter.c | 475 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 476 insertions(+), 0 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=aeb19307c7842451c88de…
1
0
0
0
Adam Martinson : msxml3/tests: Add namespace-related XSLPattern tests.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: 35643b73e352f61b0b98f5da087e0509a58dc647 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=35643b73e352f61b0b98f5da0…
Author: Adam Martinson <amartinson(a)codeweavers.com> Date: Wed Oct 27 09:37:36 2010 -0500 msxml3/tests: Add namespace-related XSLPattern tests. --- dlls/msxml3/tests/domdoc.c | 58 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 58 insertions(+), 0 deletions(-) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 80557f3..039d9cd 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -6481,6 +6481,64 @@ static void test_XSLPattern(void) if (len) expect_list_and_release(list, "E2.E2.D1 E3.E2.D1"); + /* namespace handling */ + /* no registered namespaces */ + ole_check(IXMLDOMDocument2_setProperty(doc, _bstr_("SelectionNamespaces"), _variantbstr_(""))); + list = NULL; + + /* prefixes don't need to be registered, you may use them as they are in the doc */ + todo_wine ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//bar:x"), &list)); + if (list) + { + len = 0; + ole_check(IXMLDOMNodeList_get_length(list, &len)); + todo_wine ok(len != 0, "expected filled list\n"); + if (len) + todo_wine expect_list_and_release(list, "E5.E1.E4.E1.E2.D1 E6.E2.E4.E1.E2.D1"); + } + + /* prefixes must be explicitly specified in the name */ + todo_wine ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//foo:elem"), &list)); + if (list) + { + len = 0; + ole_check(IXMLDOMNodeList_get_length(list, &len)); + todo_wine ok(len == 0, "expected empty list\n"); + if (len) + IXMLDOMNodeList_Release(list); + } + + todo_wine ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//foo:c"), &list)); + if (list) + { + len = 0; + ole_check(IXMLDOMNodeList_get_length(list, &len)); + todo_wine ok(len != 0, "expected filled list\n"); + if (len) + todo_wine expect_list_and_release(list, "E3.E4.E2.D1"); + } + + /* explicitly register prefix foo */ + ole_check(IXMLDOMDocument2_setProperty(doc, _bstr_("SelectionNamespaces"), _variantbstr_("xmlns:foo='urn:uuid:86B2F87F-ACB6-45cd-8B77-9BDB92A01A29'"))); + + /* now we get the same behavior as XPath */ + ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//foo:c"), &list)); + len = 0; + ole_check(IXMLDOMNodeList_get_length(list, &len)); + ok(len != 0, "expected filled list\n"); + if (len) + expect_list_and_release(list, "E3.E3.E2.D1 E3.E4.E2.D1"); + + /* set prefix foo to some non-existant namespace */ + ole_check(IXMLDOMDocument2_setProperty(doc, _bstr_("SelectionNamespaces"), _variantbstr_("xmlns:foo='urn:non-existant-foo'"))); + + /* the registered prefix takes precedence */ + ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//foo:c"), &list)); + len = 0; + ole_check(IXMLDOMNodeList_get_length(list, &len)); + ok(len == 0, "expected empty list\n"); + if (len) + IXMLDOMNodeList_Release(list); IXMLDOMDocument2_Release(doc); free_bstrs();
1
0
0
0
Adam Martinson : msxml3: libxml2 error/warning callback functions.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: fec2199f4f49de076a129dc159a65556cd2d54a9 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=fec2199f4f49de076a129dc15…
Author: Adam Martinson <amartinson(a)codeweavers.com> Date: Wed Oct 27 09:35:56 2010 -0500 msxml3: libxml2 error/warning callback functions. --- dlls/msxml3/domdoc.c | 53 ++++++++++++++++++++++++++++++++++++------ dlls/msxml3/main.c | 44 ++++++++++++++++++++++++++++++++++- dlls/msxml3/msxml_private.h | 17 +++++++++++++ dlls/msxml3/queryresult.c | 8 +++++- 4 files changed, 112 insertions(+), 10 deletions(-) diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index 78500e6..8a21402 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -356,6 +356,27 @@ static void sax_characters(void *ctx, const xmlChar *ch, int len) xmlSAX2Characters(ctx, ch, len); } +static void LIBXML2_LOG_CALLBACK sax_error(void* ctx, char const* msg, ...) +{ + va_list ap; + va_start(ap, msg); + LIBXML2_CALLBACK_ERR(doparse, msg, ap); + va_end(ap); +} + +static void LIBXML2_LOG_CALLBACK sax_warning(void* ctx, char const* msg, ...) +{ + va_list ap; + va_start(ap, msg); + LIBXML2_CALLBACK_WARN(doparse, msg, ap); + va_end(ap); +} + +static void sax_serror(void* ctx, xmlErrorPtr err) +{ + LIBXML2_CALLBACK_SERROR(doparse, err); +} + static xmlDocPtr doparse(domdoc* This, char *ptr, int len, xmlChar const* encoding) { xmlDocPtr doc = NULL; @@ -382,9 +403,9 @@ static xmlDocPtr doparse(domdoc* This, char *ptr, int len, xmlChar const* encodi sax_characters, /* ignorableWhitespace */ xmlSAX2ProcessingInstruction, /* processingInstruction */ xmlSAX2Comment, /* comment */ - NULL, /* TODO: warning */ - NULL, /* TODO: error */ - NULL, /* TODO: fatalError */ + sax_warning, /* warning */ + sax_error, /* error */ + sax_error, /* fatalError */ xmlSAX2GetParameterEntity, /* getParameterEntity */ xmlSAX2CDataBlock, /* cdataBlock */ xmlSAX2ExternalSubset, /* externalSubset */ @@ -392,7 +413,7 @@ static xmlDocPtr doparse(domdoc* This, char *ptr, int len, xmlChar const* encodi NULL, /* _private */ xmlSAX2StartElementNs, /* startElementNs */ xmlSAX2EndElementNs, /* endElementNs */ - NULL /* TODO: serror */ + sax_serror /* serror */ }; xmlInitParser(); @@ -403,9 +424,9 @@ static xmlDocPtr doparse(domdoc* This, char *ptr, int len, xmlChar const* encodi return NULL; } - if (pctx->sax) xmlFree(pctx->sax); + if (pctx->sax) xmlFree(pctx->sax); pctx->sax = &sax_handler; - pctx->_private = This; + pctx->_private = This; pctx->recovery = 0; pctx->encoding = xmlStrdup(encoding); xmlParseDocument(pctx); @@ -2417,6 +2438,22 @@ static HRESULT WINAPI domdoc_putref_schemas( return hr; } +static void LIBXML2_LOG_CALLBACK validate_error(void* ctx, char const* msg, ...) +{ + va_list ap; + va_start(ap, msg); + LIBXML2_CALLBACK_ERR(domdoc_validate, msg, ap); + va_end(ap); +} + +static void LIBXML2_LOG_CALLBACK validate_warning(void* ctx, char const* msg, ...) +{ + va_list ap; + va_start(ap, msg); + LIBXML2_CALLBACK_WARN(domdoc_validate, msg, ap); + va_end(ap); +} + static HRESULT WINAPI domdoc_validate( IXMLDOMDocument3* iface, IXMLDOMParseError** err) @@ -2435,8 +2472,8 @@ static HRESULT WINAPI domdoc_validate( } vctx = xmlNewValidCtxt(); - vctx->error = NULL; /* TODO: error callback */ - vctx->warning = NULL; /* TODO: warning callback */ + vctx->error = validate_error; + vctx->warning = validate_warning; if (xmlValidateDocument(vctx, get_doc(This))) { diff --git a/dlls/msxml3/main.c b/dlls/msxml3/main.c index a7c35f9..133a914 100644 --- a/dlls/msxml3/main.c +++ b/dlls/msxml3/main.c @@ -42,6 +42,48 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml); #ifdef HAVE_LIBXML2 +void wineXmlCallbackLog(char const* caller, xmlErrorLevel lvl, char const* msg, va_list ap) +{ + char* buf = NULL; + int len = 32, needed; + enum __wine_debug_class dbcl = __WINE_DBCL_ERR; + switch (lvl) + { + case XML_ERR_NONE: + dbcl = __WINE_DBCL_TRACE; + break; + case XML_ERR_WARNING: + dbcl = __WINE_DBCL_WARN; + break; + default: + break; + } + + if (ap) + { + do + { + heap_free(buf); + buf = heap_alloc(len); + needed = vsnprintf(buf, len, msg, ap); + if (needed == -1) + len *= 2; + else if (needed >= len) + len = needed + 1; + else + needed = 0; + } + while (needed); + + wine_dbg_log(dbcl, &__wine_dbch_msxml, caller, buf); + heap_free(buf); + } + else + { + wine_dbg_log(dbcl, &__wine_dbch_msxml, caller, msg); + } +} + /* Support for loading xml files from a Wine Windows drive */ static int wineXmlMatchCallback (char const * filename) { @@ -115,7 +157,7 @@ DECL_FUNCPTR(xsltApplyStylesheet); DECL_FUNCPTR(xsltCleanupGlobals); DECL_FUNCPTR(xsltFreeStylesheet); DECL_FUNCPTR(xsltParseStylesheetDoc); -# undef MAKE_FUNCPTR +# undef DECL_FUNCPTR #endif static void init_libxslt(void) diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h index bccce1c..7fcfea7 100644 --- a/dlls/msxml3/msxml_private.h +++ b/dlls/msxml3/msxml_private.h @@ -106,6 +106,8 @@ BOOL dispex_query_interface(DispatchEx*,REFIID,void**); #include <libxml/parser.h> #endif +#include <libxml/xmlerror.h> + /* constructors */ extern IUnknown *create_domdoc( xmlNodePtr document ); extern IUnknown *create_xmldoc( void ); @@ -140,6 +142,21 @@ extern xmlNodePtr xmldoc_unlink_xmldecl(xmlDocPtr doc); extern HRESULT XMLElement_create( IUnknown *pUnkOuter, xmlNodePtr node, LPVOID *ppObj, BOOL own ); +extern void wineXmlCallbackLog(char const* caller, xmlErrorLevel lvl, char const* msg, va_list ap); + +#define LIBXML2_LOG_CALLBACK __WINE_PRINTF_ATTR(2,3) + +#define LIBXML2_CALLBACK_TRACE(caller, msg, ap) \ + wineXmlCallbackLog(#caller, XML_ERR_NONE, msg, ap) + +#define LIBXML2_CALLBACK_WARN(caller, msg, ap) \ + wineXmlCallbackLog(#caller, XML_ERR_WARNING, msg, ap) + +#define LIBXML2_CALLBACK_ERR(caller, msg, ap) \ + wineXmlCallbackLog(#caller, XML_ERR_ERROR, msg, ap) + +#define LIBXML2_CALLBACK_SERROR(caller, err) \ + wineXmlCallbackLog(#caller, err->level, err->message, NULL) /* IXMLDOMNode Internal Structure */ typedef struct _xmlnode diff --git a/dlls/msxml3/queryresult.c b/dlls/msxml3/queryresult.c index ffb16fc..70848d4 100644 --- a/dlls/msxml3/queryresult.c +++ b/dlls/msxml3/queryresult.c @@ -491,6 +491,11 @@ void XSLPattern_OP_IGEq(xmlXPathParserContextPtr pctx, int nargs) xmlFree(arg2); } +static void query_serror(void* ctx, xmlErrorPtr err) +{ + LIBXML2_CALLBACK_SERROR(queryresult_create, err); +} + HRESULT queryresult_create(xmlNodePtr node, LPCWSTR szQuery, IXMLDOMNodeList **out) { queryresult *This = heap_alloc_zero(sizeof(queryresult)); @@ -513,6 +518,7 @@ HRESULT queryresult_create(xmlNodePtr node, LPCWSTR szQuery, IXMLDOMNodeList **o This->node = node; xmldoc_add_ref(This->node->doc); + ctxt->error = query_serror; ctxt->node = node; registerNamespaces(ctxt); @@ -545,7 +551,7 @@ HRESULT queryresult_create(xmlNodePtr node, LPCWSTR szQuery, IXMLDOMNodeList **o xmlXPathRegisterFunc(ctxt, (xmlChar const*)"OP_IGEq", XSLPattern_OP_IGEq); } - This->result = xmlXPathEval(str, ctxt); + This->result = xmlXPathEvalExpression(str, ctxt); if (!This->result || This->result->type != XPATH_NODESET) { hr = E_FAIL;
1
0
0
0
Alexandre Julliard : winegcc: Fix the lib dir detection.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: 62f9966fdc8e37720d9ad60a87592b0a593a03a9 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=62f9966fdc8e37720d9ad60a8…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Oct 28 11:45:05 2010 +0200 winegcc: Fix the lib dir detection. Spotted by André Hentschel. --- tools/winegcc/winegcc.c | 22 +++++++++++++++------- 1 files changed, 15 insertions(+), 7 deletions(-) diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index bec4be3..dcfe778 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -340,28 +340,36 @@ static int check_platform( struct options *opts, const char *file ) static char *get_lib_dir( struct options *opts ) { static const char *stdlibpath[] = { LIBDIR, "/usr/lib", "/usr/local/lib", "/lib" }; + static const char libwine[] = "/libwine.so"; unsigned int i; for (i = 0; i < sizeof(stdlibpath)/sizeof(stdlibpath[0]); i++) { - char *p, *buffer = xmalloc( strlen(stdlibpath[i]) + sizeof("32/libwine.so") ); + char *p, *buffer = xmalloc( strlen(stdlibpath[i]) + strlen(libwine) + 3 ); strcpy( buffer, stdlibpath[i] ); p = buffer + strlen(buffer); while (p > buffer && p[-1] == '/') p--; - strcpy( p, "/libwine.so" ); - if (check_platform( opts, buffer )) return buffer; + strcpy( p, libwine ); + if (check_platform( opts, buffer )) goto found; if (p > buffer + 2 && (!memcmp( p - 2, "32", 2 ) || !memcmp( p - 2, "64", 2 ))) p -= 2; if (opts->force_pointer_size == 4 || (!opts->force_pointer_size && opts->target_cpu != CPU_x86_64)) { - strcpy( p, "32/libwine.so" ); - if (check_platform( opts, buffer )) return buffer; + strcpy( p, "32" ); + strcat( p, libwine ); + if (check_platform( opts, buffer )) goto found; } if (opts->force_pointer_size == 8 || (!opts->force_pointer_size && opts->target_cpu == CPU_x86_64)) { - strcpy( p, "64/libwine.so" ); - if (check_platform( opts, buffer )) return buffer; + strcpy( p, "64" ); + strcat( p, libwine ); + if (check_platform( opts, buffer )) goto found; } free( buffer ); + continue; + + found: + buffer[strlen(buffer) - strlen(libwine)] = 0; + return buffer; } return xstrdup( LIBDIR ); }
1
0
0
0
Alexandre Julliard : winegstreamer: Define real DllCanUnloadNow and DllGetClassObject functions.
by Alexandre Julliard
28 Oct '10
28 Oct '10
Module: wine Branch: master Commit: 800cdcfe49abc493c8b49095a6aed4a61a714096 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=800cdcfe49abc493c8b49095a…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Oct 28 11:42:52 2010 +0200 winegstreamer: Define real DllCanUnloadNow and DllGetClassObject functions. --- dlls/winegstreamer/main.c | 16 ++++++++++++++++ dlls/winegstreamer/winegstreamer.spec | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index 57ab39b..1fafc35 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -112,6 +112,22 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) return STRMBASE_DllMain(hInstDLL, fdwReason, lpv); } +/*********************************************************************** + * DllCanUnloadNow + */ +HRESULT WINAPI DllCanUnloadNow(void) +{ + return STRMBASE_DllCanUnloadNow(); +} + +/*********************************************************************** + * DllGetClassObject + */ +HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) +{ + return STRMBASE_DllGetClassObject( rclsid, riid, ppv ); +} + /* GStreamer common functions */ void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE * pmt) diff --git a/dlls/winegstreamer/winegstreamer.spec b/dlls/winegstreamer/winegstreamer.spec index f011ea8..d96cb87 100644 --- a/dlls/winegstreamer/winegstreamer.spec +++ b/dlls/winegstreamer/winegstreamer.spec @@ -1,5 +1,5 @@ @ stdcall -private DllMain(long long ptr) -@ stdcall -private DllCanUnloadNow() STRMBASE_DllCanUnloadNow -@ stdcall -private DllGetClassObject(ptr ptr ptr) STRMBASE_DllGetClassObject +@ stdcall -private DllCanUnloadNow() +@ stdcall -private DllGetClassObject(ptr ptr ptr) @ stdcall -private DllRegisterServer() @ stdcall -private DllUnregisterServer()
1
0
0
0
← Newer
1
2
3
4
5
6
7
8
...
118
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
Results per page:
10
25
50
100
200