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 2017
----- 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
478 discussions
Start a n
N
ew thread
Nikolay Sivov : comctl32/listview: Pass WM_NCCREATE down to default procedure.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: ee7ddd1ed38a3b2f41bdb676f42e3453021968c1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ee7ddd1ed38a3b2f41bdb676f…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Tue Oct 10 20:37:18 2017 +0300 comctl32/listview: Pass WM_NCCREATE down to default procedure. Problem analyzed by Vadim Druzhin <cdslow(a)mail.ru>. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/comctl32/listview.c | 7 ++++--- dlls/comctl32/tests/listview.c | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 73eceff..3587797 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -9473,7 +9473,7 @@ static VOID CALLBACK LISTVIEW_DelayedEditItem(HWND hwnd, UINT uMsg, UINT_PTR idE * Success: TRUE * Failure: FALSE */ -static LRESULT LISTVIEW_NCCreate(HWND hwnd, const CREATESTRUCTW *lpcs) +static LRESULT LISTVIEW_NCCreate(HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs) { LISTVIEW_INFO *infoPtr; LOGFONTW logFont; @@ -9532,7 +9532,8 @@ static LRESULT LISTVIEW_NCCreate(HWND hwnd, const CREATESTRUCTW *lpcs) if (!(infoPtr->hdpaPosX = DPA_Create(10))) goto fail; if (!(infoPtr->hdpaPosY = DPA_Create(10))) goto fail; if (!(infoPtr->hdpaColumns = DPA_Create(10))) goto fail; - return TRUE; + + return DefWindowProcW(hwnd, WM_NCCREATE, wParam, (LPARAM)lpcs); fail: DestroyWindow(infoPtr->hwndHeader); @@ -11691,7 +11692,7 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return LISTVIEW_Command(infoPtr, wParam, lParam); case WM_NCCREATE: - return LISTVIEW_NCCreate(hwnd, (LPCREATESTRUCTW)lParam); + return LISTVIEW_NCCreate(hwnd, wParam, (LPCREATESTRUCTW)lParam); case WM_CREATE: return LISTVIEW_Create(hwnd, (LPCREATESTRUCTW)lParam); diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 4bc95bb..0c1d878 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -1523,6 +1523,8 @@ static LRESULT CALLBACK create_test_wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, static void test_create(void) { + static const WCHAR testtextW[] = {'t','e','s','t',' ','t','e','x','t',0}; + char buff[16]; HWND hList; HWND hHeader; LONG_PTR ret; @@ -1734,6 +1736,23 @@ static void test_create(void) ok_sequence(sequences, PARENT_SEQ_INDEX, create_ownerdrawfixed_parent_seq, "created with LVS_OWNERDRAWFIXED|LVS_REPORT - parent seq", FALSE); DestroyWindow(hList); + + /* Test that window text is preserved. */ + hList = CreateWindowExA(0, WC_LISTVIEWA, "test text", WS_CHILD | WS_BORDER | WS_VISIBLE, + 0, 0, 100, 100, hwndparent, NULL, GetModuleHandleA(NULL), NULL); + ok(hList != NULL, "Failed to create ListView window.\n"); + *buff = 0; + GetWindowTextA(hList, buff, sizeof(buff)); + ok(!strcmp(buff, "test text"), "Unexpected window text %s.\n", buff); + DestroyWindow(hList); + + hList = CreateWindowExW(0, WC_LISTVIEWW, testtextW, WS_CHILD | WS_BORDER | WS_VISIBLE, + 0, 0, 100, 100, hwndparent, NULL, GetModuleHandleA(NULL), NULL); + ok(hList != NULL, "Failed to create ListView window.\n"); + *buff = 0; + GetWindowTextA(hList, buff, sizeof(buff)); + ok(!strcmp(buff, "test text"), "Unexpected window text %s.\n", buff); + DestroyWindow(hList); } static void test_redraw(void)
1
0
0
0
Stefan Dösinger : msvcp140/tests: Port test_Unlink to msvcp140.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: b91fdc7700e79661bfca3aee3dc0be2226ec9d92 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b91fdc7700e79661bfca3aee3…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Tue Oct 10 17:09:46 2017 +0200 msvcp140/tests: Port test_Unlink to msvcp140. Signed-off-by: Stefan Dösinger <stefan(a)codeweavers.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcp140/tests/msvcp140.c | 84 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/dlls/msvcp140/tests/msvcp140.c b/dlls/msvcp140/tests/msvcp140.c index 9b1d7b1..620e931 100644 --- a/dlls/msvcp140/tests/msvcp140.c +++ b/dlls/msvcp140/tests/msvcp140.c @@ -169,12 +169,17 @@ static void (__cdecl *p_Close_dir)(void*); static MSVCP_bool (__cdecl *p_Current_get)(WCHAR *); static MSVCP_bool (__cdecl *p_Current_set)(WCHAR const *); static ULONGLONG (__cdecl *p_File_size)(WCHAR const *); +static int (__cdecl *p_Link)(WCHAR const*, WCHAR const*); static enum file_type (__cdecl *p_Lstat)(WCHAR const *, int *); +static int (__cdecl *p_Make_dir)(WCHAR const*); static void* (__cdecl *p_Open_dir)(WCHAR*, WCHAR const*, int *, enum file_type*); static WCHAR* (__cdecl *p_Read_dir)(WCHAR*, void*, enum file_type*); +static MSVCP_bool (__cdecl *p_Remove_dir)(WCHAR const*); static enum file_type (__cdecl *p_Stat)(WCHAR const *, int *); +static int (__cdecl *p_Symlink)(WCHAR const*, WCHAR const*); static int (__cdecl *p_To_byte)(const WCHAR *src, char *dst); static int (__cdecl *p_To_wide)(const char *src, WCHAR *dst); +static int (__cdecl *p_Unlink)(WCHAR const*); static BOOLEAN (WINAPI *pCreateSymbolicLinkW)(const WCHAR *, const WCHAR *, DWORD); @@ -245,12 +250,17 @@ static BOOL init(void) SET(p_Current_get, "_Current_get"); SET(p_Current_set, "_Current_set"); SET(p_File_size, "_File_size"); + SET(p_Link, "_Link"); SET(p_Lstat, "_Lstat"); + SET(p_Make_dir, "_Make_dir"); SET(p_Open_dir, "_Open_dir"); SET(p_Read_dir, "_Read_dir"); + SET(p_Remove_dir, "_Remove_dir"); SET(p_Stat, "_Stat"); + SET(p_Symlink, "_Symlink"); SET(p_To_byte, "_To_byte"); SET(p_To_wide, "_To_wide"); + SET(p_Unlink, "_Unlink"); hdll = GetModuleHandleA("kernel32.dll"); pCreateSymbolicLinkW = (void*)GetProcAddress(hdll, "CreateSymbolicLinkW"); @@ -971,6 +981,79 @@ static void test_dir_operation(void) ok(SetCurrentDirectoryW(origin_path), "SetCurrentDirectoryW to origin_path failed\n"); } +static void test_Unlink(void) +{ + WCHAR temp_path[MAX_PATH], current_path[MAX_PATH]; + int ret, i; + HANDLE file; + LARGE_INTEGER file_size; + static const WCHAR f1_symlinkW[] = + {'w','i','n','e','_','t','e','s','t','_','d','i','r','\\','f','1','_','s','y','m','l','i','n','k',0}; + static const WCHAR f1_linkW[] = + {'w','i','n','e','_','t','e','s','t','_','d','i','r','\\','f','1','_','l','i','n','k',0}; + static const WCHAR f1W[] = + {'w','i','n','e','_','t','e','s','t','_','d','i','r','\\','f','1',0}; + static const WCHAR wine_test_dirW[] = + {'w','i','n','e','_','t','e','s','t','_','d','i','r',0}; + static const WCHAR not_existW[] = + {'n','o','t','_','e','x','i','s','t',0}; + static const WCHAR not_exist_fileW[] = + {'n','o','t','_','e','x','i','s','t','_','d','i','r','\\','n','o','t','_','e','x','i','s','t','_','f','i','l','e',0}; + struct { + WCHAR const *path; + int last_error; + MSVCP_bool is_todo; + } tests[] = { + { f1_symlinkW, ERROR_SUCCESS, TRUE }, + { f1_linkW, ERROR_SUCCESS, FALSE }, + { f1W, ERROR_SUCCESS, FALSE }, + { wine_test_dirW, ERROR_ACCESS_DENIED, FALSE }, + { not_existW, ERROR_FILE_NOT_FOUND, FALSE }, + { not_exist_fileW, ERROR_PATH_NOT_FOUND, FALSE }, + { NULL, ERROR_PATH_NOT_FOUND, FALSE } + }; + + GetCurrentDirectoryW(MAX_PATH, current_path); + GetTempPathW(MAX_PATH, temp_path); + ok(SetCurrentDirectoryW(temp_path), "SetCurrentDirectoryW to temp_path failed\n"); + + ret = p_Make_dir(wine_test_dirW); + ok(ret == 1, "_Make_dir(): expect 1 got %d\n", ret); + file = CreateFileW(f1W, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); + ok(file != INVALID_HANDLE_VALUE, "create file failed: INVALID_HANDLE_VALUE\n"); + file_size.QuadPart = 7; + ok(SetFilePointerEx(file, file_size, NULL, FILE_BEGIN), "SetFilePointerEx failed\n"); + ok(SetEndOfFile(file), "SetEndOfFile failed\n"); + CloseHandle(file); + + ret = p_Symlink(f1W, f1_symlinkW); + if(ret==ERROR_PRIVILEGE_NOT_HELD || ret==ERROR_INVALID_FUNCTION || ret==ERROR_CALL_NOT_IMPLEMENTED) { + tests[0].last_error = ERROR_FILE_NOT_FOUND; + win_skip("Privilege not held or symbolic link not supported, skipping symbolic link tests.\n"); + }else { + ok(ret == ERROR_SUCCESS, "_Symlink(): expect: ERROR_SUCCESS, got %d\n", ret); + } + ret = p_Link(f1W, f1_linkW); + ok(ret == ERROR_SUCCESS, "_Link(): expect: ERROR_SUCCESS, got %d\n", ret); + + for(i=0; i<sizeof(tests)/sizeof(tests[0]); i++) { + errno = 0xdeadbeef; + ret = p_Unlink(tests[i].path); + todo_wine_if(tests[i].is_todo) + ok(ret == tests[i].last_error, "_Unlink(): test %d expect: %d, got %d\n", + i+1, tests[i].last_error, ret); + ok(errno == 0xdeadbeef, "_Unlink(): test %d errno expect: 0xdeadbeef, got %d\n", i+1, ret); + } + + ok(!DeleteFileW(f1W), "expect wine_test_dir/f1 not to exist\n"); + ok(!DeleteFileW(f1_linkW), "expect wine_test_dir/f1_link not to exist\n"); + ok(!DeleteFileW(f1_symlinkW), "expect wine_test_dir/f1_symlink not to exist\n"); + ret = p_Remove_dir(wine_test_dirW); + ok(ret == 1, "_Remove_dir(): expect 1 got %d\n", ret); + + ok(SetCurrentDirectoryW(current_path), "SetCurrentDirectoryW failed\n"); +} + START_TEST(msvcp140) { if(!init()) return; @@ -987,5 +1070,6 @@ START_TEST(msvcp140) test_Current_set(); test_Stat(); test_dir_operation(); + test_Unlink(); FreeLibrary(msvcp); }
1
0
0
0
Stefan Dösinger : msvcp: Implement the WCHAR version of _Link.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: 96fcf4cc037c8e8fd204591c009517b55d244092 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=96fcf4cc037c8e8fd204591c0…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Tue Oct 10 17:09:45 2017 +0200 msvcp: Implement the WCHAR version of _Link. Signed-off-by: Stefan Dösinger <stefan(a)codeweavers.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcp120/msvcp120.spec | 4 ++-- dlls/msvcp120_app/msvcp120_app.spec | 4 ++-- dlls/msvcp140/msvcp140.spec | 2 +- dlls/msvcp90/ios.c | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index 3b29e73..ae1ac57 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -1533,8 +1533,8 @@ @ cdecl -arch=win64 ?_Launch@_Pad@std@@QEAAXPEAU_Thrd_imp_t@@@Z(ptr ptr) _Pad__Launch @ cdecl -arch=win32 ?_Link@sys@tr2@std@@YAHPBD0@Z(str str) tr2_sys__Link @ cdecl -arch=win64 ?_Link@sys@tr2@std@@YAHPEBD0@Z(str str) tr2_sys__Link -@ stub -arch=win32 ?_Link@sys@tr2@std@@YAHPB_W0@Z -@ stub -arch=win64 ?_Link@sys@tr2@std@@YAHPEB_W0@Z +@ cdecl -arch=win32 ?_Link@sys@tr2@std@@YAHPB_W0@Z(wstr wstr) tr2_sys__Link_wchar +@ cdecl -arch=win64 ?_Link@sys@tr2@std@@YAHPEB_W0@Z(wstr wstr) tr2_sys__Link_wchar @ cdecl -arch=win32 ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z(ptr ptr long) locale__Locimp__Locimp_Addfac @ cdecl -arch=win64 ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z(ptr ptr long) locale__Locimp__Locimp_Addfac @ cdecl -arch=win32 ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z(ptr ptr) locale__Locimp__Locimp_ctor diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index 7a6dc58..56bed79 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -1533,8 +1533,8 @@ @ cdecl -arch=win64 ?_Launch@_Pad@std@@QEAAXPEAU_Thrd_imp_t@@@Z(ptr ptr) msvcp120.?_Launch@_Pad@std@@QEAAXPEAU_Thrd_imp_t@@@Z @ cdecl -arch=win32 ?_Link@sys@tr2@std@@YAHPBD0@Z(str str) msvcp120.?_Link@sys@tr2@std@@YAHPBD0@Z @ cdecl -arch=win64 ?_Link@sys@tr2@std@@YAHPEBD0@Z(str str) msvcp120.?_Link@sys@tr2@std@@YAHPEBD0@Z -@ stub -arch=win32 ?_Link@sys@tr2@std@@YAHPB_W0@Z -@ stub -arch=win64 ?_Link@sys@tr2@std@@YAHPEB_W0@Z +@ cdecl -arch=win32 ?_Link@sys@tr2@std@@YAHPB_W0@Z(wstr wstr) msvcp120.?_Link@sys@tr2@std@@YAHPB_W0@Z +@ cdecl -arch=win64 ?_Link@sys@tr2@std@@YAHPEB_W0@Z(wstr wstr) msvcp120.?_Link@sys@tr2@std@@YAHPEB_W0@Z @ cdecl -arch=win32 ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z(ptr ptr long) msvcp120.?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z @ cdecl -arch=win64 ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z(ptr ptr long) msvcp120.?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z @ cdecl -arch=win32 ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z(ptr ptr) msvcp120.?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 5409853..08f1ff4 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -3667,7 +3667,7 @@ @ stub _LSinh @ extern _LSnan _LSnan @ stub _Last_write_time -@ stub _Link +@ cdecl _Link(wstr wstr) tr2_sys__Link_wchar @ cdecl _Lock_shared_ptr_spin_lock() @ cdecl _Lstat(wstr ptr) @ cdecl _Make_dir(wstr) tr2_sys__Make_dir_wchar diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index c6f06ff..5d2f0ca 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -15036,6 +15036,20 @@ int __cdecl tr2_sys__Link(char const* existing_path, char const* new_path) return GetLastError(); } +/* ?_Link@sys@tr2@std@@YAHPB_W0@Z */ +/* ?_Link@sys@tr2@std@@YAHPEB_W0@Z */ +/* _Link */ +int __cdecl tr2_sys__Link_wchar(WCHAR const* existing_path, WCHAR const* new_path) +{ + TRACE("(%s %s)\n", debugstr_w(existing_path), debugstr_w(new_path)); + if(!existing_path || !new_path) + return ERROR_INVALID_PARAMETER; + + if(CreateHardLinkW(new_path, existing_path, NULL)) + return ERROR_SUCCESS; + return GetLastError(); +} + /* ?_Symlink@sys@tr2@std@@YAHPBD0@Z */ /* ?_Symlink@sys@tr2@std@@YAHPEBD0@Z */ int __cdecl tr2_sys__Symlink(char const* existing_file_name, char const* file_name)
1
0
0
0
Stefan Dösinger : msvcp: Implement the WCHAR version of _Symlink.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: 12dadd04cb814aea835f8b98627c0e3bd6b3d734 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=12dadd04cb814aea835f8b986…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Tue Oct 10 17:09:44 2017 +0200 msvcp: Implement the WCHAR version of _Symlink. Signed-off-by: Stefan Dösinger <stefan(a)codeweavers.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcp120/msvcp120.spec | 4 ++-- dlls/msvcp120_app/msvcp120_app.spec | 4 ++-- dlls/msvcp140/msvcp140.spec | 2 +- dlls/msvcp90/ios.c | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index 4d46be4..3b29e73 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -1734,8 +1734,8 @@ @ cdecl -arch=win64 ?_Swap_all@_Container_base12@std@@QEAAXAEAU12@@Z(ptr ptr) _Container_base12__Swap_all @ cdecl -arch=win32 ?_Symlink@sys@tr2@std@@YAHPBD0@Z(str str) tr2_sys__Symlink @ cdecl -arch=win64 ?_Symlink@sys@tr2@std@@YAHPEBD0@Z(str str) tr2_sys__Symlink -@ stub -arch=win32 ?_Symlink@sys@tr2@std@@YAHPB_W0@Z -@ stub -arch=win64 ?_Symlink@sys@tr2@std@@YAHPEB_W0@Z +@ cdecl -arch=win32 ?_Symlink@sys@tr2@std@@YAHPB_W0@Z(wstr wstr) tr2_sys__Symlink_wchar +@ cdecl -arch=win64 ?_Symlink@sys@tr2@std@@YAHPEB_W0@Z(wstr wstr) tr2_sys__Symlink_wchar @ extern ?_Sync@ios_base@std@@0_NA ios_base_Sync @ stub -arch=win32 ?_Syserror_map@std@@YAPBDH@Z @ stub -arch=win64 ?_Syserror_map@std@@YAPEBDH@Z diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index fd99058..7a6dc58 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -1734,8 +1734,8 @@ @ cdecl -arch=win64 ?_Swap_all@_Container_base12@std@@QEAAXAEAU12@@Z(ptr ptr) msvcp120.?_Swap_all@_Container_base12@std@@QEAAXAEAU12@@Z @ cdecl -arch=win32 ?_Symlink@sys@tr2@std@@YAHPBD0@Z(str str) msvcp120.?_Symlink@sys@tr2@std@@YAHPBD0@Z @ cdecl -arch=win64 ?_Symlink@sys@tr2@std@@YAHPEBD0@Z(str str) msvcp120.?_Symlink@sys@tr2@std@@YAHPEBD0@Z -@ stub -arch=win32 ?_Symlink@sys@tr2@std@@YAHPB_W0@Z -@ stub -arch=win64 ?_Symlink@sys@tr2@std@@YAHPEB_W0@Z +@ cdecl -arch=win32 ?_Symlink@sys@tr2@std@@YAHPB_W0@Z(wstr wstr) msvcp120.?_Symlink@sys@tr2@std@@YAHPB_W0@Z +@ cdecl -arch=win64 ?_Symlink@sys@tr2@std@@YAHPEB_W0@Z(wstr wstr) msvcp120.?_Symlink@sys@tr2@std@@YAHPEB_W0@Z @ extern ?_Sync@ios_base@std@@0_NA msvcp120.?_Sync@ios_base@std@@0_NA @ stub -arch=win32 ?_Syserror_map@std@@YAPBDH@Z @ stub -arch=win64 ?_Syserror_map@std@@YAPEBDH@Z diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 74ff305..5409853 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -3716,7 +3716,7 @@ @ cdecl _Stoulx(ptr ptr long ptr) _Stoulx @ cdecl _Strcoll(ptr ptr ptr ptr ptr) _Strcoll @ stub _Strxfrm -@ stub _Symlink +@ cdecl _Symlink(wstr wstr) tr2_sys__Symlink_wchar @ stub _Symlink_get @ stub _Temp_get @ stub _Thrd_abort diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index 36e5067..c6f06ff 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -15049,6 +15049,20 @@ int __cdecl tr2_sys__Symlink(char const* existing_file_name, char const* file_na return GetLastError(); } +/* ?_Symlink@sys@tr2@std@@YAHPB_W0@Z */ +/* ?_Symlink@sys@tr2@std@@YAHPEB_W0@Z */ +/* _Symlink */ +int __cdecl tr2_sys__Symlink_wchar(WCHAR const* existing_file_name, WCHAR const* file_name) +{ + TRACE("(%s %s)\n", debugstr_w(existing_file_name), debugstr_w(file_name)); + if(!existing_file_name || !file_name) + return ERROR_INVALID_PARAMETER; + + if(CreateSymbolicLinkW(file_name, existing_file_name, 0)) + return ERROR_SUCCESS; + return GetLastError(); +} + /* ?_Unlink@sys@tr2@std@@YAHPBD@Z */ /* ?_Unlink@sys@tr2@std@@YAHPEBD@Z */ int __cdecl tr2_sys__Unlink(char const* path)
1
0
0
0
Stefan Dösinger : msvcp: Implement the WCHAR version of _Unlink.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: eea0f37a1a8cda59ebcec698356af0cc46f2107b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=eea0f37a1a8cda59ebcec6983…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Tue Oct 10 17:09:43 2017 +0200 msvcp: Implement the WCHAR version of _Unlink. Signed-off-by: Stefan Dösinger <stefan(a)codeweavers.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcp120/msvcp120.spec | 4 ++-- dlls/msvcp120_app/msvcp120_app.spec | 4 ++-- dlls/msvcp140/msvcp140.spec | 2 +- dlls/msvcp90/ios.c | 12 ++++++++++++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index b3f2223..4d46be4 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -1768,8 +1768,8 @@ @ cdecl -arch=win64 ?_Tidy@ios_base@std@@AEAAXXZ(ptr) ios_base_Tidy @ cdecl -arch=win32 ?_Unlink@sys@tr2@std@@YAHPBD@Z(str) tr2_sys__Unlink @ cdecl -arch=win64 ?_Unlink@sys@tr2@std@@YAHPEBD@Z(str) tr2_sys__Unlink -@ stub -arch=win32 ?_Unlink@sys@tr2@std@@YAHPB_W@Z -@ stub -arch=win64 ?_Unlink@sys@tr2@std@@YAHPEB_W@Z +@ cdecl -arch=win32 ?_Unlink@sys@tr2@std@@YAHPB_W@Z(wstr) tr2_sys__Unlink_wchar +@ cdecl -arch=win64 ?_Unlink@sys@tr2@std@@YAHPEB_W@Z(wstr) tr2_sys__Unlink_wchar @ cdecl -arch=arm ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAAXXZ(ptr) basic_streambuf_char__Unlock @ thiscall -arch=i386 ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAEXXZ(ptr) basic_streambuf_char__Unlock @ cdecl -arch=win64 ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ(ptr) basic_streambuf_char__Unlock diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index 4d4c88e..fd99058 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -1768,8 +1768,8 @@ @ cdecl -arch=win64 ?_Tidy@ios_base@std@@AEAAXXZ(ptr) msvcp120.?_Tidy@ios_base@std@@AEAAXXZ @ cdecl -arch=win32 ?_Unlink@sys@tr2@std@@YAHPBD@Z(str) msvcp120.?_Unlink@sys@tr2@std@@YAHPBD@Z @ cdecl -arch=win64 ?_Unlink@sys@tr2@std@@YAHPEBD@Z(str) msvcp120.?_Unlink@sys@tr2@std@@YAHPEBD@Z -@ stub -arch=win32 ?_Unlink@sys@tr2@std@@YAHPB_W@Z -@ stub -arch=win64 ?_Unlink@sys@tr2@std@@YAHPEB_W@Z +@ cdecl -arch=win32 ?_Unlink@sys@tr2@std@@YAHPB_W@Z(wstr) msvcp120.?_Unlink@sys@tr2@std@@YAHPB_W@Z +@ cdecl -arch=win64 ?_Unlink@sys@tr2@std@@YAHPEB_W@Z(wstr) msvcp120.?_Unlink@sys@tr2@std@@YAHPEB_W@Z @ cdecl -arch=arm ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAAXXZ(ptr) msvcp120.?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAAXXZ @ thiscall -arch=i386 ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAEXXZ(ptr) msvcp120.?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAEXXZ @ cdecl -arch=win64 ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ(ptr) msvcp120.?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 80840db..74ff305 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -3737,7 +3737,7 @@ @ cdecl _Toupper(long ptr) _Toupper @ cdecl _Towlower(long ptr) _Towlower @ cdecl _Towupper(long ptr) _Towupper -@ stub _Unlink +@ cdecl _Unlink(wstr) tr2_sys__Unlink_wchar @ cdecl _Unlock_shared_ptr_spin_lock() @ stub _WStod @ stub _WStodx diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index 28deae0..36e5067 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -15060,6 +15060,18 @@ int __cdecl tr2_sys__Unlink(char const* path) return GetLastError(); } +/* ?_Unlink@sys@tr2@std@@YAHPB_W@Z */ +/* ?_Unlink@sys@tr2@std@@YAHPEB_W@Z */ +/* _Unlink */ +int __cdecl tr2_sys__Unlink_wchar(WCHAR const* path) +{ + TRACE("(%s)\n", debugstr_w(path)); + + if(DeleteFileW(path)) + return ERROR_SUCCESS; + return GetLastError(); +} + /* ??0strstream@std@@QAE@PADHH@Z */ /* ??0strstream@std@@QEAA@PEAD_JH@Z */ #if STREAMSIZE_BITS == 64
1
0
0
0
Stefan Dösinger : msvcp140: Export _Remove_dir.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: d4f1175a9372aedc284542112dc78bad3a8cd2fe URL:
http://source.winehq.org/git/wine.git/?a=commit;h=d4f1175a9372aedc284542112…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Tue Oct 10 17:09:42 2017 +0200 msvcp140: Export _Remove_dir. Signed-off-by: Stefan Dösinger <stefan(a)codeweavers.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcp140/msvcp140.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 1aeb939b..80840db 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -3693,7 +3693,7 @@ @ cdecl -ret64 _Query_perf_counter() @ cdecl -ret64 _Query_perf_frequency() @ cdecl _Read_dir(ptr ptr ptr) tr2_sys__Read_dir_wchar -@ stub _Remove_dir +@ cdecl _Remove_dir(wstr) tr2_sys__Remove_dir_wchar @ stub _Rename @ stub _Resize @ stub _Set_last_write_time
1
0
0
0
Piotr Caban : vbscript/tests: Expose todo_wine_ok function to scripts.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: c4d72438334b83177d75681edf6931958b702a7a URL:
http://source.winehq.org/git/wine.git/?a=commit;h=c4d72438334b83177d75681ed…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Oct 10 17:08:05 2017 +0200 vbscript/tests: Expose todo_wine_ok function to scripts. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/vbscript/tests/error.vbs | 12 ++++++------ dlls/vbscript/tests/run.c | 10 +++++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/dlls/vbscript/tests/error.vbs b/dlls/vbscript/tests/error.vbs index 3bf03df..78314c3 100644 --- a/dlls/vbscript/tests/error.vbs +++ b/dlls/vbscript/tests/error.vbs @@ -190,7 +190,7 @@ sub testThrow next call ok(x = 2, "x = " & x) call ok(y = 1, "y = " & y) - 'todo_wine call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number) + call todo_wine_ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number) Err.clear() y = 0 @@ -202,19 +202,19 @@ sub testThrow next call ok(y = 1, "y = " & y) call ok(x = 6, "x = " & x) - 'todo_wine call ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number) + call todo_wine_ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number) Err.clear() y = 0 x = 6 for x = 100 to throwInt(E_TESTERROR) call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number) - 'todo_wine call ok(x = 6, "x = " & x) + call todo_wine_ok(x = 6, "x = " & x) y = y+1 next call ok(y = 1, "y = " & y) - 'todo_wine call ok(x = 6, "x = " & x) - 'todo_wine call ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number) + call todo_wine_ok(x = 6, "x = " & x) + call todo_wine_ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number) select case throwInt(E_TESTERROR) case true @@ -308,7 +308,7 @@ sub testForEachError() y = true next call ok(y, "for each not executed") - 'todo_wine call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number) + call todo_wine_ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number) end sub call testForEachError() diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c index 798992f..81b1ced 100644 --- a/dlls/vbscript/tests/run.c +++ b/dlls/vbscript/tests/run.c @@ -122,6 +122,7 @@ DEFINE_EXPECT(OnScriptError); #define DISPID_GLOBAL_TESTOPTIONALARG 1017 #define DISPID_GLOBAL_LETOBJ 1018 #define DISPID_GLOBAL_SETOBJ 1019 +#define DISPID_GLOBAL_TODO_WINE_OK 1020 #define DISPID_TESTOBJ_PROPGET 2000 #define DISPID_TESTOBJ_PROPPUT 2001 @@ -983,6 +984,11 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD *pid = DISPID_GLOBAL_OK; return S_OK; } + if(!strcmp_wa(bstrName, "todo_wine_ok")) { + test_grfdex(grfdex, fdexNameCaseInsensitive); + *pid = DISPID_GLOBAL_TODO_WINE_OK; + return S_OK; + } if(!strcmp_wa(bstrName, "trace")) { test_grfdex(grfdex, fdexNameCaseInsensitive); *pid = DISPID_GLOBAL_TRACE; @@ -1092,6 +1098,7 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller) { switch(id) { + case DISPID_GLOBAL_TODO_WINE_OK: case DISPID_GLOBAL_OK: { VARIANT *b; @@ -1115,7 +1122,8 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, ok(V_VT(b) == VT_BOOL, "V_VT(b) = %d\n", V_VT(b)); - ok(V_BOOL(b), "%s: %s\n", test_name, wine_dbgstr_w(V_BSTR(pdp->rgvarg))); + todo_wine_if(id == DISPID_GLOBAL_TODO_WINE_OK) + ok(V_BOOL(b), "%s: %s\n", test_name, wine_dbgstr_w(V_BSTR(pdp->rgvarg))); return S_OK; }
1
0
0
0
Piotr Caban : vbscript: Be more verbose on unexpected error in a script.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: 775671c3d8588efe3f94a35d21ab9b2902f8625f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=775671c3d8588efe3f94a35d2…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Oct 10 17:07:54 2017 +0200 vbscript: Be more verbose on unexpected error in a script. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/vbscript/tests/run.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c index 00a0dee..798992f 100644 --- a/dlls/vbscript/tests/run.c +++ b/dlls/vbscript/tests/run.c @@ -1626,8 +1626,20 @@ static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, S static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror) { HRESULT hr = onerror_hres; - CHECK_EXPECT(OnScriptError); + if(!expect_OnScriptError) { + EXCEPINFO info; + ULONG line; + HRESULT hres; + + hres = IActiveScriptError_GetSourcePosition(pscripterror, NULL, &line, NULL); + if(SUCCEEDED(hres)) + hres = IActiveScriptError_GetExceptionInfo(pscripterror, &info); + if(SUCCEEDED(hres)) + trace("Error in line %u: %s\n", line+1, wine_dbgstr_w(info.bstrDescription)); + } + + CHECK_EXPECT(OnScriptError); onerror_hres = E_NOTIMPL; return hr;
1
0
0
0
Piotr Caban : vbscript: Add Array implementation.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: 0a15f2e02f5b61ad380f592ef6452148c118f2b8 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0a15f2e02f5b61ad380f592ef…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Oct 10 17:07:50 2017 +0200 vbscript: Add Array implementation. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/vbscript/global.c | 42 +++++++++++++++++++++++++++++++++++++++--- dlls/vbscript/tests/api.vbs | 15 +++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 7e14776..f523820 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -1792,8 +1792,44 @@ static HRESULT Global_TypeName(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, static HRESULT Global_Array(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) { - FIXME("\n"); - return E_NOTIMPL; + SAFEARRAYBOUND bounds; + SAFEARRAY *sa; + VARIANT *data; + HRESULT hres; + unsigned i; + + TRACE("arg_cnt=%u\n", args_cnt); + + bounds.lLbound = 0; + bounds.cElements = args_cnt; + sa = SafeArrayCreate(VT_VARIANT, 1, &bounds); + if(!sa) + return E_OUTOFMEMORY; + + hres = SafeArrayAccessData(sa, (void**)&data); + if(FAILED(hres)) { + SafeArrayDestroy(sa); + return hres; + } + + for(i=0; i<args_cnt; i++) { + hres = VariantCopyInd(data+i, arg+i); + if(FAILED(hres)) { + SafeArrayUnaccessData(sa); + SafeArrayDestroy(sa); + return hres; + } + } + SafeArrayUnaccessData(sa); + + if(res) { + V_VT(res) = VT_ARRAY|VT_VARIANT; + V_ARRAY(res) = sa; + }else { + SafeArrayDestroy(sa); + } + + return S_OK; } static HRESULT Global_Erase(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) @@ -2272,7 +2308,7 @@ static const builtin_prop_t global_props[] = { {DISPID_GLOBAL_DATEDIFF, Global_DateDiff, 0, 3, 5}, {DISPID_GLOBAL_DATEPART, Global_DatePart, 0, 2, 4}, {DISPID_GLOBAL_TYPENAME, Global_TypeName, 0, 1}, - {DISPID_GLOBAL_ARRAY, Global_Array, 0, 1}, + {DISPID_GLOBAL_ARRAY, Global_Array, 0, 0, MAXDWORD}, {DISPID_GLOBAL_ERASE, Global_Erase, 0, 1}, {DISPID_GLOBAL_FILTER, Global_Filter, 0, 2, 4}, {DISPID_GLOBAL_JOIN, Global_Join, 0, 1, 2}, diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index f6b6f69..95ef84f 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -212,6 +212,21 @@ arr(0) = 2 arr(1) = 3 Call ok(not isNumeric(arr), "isNumeric(arr) is not true?") +Call ok(getVT(Array()) = "VT_ARRAY|VT_VARIANT", "getVT(Array()) = " & getVT(Array())) +x = Array("a1", 2, "a3") +Call ok(getVT(x) = "VT_ARRAY|VT_VARIANT*", "getVT(array) = " & getVT(x)) +Call ok(getVT(x(0)) = "VT_BSTR*", "getVT(array(0)) = " & getVT(x(0))) +Call ok(x(0) = "a1", "array(0) = " & x(0)) +Call ok(getVT(x(1)) = "VT_I2*", "getVT(array(1)) = " & getVT(x(1))) +Call ok(x(1) = 2, "array(1) = " & x(1)) +Call ok(getVT(x(2)) = "VT_BSTR*", "getVT(array(2)) = " & getVT(x(2))) +Call ok(x(2) = "a3", "array(2) = " & x(2)) + +Dim new_array +new_array = x +x(0) = "new value" +Call ok(new_array(0) = "a1", "new_array(0) = " & new_array(0)) + Dim newObject Set newObject = New ValClass newObject.myval = 1
1
0
0
0
Alistair Leslie-Hughes : qedit: Support IAMTimelineGroup interface in IAMTimelineObj.
by Alexandre Julliard
10 Oct '17
10 Oct '17
Module: wine Branch: master Commit: cfcc0dda15eb04c87319e2a0cd61212cdf8dcce7 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=cfcc0dda15eb04c87319e2a0c…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Thu Oct 5 05:15:45 2017 +0000 qedit: Support IAMTimelineGroup interface in IAMTimelineObj. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/qedit/tests/timeline.c | 12 ++- dlls/qedit/timeline.c | 195 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 204 insertions(+), 3 deletions(-) diff --git a/dlls/qedit/tests/timeline.c b/dlls/qedit/tests/timeline.c index 4801743..b1011fc 100644 --- a/dlls/qedit/tests/timeline.c +++ b/dlls/qedit/tests/timeline.c @@ -124,11 +124,17 @@ static void test_timelineobj_interfaces(void) if(hr == S_OK) { IAMTimelineGroup *group; + IAMTimelineObj *obj2; hr = IAMTimelineObj_QueryInterface(obj, &IID_IAMTimelineGroup, (void **)&group); - todo_wine ok(hr == S_OK, "got %08x\n", hr); - if(hr == S_OK) - IAMTimelineGroup_Release(group); + ok(hr == S_OK, "got %08x\n", hr); + + hr = IAMTimelineGroup_QueryInterface(group, &IID_IAMTimelineObj, (void **)&obj2); + ok(hr == S_OK, "got %08x\n", hr); + ok(obj == obj2, "Different pointers\n"); + IAMTimelineObj_Release(obj2); + + IAMTimelineGroup_Release(group); IAMTimelineObj_Release(obj); } diff --git a/dlls/qedit/timeline.c b/dlls/qedit/timeline.c index 906efd5..5d3fb46 100644 --- a/dlls/qedit/timeline.c +++ b/dlls/qedit/timeline.c @@ -51,6 +51,7 @@ static inline TimelineImpl *impl_from_IAMTimeline(IAMTimeline *iface) typedef struct { IAMTimelineObj IAMTimelineObj_iface; + IAMTimelineGroup IAMTimelineGroup_iface; LONG ref; TIMELINE_MAJOR_TYPE timeline_type; } TimelineObjImpl; @@ -60,7 +61,13 @@ static inline TimelineObjImpl *impl_from_IAMTimelineObj(IAMTimelineObj *iface) return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineObj_iface); } +static inline TimelineObjImpl *impl_from_IAMTimelineGroup(IAMTimelineGroup *iface) +{ + return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineGroup_iface); +} + static const IAMTimelineObjVtbl IAMTimelineObj_VTable; +static const IAMTimelineGroupVtbl IAMTimelineGroup_VTable; /* Timeline inner IUnknown */ @@ -170,6 +177,7 @@ static HRESULT WINAPI Timeline_IAMTimeline_CreateEmptyNode(IAMTimeline *iface, I obj_impl->ref = 1; obj_impl->IAMTimelineObj_iface.lpVtbl = &IAMTimelineObj_VTable; + obj_impl->IAMTimelineGroup_iface.lpVtbl = &IAMTimelineGroup_VTable; obj_impl->timeline_type = type; *obj = &obj_impl->IAMTimelineObj_iface; @@ -453,6 +461,8 @@ static HRESULT WINAPI TimelineObj_QueryInterface(IAMTimelineObj *iface, REFIID r *ppv = NULL; if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IAMTimelineObj)) *ppv = &This->IAMTimelineObj_iface; + else if (IsEqualIID(riid, &IID_IAMTimelineGroup)) + *ppv = &This->IAMTimelineGroup_iface; else WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv); @@ -803,3 +813,188 @@ static const IAMTimelineObjVtbl IAMTimelineObj_VTable = TimelineObj_GetGroupIBelongTo, TimelineObj_GetEmbedDepth, }; + +static HRESULT WINAPI timelinegrp_QueryInterface(IAMTimelineGroup *iface, REFIID riid, void **object) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + return IAMTimelineObj_QueryInterface(&This->IAMTimelineObj_iface, riid, object); +} + +static ULONG WINAPI timelinegrp_AddRef(IAMTimelineGroup *iface) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + return IAMTimelineObj_AddRef(&This->IAMTimelineObj_iface); +} + +static ULONG WINAPI timelinegrp_Release(IAMTimelineGroup *iface) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + return IAMTimelineObj_Release(&This->IAMTimelineObj_iface); +} + +static HRESULT WINAPI timelinegrp_SetTimeline(IAMTimelineGroup *iface, IAMTimeline *timeline) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, timeline); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_GetTimeline(IAMTimelineGroup *iface, IAMTimeline **timeline) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, timeline); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_GetPriority(IAMTimelineGroup *iface, LONG *priority) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, priority); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_GetMediaType(IAMTimelineGroup *iface, AM_MEDIA_TYPE *mediatype) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, mediatype); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_SetMediaType(IAMTimelineGroup *iface, AM_MEDIA_TYPE *mediatype) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, mediatype); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_SetOutputFPS(IAMTimelineGroup *iface, double fps) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%f)\n", This, fps); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_GetOutputFPS(IAMTimelineGroup *iface, double *fps) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, fps); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_SetGroupName(IAMTimelineGroup *iface, BSTR name) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(name)); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_GetGroupName(IAMTimelineGroup *iface, BSTR *name) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, name); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_SetPreviewMode(IAMTimelineGroup *iface, BOOL preview) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%d)\n", This, preview); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_GetPreviewMode(IAMTimelineGroup *iface, BOOL *preview) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, preview); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_SetMediaTypeForVB(IAMTimelineGroup *iface, LONG type) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%d)\n", This, type); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_GetOutputBuffering(IAMTimelineGroup *iface, int *buffer) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, buffer); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_SetOutputBuffering(IAMTimelineGroup *iface, int buffer) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%d)\n", This, buffer); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_SetSmartRecompressFormat(IAMTimelineGroup *iface, LONG *format) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, format); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_GetSmartRecompressFormat(IAMTimelineGroup *iface, LONG **format) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, format); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_IsSmartRecompressFormatSet(IAMTimelineGroup *iface, BOOL *set) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, set); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_IsRecompressFormatDirty(IAMTimelineGroup *iface, BOOL *dirty) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, dirty); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_ClearRecompressFormatDirty(IAMTimelineGroup *iface) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI timelinegrp_SetRecompFormatFromSource(IAMTimelineGroup *iface, IAMTimelineSrc *source) +{ + TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface); + FIXME("(%p)->(%p)\n", This, source); + return E_NOTIMPL; +} + +static const IAMTimelineGroupVtbl IAMTimelineGroup_VTable = +{ + timelinegrp_QueryInterface, + timelinegrp_AddRef, + timelinegrp_Release, + timelinegrp_SetTimeline, + timelinegrp_GetTimeline, + timelinegrp_GetPriority, + timelinegrp_GetMediaType, + timelinegrp_SetMediaType, + timelinegrp_SetOutputFPS, + timelinegrp_GetOutputFPS, + timelinegrp_SetGroupName, + timelinegrp_GetGroupName, + timelinegrp_SetPreviewMode, + timelinegrp_GetPreviewMode, + timelinegrp_SetMediaTypeForVB, + timelinegrp_GetOutputBuffering, + timelinegrp_SetOutputBuffering, + timelinegrp_SetSmartRecompressFormat, + timelinegrp_GetSmartRecompressFormat, + timelinegrp_IsSmartRecompressFormatSet, + timelinegrp_IsRecompressFormatDirty, + timelinegrp_ClearRecompressFormatDirty, + timelinegrp_SetRecompFormatFromSource +};
1
0
0
0
← Newer
1
...
30
31
32
33
34
35
36
...
48
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
Results per page:
10
25
50
100
200