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
March 2019
----- 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
1097 discussions
Start a n
N
ew thread
Hans Leidekker : msi: Support substorage transforms in MsiDatabaseApplyTransform.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: 4228dd1767e9b033ad5d2605cd3893e2cdeb222c URL:
https://source.winehq.org/git/wine.git/?a=commit;h=4228dd1767e9b033ad5d2605…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Fri Nov 9 14:50:34 2018 +0100 msi: Support substorage transforms in MsiDatabaseApplyTransform. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=40206
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit ef86011ba40ef90eefb5e54059d907753ec8d694) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/msi/msiquery.c | 68 +++++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/dlls/msi/msiquery.c b/dlls/msi/msiquery.c index d73e5fe..2e84449 100644 --- a/dlls/msi/msiquery.c +++ b/dlls/msi/msiquery.c @@ -713,50 +713,55 @@ MSIHANDLE WINAPI MsiGetLastErrorRecord( void ) return 0; } -UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db, - LPCWSTR szTransformFile, int iErrorCond ) +UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db, const WCHAR *transform, int error_cond ) { - HRESULT r; + HRESULT hr; UINT ret = ERROR_FUNCTION_FAILED; - IStorage *stg = NULL; + IStorage *stg; STATSTG stat; - TRACE("%p %s %d\n", db, debugstr_w(szTransformFile), iErrorCond); + TRACE( "%p %s %08x\n", db, debugstr_w(transform), error_cond ); - r = StgOpenStorage( szTransformFile, NULL, - STGM_DIRECT|STGM_READ|STGM_SHARE_DENY_WRITE, NULL, 0, &stg); - if ( FAILED(r) ) + if (*transform == ':') { - WARN("failed to open transform 0x%08x\n", r); - return ret; + hr = IStorage_OpenStorage( db->storage, transform + 1, NULL, STGM_SHARE_EXCLUSIVE, NULL, 0, &stg ); + if (FAILED( hr )) + { + WARN( "failed to open substorage transform 0x%08x\n", hr ); + return ERROR_FUNCTION_FAILED; + } + } + else + { + hr = StgOpenStorage( transform, NULL, STGM_DIRECT|STGM_READ|STGM_SHARE_DENY_WRITE, NULL, 0, &stg ); + if (FAILED( hr )) + { + WARN( "failed to open file transform 0x%08x\n", hr ); + return ERROR_FUNCTION_FAILED; + } } - r = IStorage_Stat( stg, &stat, STATFLAG_NONAME ); - if ( FAILED( r ) ) - goto end; - - if ( !IsEqualGUID( &stat.clsid, &CLSID_MsiTransform ) ) - goto end; - - if( TRACE_ON( msi ) ) - enum_stream_names( stg ); + hr = IStorage_Stat( stg, &stat, STATFLAG_NONAME ); + if (FAILED( hr )) goto end; + if (!IsEqualGUID( &stat.clsid, &CLSID_MsiTransform )) goto end; + if (TRACE_ON( msi )) enum_stream_names( stg ); ret = msi_table_apply_transform( db, stg ); end: IStorage_Release( stg ); - return ret; } -UINT WINAPI MsiDatabaseApplyTransformW( MSIHANDLE hdb, - LPCWSTR szTransformFile, int iErrorCond) +UINT WINAPI MsiDatabaseApplyTransformW( MSIHANDLE hdb, const WCHAR *transform, int error_cond ) { MSIDATABASE *db; UINT r; + if (error_cond) FIXME( "ignoring error conditions\n" ); + db = msihandle2msiinfo( hdb, MSIHANDLETYPE_DATABASE ); - if( !db ) + if (!db) { IWineMsiRemoteDatabase *remote_database; @@ -770,27 +775,24 @@ UINT WINAPI MsiDatabaseApplyTransformW( MSIHANDLE hdb, return ERROR_SUCCESS; } - r = MSI_DatabaseApplyTransformW( db, szTransformFile, iErrorCond ); + r = MSI_DatabaseApplyTransformW( db, transform, error_cond ); msiobj_release( &db->hdr ); return r; } -UINT WINAPI MsiDatabaseApplyTransformA( MSIHANDLE hdb, - LPCSTR szTransformFile, int iErrorCond) +UINT WINAPI MsiDatabaseApplyTransformA( MSIHANDLE hdb, const char *transform, int error_cond ) { - LPWSTR wstr; + WCHAR *wstr; UINT ret; - TRACE("%d %s %d\n", hdb, debugstr_a(szTransformFile), iErrorCond); + TRACE( "%d %s %08x\n", hdb, debugstr_a(transform), error_cond ); - wstr = strdupAtoW( szTransformFile ); - if( szTransformFile && !wstr ) + wstr = strdupAtoW( transform ); + if (transform && !wstr) return ERROR_NOT_ENOUGH_MEMORY; - ret = MsiDatabaseApplyTransformW( hdb, wstr, iErrorCond); - + ret = MsiDatabaseApplyTransformW( hdb, wstr, error_cond ); msi_free( wstr ); - return ret; }
1
0
0
0
Alistair Leslie-Hughes : ws2_32: Ignore a SO_SNDBUF value of 0 on macOS.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: b1b6ef827f98fb72a9caecb7d30a9598cda51d50 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b1b6ef827f98fb72a9caecb7…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Mon Nov 19 09:33:31 2018 +0100 ws2_32: Ignore a SO_SNDBUF value of 0 on macOS. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=40264
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit e7fd1ac3b265f2f86ec832268dbbc5425b78ecfc) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/ws2_32/socket.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 43a623e..1f4a5d5 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -5807,6 +5807,17 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname, optlen = sizeof(struct linger); break; + case WS_SO_SNDBUF: + if (!*(const int *)optval) + { + FIXME("SO_SNDBUF ignoring request to disable send buffering\n"); +#ifdef __APPLE__ + return 0; +#endif + } + convert_sockopt(&level, &optname); + break; + case WS_SO_RCVBUF: if (*(const int*)optval < 2048) { @@ -5827,7 +5838,6 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname, * however, using it the BSD way fixes bug 8513 and seems to be what * most programmers assume, anyway */ case WS_SO_REUSEADDR: - case WS_SO_SNDBUF: case WS_SO_TYPE: convert_sockopt(&level, &optname); break;
1
0
0
0
Piotr Caban : msvcp140: Add _Winerror_map implementation.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: de1c2809f88aaa38ca098ec0fb4a737c4e4839fc URL:
https://source.winehq.org/git/wine.git/?a=commit;h=de1c2809f88aaa38ca098ec0…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Nov 5 20:21:27 2018 +0100 msvcp140: Add _Winerror_map implementation. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 8d0ef952e247e16ff9bbb60e18fc24855b0a789d) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/msvcp140/msvcp140.spec | 2 +- dlls/msvcp140/tests/msvcp140.c | 58 +++++++++++++++++++++++++++++++++++++ dlls/msvcp90/misc.c | 65 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 1 deletion(-) diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 66c23e6..afd63f1 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -1669,7 +1669,7 @@ @ stub -arch=arm ?_W_Gettnames@_Locinfo@std@@QBA?AV_Timevec@2@XZ @ stub -arch=i386 ?_W_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ @ stub -arch=win64 ?_W_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ -@ stub ?_Winerror_map@std@@YAHH@Z +@ cdecl ?_Winerror_map@std@@YAHH@Z(long) _Winerror_map @ cdecl -arch=win32 ?_Winerror_message@std@@YAKKPADK@Z(long ptr long) _Winerror_message @ cdecl -arch=win64 ?_Winerror_message@std@@YAKKPEADK@Z(long ptr long) _Winerror_message @ stub ?_XGetLastError@std@@YAXXZ diff --git a/dlls/msvcp140/tests/msvcp140.c b/dlls/msvcp140/tests/msvcp140.c index 606fb83..4be4d88 100644 --- a/dlls/msvcp140/tests/msvcp140.c +++ b/dlls/msvcp140/tests/msvcp140.c @@ -16,6 +16,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include <errno.h> #include <stdio.h> #include "windef.h" @@ -192,6 +193,7 @@ 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 ULONG (__cdecl *p__Winerror_message)(ULONG, char*, ULONG); +static int (__cdecl *p__Winerror_map)(int); static BOOLEAN (WINAPI *pCreateSymbolicLinkW)(const WCHAR *, const WCHAR *, DWORD); @@ -212,6 +214,7 @@ static BOOL init(void) SET(p__Thrd_id, "_Thrd_id"); SET(p__Task_impl_base__IsNonBlockingThread, "?_IsNonBlockingThread@_Task_impl_base@details@Concurrency@@SA_NXZ"); SET(p__ContextCallback__IsCurrentOriginSTA, "?_IsCurrentOriginSTA@_ContextCallback@details@Concurrency@@CA_NXZ"); + SET(p__Winerror_map, "?_Winerror_map@std@@YAHH@Z"); if(sizeof(void*) == 8) { /* 64-bit initialization */ SET(p_task_continuation_context_ctor, "??0task_continuation_context@Concurrency@@AEAA@XZ"); @@ -1304,6 +1307,60 @@ static void test__Winerror_message(void) ok(buf[0] == 'a', "buf = %s\n", buf); } +static void test__Winerror_map(void) +{ + static struct { + int winerr, doserr; + BOOL broken; + } tests[] = { + {ERROR_INVALID_FUNCTION, ENOSYS}, {ERROR_FILE_NOT_FOUND, ENOENT}, + {ERROR_PATH_NOT_FOUND, ENOENT}, {ERROR_TOO_MANY_OPEN_FILES, EMFILE}, + {ERROR_ACCESS_DENIED, EACCES}, {ERROR_INVALID_HANDLE, EINVAL}, + {ERROR_NOT_ENOUGH_MEMORY, ENOMEM}, {ERROR_INVALID_ACCESS, EACCES}, + {ERROR_OUTOFMEMORY, ENOMEM}, {ERROR_INVALID_DRIVE, ENODEV}, + {ERROR_CURRENT_DIRECTORY, EACCES}, {ERROR_NOT_SAME_DEVICE, EXDEV}, + {ERROR_WRITE_PROTECT, EACCES}, {ERROR_BAD_UNIT, ENODEV}, + {ERROR_NOT_READY, EAGAIN}, {ERROR_SEEK, EIO}, {ERROR_WRITE_FAULT, EIO}, + {ERROR_READ_FAULT, EIO}, {ERROR_SHARING_VIOLATION, EACCES}, + {ERROR_LOCK_VIOLATION, ENOLCK}, {ERROR_HANDLE_DISK_FULL, ENOSPC}, + {ERROR_NOT_SUPPORTED, ENOTSUP, TRUE}, {ERROR_DEV_NOT_EXIST, ENODEV}, + {ERROR_FILE_EXISTS, EEXIST}, {ERROR_CANNOT_MAKE, EACCES}, + {ERROR_INVALID_PARAMETER, EINVAL, TRUE}, {ERROR_OPEN_FAILED, EIO}, + {ERROR_BUFFER_OVERFLOW, ENAMETOOLONG}, {ERROR_DISK_FULL, ENOSPC}, + {ERROR_INVALID_NAME, EINVAL}, {ERROR_NEGATIVE_SEEK, EINVAL}, + {ERROR_BUSY_DRIVE, EBUSY}, {ERROR_DIR_NOT_EMPTY, ENOTEMPTY}, + {ERROR_BUSY, EBUSY}, {ERROR_ALREADY_EXISTS, EEXIST}, + {ERROR_LOCKED, ENOLCK}, {ERROR_DIRECTORY, EINVAL}, + {ERROR_OPERATION_ABORTED, ECANCELED}, {ERROR_NOACCESS, EACCES}, + {ERROR_CANTOPEN, EIO}, {ERROR_CANTREAD, EIO}, {ERROR_CANTWRITE, EIO}, + {ERROR_RETRY, EAGAIN}, {ERROR_OPEN_FILES, EBUSY}, + {ERROR_DEVICE_IN_USE, EBUSY}, {ERROR_REPARSE_TAG_INVALID, EINVAL, TRUE}, + {WSAEINTR, EINTR}, {WSAEBADF, EBADF}, {WSAEACCES, EACCES}, + {WSAEFAULT, EFAULT}, {WSAEINVAL, EINVAL}, {WSAEMFILE, EMFILE}, + {WSAEWOULDBLOCK, EWOULDBLOCK}, {WSAEINPROGRESS, EINPROGRESS}, + {WSAEALREADY, EALREADY}, {WSAENOTSOCK, ENOTSOCK}, + {WSAEDESTADDRREQ, EDESTADDRREQ}, {WSAEMSGSIZE, EMSGSIZE}, + {WSAEPROTOTYPE, EPROTOTYPE}, {WSAENOPROTOOPT, ENOPROTOOPT}, + {WSAEPROTONOSUPPORT, EPROTONOSUPPORT}, {WSAEOPNOTSUPP, EOPNOTSUPP}, + {WSAEAFNOSUPPORT, EAFNOSUPPORT}, {WSAEADDRINUSE, EADDRINUSE}, + {WSAEADDRNOTAVAIL, EADDRNOTAVAIL}, {WSAENETDOWN, ENETDOWN}, + {WSAENETUNREACH, ENETUNREACH}, {WSAENETRESET, ENETRESET}, + {WSAECONNABORTED, ECONNABORTED}, {WSAECONNRESET, ECONNRESET}, + {WSAENOBUFS, ENOBUFS}, {WSAEISCONN, EISCONN}, {WSAENOTCONN, ENOTCONN}, + {WSAETIMEDOUT, ETIMEDOUT}, {WSAECONNREFUSED, ECONNREFUSED}, + {WSAENAMETOOLONG, ENAMETOOLONG}, {WSAEHOSTUNREACH, EHOSTUNREACH} + }; + int i, ret; + + for(i=0; i<ARRAY_SIZE(tests); i++) + { + ret = p__Winerror_map(tests[i].winerr); + ok(ret == tests[i].doserr || broken(tests[i].broken && !ret), + "_Winerror_map(%d) returned %d, expected %d\n", + tests[i].winerr, ret, tests[i].doserr); + } +} + START_TEST(msvcp140) { if(!init()) return; @@ -1326,5 +1383,6 @@ START_TEST(msvcp140) test_Rename(); test_Last_write_time(); test__Winerror_message(); + test__Winerror_map(); FreeLibrary(msvcp); } diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c index 89dfc45..2529224 100644 --- a/dlls/msvcp90/misc.c +++ b/dlls/msvcp90/misc.c @@ -197,6 +197,51 @@ static struct { }; #endif +#if _MSVCP_VER >= 140 +static struct { + int winerr; + int doserr; +} winerror_map[] = +{ + {ERROR_INVALID_FUNCTION, ENOSYS}, {ERROR_FILE_NOT_FOUND, ENOENT}, + {ERROR_PATH_NOT_FOUND, ENOENT}, {ERROR_TOO_MANY_OPEN_FILES, EMFILE}, + {ERROR_ACCESS_DENIED, EACCES}, {ERROR_INVALID_HANDLE, EINVAL}, + {ERROR_NOT_ENOUGH_MEMORY, ENOMEM}, {ERROR_INVALID_ACCESS, EACCES}, + {ERROR_OUTOFMEMORY, ENOMEM}, {ERROR_INVALID_DRIVE, ENODEV}, + {ERROR_CURRENT_DIRECTORY, EACCES}, {ERROR_NOT_SAME_DEVICE, EXDEV}, + {ERROR_WRITE_PROTECT, EACCES}, {ERROR_BAD_UNIT, ENODEV}, + {ERROR_NOT_READY, EAGAIN}, {ERROR_SEEK, EIO}, {ERROR_WRITE_FAULT, EIO}, + {ERROR_READ_FAULT, EIO}, {ERROR_SHARING_VIOLATION, EACCES}, + {ERROR_LOCK_VIOLATION, ENOLCK}, {ERROR_HANDLE_DISK_FULL, ENOSPC}, + {ERROR_NOT_SUPPORTED, ENOTSUP}, {ERROR_DEV_NOT_EXIST, ENODEV}, + {ERROR_FILE_EXISTS, EEXIST}, {ERROR_CANNOT_MAKE, EACCES}, + {ERROR_INVALID_PARAMETER, EINVAL}, {ERROR_OPEN_FAILED, EIO}, + {ERROR_BUFFER_OVERFLOW, ENAMETOOLONG}, {ERROR_DISK_FULL, ENOSPC}, + {ERROR_INVALID_NAME, EINVAL}, {ERROR_NEGATIVE_SEEK, EINVAL}, + {ERROR_BUSY_DRIVE, EBUSY}, {ERROR_DIR_NOT_EMPTY, ENOTEMPTY}, + {ERROR_BUSY, EBUSY}, {ERROR_ALREADY_EXISTS, EEXIST}, + {ERROR_LOCKED, ENOLCK}, {ERROR_DIRECTORY, EINVAL}, + {ERROR_OPERATION_ABORTED, ECANCELED}, {ERROR_NOACCESS, EACCES}, + {ERROR_CANTOPEN, EIO}, {ERROR_CANTREAD, EIO}, {ERROR_CANTWRITE, EIO}, + {ERROR_RETRY, EAGAIN}, {ERROR_OPEN_FILES, EBUSY}, + {ERROR_DEVICE_IN_USE, EBUSY}, {ERROR_REPARSE_TAG_INVALID, EINVAL}, + {WSAEINTR, EINTR}, {WSAEBADF, EBADF}, {WSAEACCES, EACCES}, + {WSAEFAULT, EFAULT}, {WSAEINVAL, EINVAL}, {WSAEMFILE, EMFILE}, + {WSAEWOULDBLOCK, EWOULDBLOCK}, {WSAEINPROGRESS, EINPROGRESS}, + {WSAEALREADY, EALREADY}, {WSAENOTSOCK, ENOTSOCK}, + {WSAEDESTADDRREQ, EDESTADDRREQ}, {WSAEMSGSIZE, EMSGSIZE}, + {WSAEPROTOTYPE, EPROTOTYPE}, {WSAENOPROTOOPT, ENOPROTOOPT}, + {WSAEPROTONOSUPPORT, EPROTONOSUPPORT}, {WSAEOPNOTSUPP, EOPNOTSUPP}, + {WSAEAFNOSUPPORT, EAFNOSUPPORT}, {WSAEADDRINUSE, EADDRINUSE}, + {WSAEADDRNOTAVAIL, EADDRNOTAVAIL}, {WSAENETDOWN, ENETDOWN}, + {WSAENETUNREACH, ENETUNREACH}, {WSAENETRESET, ENETRESET}, + {WSAECONNABORTED, ECONNABORTED}, {WSAECONNRESET, ECONNRESET}, + {WSAENOBUFS, ENOBUFS}, {WSAEISCONN, EISCONN}, {WSAENOTCONN, ENOTCONN}, + {WSAETIMEDOUT, ETIMEDOUT}, {WSAECONNREFUSED, ECONNREFUSED}, + {WSAENAMETOOLONG, ENAMETOOLONG}, {WSAEHOSTUNREACH, EHOSTUNREACH} +}; +#endif + struct __Container_proxy; typedef struct { @@ -2152,4 +2197,24 @@ ULONG __cdecl _Winerror_message(ULONG err, char *buf, ULONG size) return FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, buf, size, NULL); } + +/* ?_Winerror_map@std@@YAHH@Z */ +int __cdecl _Winerror_map(int err) +{ + int low = 0, high = ARRAY_SIZE(winerror_map) - 1, mid; + + while(low <= high) + { + mid = (low + high) / 2; + + if(err == winerror_map[mid].winerr) + return winerror_map[mid].doserr; + if(err > winerror_map[mid].winerr) + low = mid + 1; + else + high = mid - 1; + } + + return 0; +} #endif
1
0
0
0
Michael Stefaniuc : include: Add a generic available ARRAY_SIZE().
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: eb5de88738da819c0c0c5f39643e36c3ccd78728 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=eb5de88738da819c0c0c5f39…
Author: Michael Stefaniuc <mstefani(a)winehq.org> Date: Wed Jul 4 01:10:37 2018 +0200 include: Add a generic available ARRAY_SIZE(). Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 962b31c80b74cfc479da386a8c76d55d26aed752) Conflicts: dlls/advapi32/advapi32_misc.h dlls/d3d12/d3d12_main.c dlls/d3d9/d3d9_private.h dlls/winevulkan/vulkan_private.h dlls/xmllite/xmllite_private.h programs/regedit/main.h programs/winedbg/debugger.h Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/d2d1/d2d1_private.h | 4 ---- dlls/d3d11/d3d11_private.h | 4 ---- dlls/d3drm/d3drm_private.h | 4 ---- dlls/d3dx9_36/d3dx9_private.h | 2 -- dlls/ddraw/ddraw_private.h | 2 -- dlls/dmloader/dmloader_private.h | 1 - dlls/msi/tokenize.c | 2 -- dlls/usp10/usp10_internal.h | 4 ---- dlls/wined3d/wined3d_private.h | 4 ---- dlls/xmllite/writer.c | 2 -- include/wine/test.h | 4 +++- include/winnt.h | 4 ++++ programs/notepad/main.h | 2 -- programs/reg/reg.h | 1 - programs/regedit/regproc.c | 2 -- tools/make_xftmpl.c | 2 -- 16 files changed, 7 insertions(+), 37 deletions(-) diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index 98298f8..760bff6 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -30,10 +30,6 @@ #endif #include "dwrite_2.h" -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) -#endif - enum d2d_brush_type { D2D_BRUSH_TYPE_SOLID, diff --git a/dlls/d3d11/d3d11_private.h b/dlls/d3d11/d3d11_private.h index e7fd3a7..3f9bed2 100644 --- a/dlls/d3d11/d3d11_private.h +++ b/dlls/d3d11/d3d11_private.h @@ -37,10 +37,6 @@ #include "wine/winedxgi.h" #include "wine/rbtree.h" -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) -#endif - #define MAKE_TAG(ch0, ch1, ch2, ch3) \ ((DWORD)(ch0) | ((DWORD)(ch1) << 8) | \ ((DWORD)(ch2) << 16) | ((DWORD)(ch3) << 24 )) diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h index 65e0016..2f3269e 100644 --- a/dlls/d3drm/d3drm_private.h +++ b/dlls/d3drm/d3drm_private.h @@ -32,10 +32,6 @@ #include "wine/debug.h" #include "wine/list.h" -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a))) -#endif - struct d3drm_object { LONG ref; diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h index 5ac5e63..0dbd160 100644 --- a/dlls/d3dx9_36/d3dx9_private.h +++ b/dlls/d3dx9_36/d3dx9_private.h @@ -30,8 +30,6 @@ #define ULONG64_MAX (~(ULONG64)0) -#define ARRAY_SIZE(array) (sizeof(array)/sizeof(*array)) - struct vec4 { float x, y, z, w; diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index 0b6666a..34e221a 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -38,8 +38,6 @@ #include "wine/list.h" #include "wine/wined3d.h" -#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) - extern const struct wined3d_parent_ops ddraw_null_wined3d_parent_ops DECLSPEC_HIDDEN; extern DWORD force_refresh_rate DECLSPEC_HIDDEN; diff --git a/dlls/dmloader/dmloader_private.h b/dlls/dmloader/dmloader_private.h index ecda299..36e2bd8 100644 --- a/dlls/dmloader/dmloader_private.h +++ b/dlls/dmloader/dmloader_private.h @@ -42,7 +42,6 @@ #include "dmusicf.h" #include "dmusics.h" -#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0])) #define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field)) /* dmloader.dll global (for DllCanUnloadNow) */ diff --git a/dlls/msi/tokenize.c b/dlls/msi/tokenize.c index 1656fd8..d1c2da9 100644 --- a/dlls/msi/tokenize.c +++ b/dlls/msi/tokenize.c @@ -77,8 +77,6 @@ static const WCHAR updateW[] = {'U','P','D','A','T','E'}; static const WCHAR valuesW[] = {'V','A','L','U','E','S'}; static const WCHAR whereW[] = {'W','H','E','R','E'}; -#define ARRAY_SIZE(array) (sizeof(array)/sizeof((array)[0])) - /* ** These are the keywords ** They MUST be in alphabetical order diff --git a/dlls/usp10/usp10_internal.h b/dlls/usp10/usp10_internal.h index 2dfca86..f48838e 100644 --- a/dlls/usp10/usp10_internal.h +++ b/dlls/usp10/usp10_internal.h @@ -24,10 +24,6 @@ ( (ULONG)_x2 << 8 ) | \ (ULONG)_x1 ) -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) -#endif - enum usp10_script { Script_Undefined = 0x00, diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 56b0f90..004bcd6 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -57,10 +57,6 @@ #include "wine/rbtree.h" #include "wine/wgl_driver.h" -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) -#endif - #define MAKEDWORD_VERSION(maj, min) (((maj & 0xffffu) << 16) | (min & 0xffffu)) /* Driver quirks */ diff --git a/dlls/xmllite/writer.c b/dlls/xmllite/writer.c index 9bf7e63..88f75b6 100644 --- a/dlls/xmllite/writer.c +++ b/dlls/xmllite/writer.c @@ -37,8 +37,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(xmllite); /* not defined in public headers */ DEFINE_GUID(IID_IXmlWriterOutput, 0xc1131708, 0x0f59, 0x477f, 0x93, 0x59, 0x7d, 0x33, 0x24, 0x51, 0xbc, 0x1a); -#define ARRAY_SIZE(array) (sizeof(array)/sizeof((array)[0])) - static const WCHAR closeelementW[] = {'<','/'}; static const WCHAR closetagW[] = {' ','/','>'}; static const WCHAR closepiW[] = {'?','>'}; diff --git a/include/wine/test.h b/include/wine/test.h index d3ccd09..fd427b5 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -127,7 +127,9 @@ extern void __winetest_cdecl winetest_trace( const char *msg, ... ) WINETEST_PRI #define todo_wine_if(is_todo) todo_if((is_todo) && !strcmp(winetest_platform, "wine")) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#ifndef ARRAY_SIZE +# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#endif #ifdef NONAMELESSUNION # define U(x) (x).u diff --git a/include/winnt.h b/include/winnt.h index 3eac94d..053bef3 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -759,6 +759,10 @@ typedef struct _MEMORY_BASIC_INFORMATION #define CONTAINING_RECORD(address, type, field) \ ((type *)((PCHAR)(address) - offsetof(type, field))) +#ifdef __WINESRC__ +# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#endif + /* Types */ typedef struct _LIST_ENTRY { diff --git a/programs/notepad/main.h b/programs/notepad/main.h index b672be6..e0efef0 100644 --- a/programs/notepad/main.h +++ b/programs/notepad/main.h @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#define ARRAY_SIZE(a) sizeof(a)/sizeof((a)[0]) - #include "notepad_res.h" #define MAX_STRING_LEN 255 diff --git a/programs/reg/reg.h b/programs/reg/reg.h index eb792bb..42001c7 100644 --- a/programs/reg/reg.h +++ b/programs/reg/reg.h @@ -21,7 +21,6 @@ #include "resource.h" -#define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A)) #define MAX_SUBKEY_LEN 257 /* reg.c */ diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c index 5866ad0..a6183c9 100644 --- a/programs/regedit/regproc.c +++ b/programs/regedit/regproc.c @@ -42,8 +42,6 @@ static HKEY reg_class_keys[] = { HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA }; -#define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A)) - void *heap_xalloc(size_t size) { void *buf = HeapAlloc(GetProcessHeap(), 0, size); diff --git a/tools/make_xftmpl.c b/tools/make_xftmpl.c index 6a22fef..49a1273 100644 --- a/tools/make_xftmpl.c +++ b/tools/make_xftmpl.c @@ -35,8 +35,6 @@ #include "windef.h" #include "guiddef.h" -#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0])) - #define TOKEN_NAME 1 #define TOKEN_STRING 2 #define TOKEN_INTEGER 3
1
0
0
0
Fabian Maurer : msi: In dialogs show titlebar buttons.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: 82b6b61360c2399a245cce9b72d599228fd897cd URL:
https://source.winehq.org/git/wine.git/?a=commit;h=82b6b61360c2399a245cce9b…
Author: Fabian Maurer <dark.shadow4(a)web.de> Date: Sat Nov 3 18:05:28 2018 +0100 msi: In dialogs show titlebar buttons. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=46080
Signed-off-by: Fabian Maurer <dark.shadow4(a)web.de> Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 84e6b331918d57f39e20a3063b67eb7fc0876288) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/msi/dialog.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c index abecde1..304a3e9 100644 --- a/dlls/msi/dialog.c +++ b/dlls/msi/dialog.c @@ -3798,6 +3798,10 @@ static LRESULT WINAPI MSIDialog_WndProc( HWND hwnd, UINT msg, case WM_COMMAND: return msi_dialog_oncommand( dialog, wParam, (HWND)lParam ); + case WM_CLOSE: + /* Simulate escape press */ + return msi_dialog_oncommand(dialog, 2, NULL); + case WM_ACTIVATE: if( LOWORD(wParam) == WA_INACTIVE ) dialog->hWndFocus = GetFocus(); @@ -3843,10 +3847,13 @@ static UINT dialog_run_message_loop( msi_dialog *dialog ) return SendMessageW( hMsiHiddenWindow, WM_MSI_DIALOG_CREATE, 0, (LPARAM) dialog ); /* create the dialog window, don't show it yet */ - style = WS_OVERLAPPED; + style = WS_OVERLAPPED | WS_SYSMENU; if( dialog->attributes & msidbDialogAttributesVisible ) style |= WS_VISIBLE; + if (dialog->parent == NULL && (dialog->attributes & msidbDialogAttributesMinimize)) + style |= WS_MINIMIZEBOX; + hwnd = CreateWindowW( szMsiDialogClass, dialog->name, style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, dialog );
1
0
0
0
Jacek Caban : crypt32: Added support for szOID_NIST_sha* OIDs.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: 0947abe05d04a209f6688c7cdc38dde2abe3626d URL:
https://source.winehq.org/git/wine.git/?a=commit;h=0947abe05d04a209f6688c7c…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Jan 29 19:51:21 2018 +0100 crypt32: Added support for szOID_NIST_sha* OIDs. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 86c998e551f25cbd0c04379ce17d4f3ec1161fac) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/crypt32/oid.c | 7 +++++++ dlls/crypt32/tests/oid.c | 25 ++++++++++++++++++++----- include/wincrypt.h | 3 +++ 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/dlls/crypt32/oid.c b/dlls/crypt32/oid.c index d5c2953..5a447d0 100644 --- a/dlls/crypt32/oid.c +++ b/dlls/crypt32/oid.c @@ -1053,6 +1053,9 @@ static const WCHAR rc2[] = { 'r','c','2',0 }; static const WCHAR rc4[] = { 'r','c','4',0 }; static const WCHAR sha[] = { 's','h','a',0 }; static const WCHAR sha1[] = { 's','h','a','1',0 }; +static const WCHAR sha256[] = { 's','h','a','2','5','6',0 }; +static const WCHAR sha384[] = { 's','h','a','3','8','4',0 }; +static const WCHAR sha512[] = { 's','h','a','5','1','2',0 }; static const WCHAR RSA[] = { 'R','S','A',0 }; static const WCHAR RSA_KEYX[] = { 'R','S','A','_','K','E','Y','X',0 }; static const WCHAR RSA_SIGN[] = { 'R','S','A','_','S','I','G','N',0 }; @@ -1157,6 +1160,10 @@ static const struct OIDInfoConstructor { { 1, szOID_RSA_MD5, CALG_MD5, md5, NULL }, { 1, szOID_RSA_MD4, CALG_MD4, md4, NULL }, { 1, szOID_RSA_MD2, CALG_MD2, md2, NULL }, + /* NOTE: Windows Vista+ uses -1 instead of CALG_SHA_* following SHA entries. */ + { 1, szOID_NIST_sha256, CALG_SHA_256, sha256, NULL }, + { 1, szOID_NIST_sha384, CALG_SHA_384, sha384, NULL }, + { 1, szOID_NIST_sha512, CALG_SHA_512, sha512, NULL }, { 2, szOID_OIWSEC_desCBC, CALG_DES, des, NULL }, { 2, szOID_RSA_DES_EDE3_CBC, CALG_3DES, tripledes, NULL }, diff --git a/dlls/crypt32/tests/oid.c b/dlls/crypt32/tests/oid.c index b661407..8fc67b3 100644 --- a/dlls/crypt32/tests/oid.c +++ b/dlls/crypt32/tests/oid.c @@ -36,6 +36,7 @@ struct OIDToAlgID LPCSTR oid; LPCSTR altOid; DWORD algID; + DWORD altAlgID; }; static const struct OIDToAlgID oidToAlgID[] = { @@ -72,6 +73,9 @@ static const struct OIDToAlgID oidToAlgID[] = { { szOID_OIWDIR_md2RSA, NULL, CALG_MD2 }, { szOID_INFOSEC_mosaicUpdatedSig, NULL, CALG_SHA }, { szOID_INFOSEC_mosaicKMandUpdSig, NULL, CALG_DSS_SIGN }, + { szOID_NIST_sha256, NULL, CALG_SHA_256, -1 }, + { szOID_NIST_sha384, NULL, CALG_SHA_384, -1 }, + { szOID_NIST_sha512, NULL, CALG_SHA_512, -1 } }; static const struct OIDToAlgID algIDToOID[] = { @@ -104,10 +108,7 @@ static void testOIDToAlgID(void) for (i = 0; i < sizeof(oidToAlgID) / sizeof(oidToAlgID[0]); i++) { alg = CertOIDToAlgId(oidToAlgID[i].oid); - /* Not all Windows installations support all these, so make sure it's - * at least not the wrong one. - */ - ok(alg == 0 || alg == oidToAlgID[i].algID, + ok(alg == oidToAlgID[i].algID || (oidToAlgID[i].altAlgID && alg == oidToAlgID[i].altAlgID), "Expected %d, got %d\n", oidToAlgID[i].algID, alg); } } @@ -126,6 +127,7 @@ static void testAlgIDToOID(void) { oid = CertAlgIdToOID(algIDToOID[i].algID); /* Allow failure, not every version of Windows supports every algo */ + ok(oid != NULL || broken(!oid), "CertAlgIdToOID failed, expected %s\n", algIDToOID[i].oid); if (oid) { if (strcmp(oid, algIDToOID[i].oid)) @@ -542,11 +544,13 @@ static void test_enumOIDInfo(void) static void test_findOIDInfo(void) { static WCHAR sha1[] = { 's','h','a','1',0 }; - static CHAR oid_rsa_md5[] = szOID_RSA_MD5; + static CHAR oid_rsa_md5[] = szOID_RSA_MD5, oid_sha256[] = szOID_NIST_sha256; ALG_ID alg = CALG_SHA1; ALG_ID algs[2] = { CALG_MD5, CALG_RSA_SIGN }; PCCRYPT_OID_INFO info; + static const WCHAR sha256W[] = {'s','h','a','2','5','6',0}; + info = CryptFindOIDInfo(0, NULL, 0); ok(info == NULL, "Expected NULL\n"); info = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, oid_rsa_md5, 0); @@ -585,6 +589,17 @@ static void test_findOIDInfo(void) ok(U(*info).Algid == CALG_MD5, "Expected CALG_MD5, got %d\n", U(*info).Algid); } + + info = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, oid_sha256, 0); + ok(info != NULL, "Expected to find szOID_RSA_MD5\n"); + if (info) + { + ok(!strcmp(info->pszOID, szOID_NIST_sha256), "Expected %s, got %s\n", + szOID_NIST_sha256, info->pszOID); + ok(!lstrcmpW(info->pwszName, sha256W), "pwszName = %s\n", wine_dbgstr_w(info->pwszName)); + ok(U(*info).Algid == CALG_SHA_256 || U(*info).Algid == -1, + "Expected CALG_MD5 or -1, got %d\n", U(*info).Algid); + } } START_TEST(oid) diff --git a/include/wincrypt.h b/include/wincrypt.h index 83db673..87d5e86 100644 --- a/include/wincrypt.h +++ b/include/wincrypt.h @@ -2941,6 +2941,9 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19" #define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20" #define szOID_INFOSEC_mosaicUpdateInteg "2.16.840.1.101.2.1.1.21" +#define szOID_NIST_sha256 "2.16.840.1.101.3.4.2.1" +#define szOID_NIST_sha384 "2.16.840.1.101.3.4.2.2" +#define szOID_NIST_sha512 "2.16.840.1.101.3.4.2.3" #define szOID_COMMON_NAME "2.5.4.3" #define szOID_SUR_NAME "2.5.4.4" #define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5"
1
0
0
0
Gijs Vermeulen : msvcp100: Add Concurrency::_GetCombinableSize stub.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: 21d030099ae8a099ffbdf94b906b1af48e50490f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=21d030099ae8a099ffbdf94b…
Author: Gijs Vermeulen <gijsvrm(a)gmail.com> Date: Thu Nov 1 17:52:31 2018 +0100 msvcp100: Add Concurrency::_GetCombinableSize stub. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=41419
Signed-off-by: Gijs Vermeulen <gijsvrm(a)gmail.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 82ba4373ae84ebe51d649dfe416af8b31097d62a) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/concrt140/concrt140.spec | 4 ++-- dlls/msvcp100/msvcp100.spec | 4 ++-- dlls/msvcp110/msvcp110.spec | 4 ++-- dlls/msvcp120/msvcp120.spec | 4 ++-- dlls/msvcp120_app/msvcp120_app.spec | 4 ++-- dlls/msvcp90/misc.c | 8 ++++++++ 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index 7234a3f..0ce01fe 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -336,8 +336,8 @@ @ thiscall -arch=i386 ?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ @ cdecl -arch=win64 ?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ @ cdecl ?_Get@_CurrentScheduler@details@Concurrency@@SA?AV_Scheduler@23@XZ(ptr) msvcr120.?_Get@_CurrentScheduler@details@Concurrency@@SA?AV_Scheduler@23@XZ -@ stub -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ -@ stub -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ +@ cdecl -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ() msvcp120.?_GetCombinableSize@details@Concurrency@@YAIXZ +@ cdecl -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ() msvcp120.?_GetCombinableSize@details@Concurrency@@YA_KXZ @ stub -arch=win32 ?_GetConcRTTraceInfo@Concurrency@@YAPBU_CONCRT_TRACE_INFO@details@1@XZ @ stub -arch=win64 ?_GetConcRTTraceInfo@Concurrency@@YAPEBU_CONCRT_TRACE_INFO@details@1@XZ @ cdecl ?_GetConcurrency@details@Concurrency@@YAIXZ() msvcr120.?_GetConcurrency@details@Concurrency@@YAIXZ diff --git a/dlls/msvcp100/msvcp100.spec b/dlls/msvcp100/msvcp100.spec index 0d6e6dc..b5f44c4 100644 --- a/dlls/msvcp100/msvcp100.spec +++ b/dlls/msvcp100/msvcp100.spec @@ -821,8 +821,8 @@ @ cdecl -arch=win64 ?_Fput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBD_K333@Z(ptr ptr ptr ptr long str long long long long) num_put_short__Fput @ cdecl -arch=win32 ?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBDIIII@Z(ptr ptr long ptr ptr long str long long long long) num_put_wchar__Fput @ cdecl -arch=win64 ?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K444@Z(ptr ptr ptr ptr long str long long long long) num_put_wchar__Fput -@ stub -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ -@ stub -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ +@ cdecl -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ() _GetCombinableSize +@ cdecl -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ() _GetCombinableSize @ stub ?_GetCurrentThreadId@details@Concurrency@@YAKXZ @ cdecl -arch=win32 ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z(ptr ptr) codecvt_char__Getcat @ cdecl -arch=win64 ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z(ptr ptr) codecvt_char__Getcat diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec index 25ae3d4..1112c5a 100644 --- a/dlls/msvcp110/msvcp110.spec +++ b/dlls/msvcp110/msvcp110.spec @@ -1227,8 +1227,8 @@ @ cdecl -arch=win64 ?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K444@Z(ptr ptr ptr ptr long str long long long long) num_put_wchar__Fput @ stub -arch=win32 ?_Future_error_map@std@@YAPBDH@Z @ stub -arch=win64 ?_Future_error_map@std@@YAPEBDH@Z -@ stub -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ -@ stub -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ +@ cdecl -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ() _GetCombinableSize +@ cdecl -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ() _GetCombinableSize @ stub ?_GetCurrentThreadId@details@Concurrency@@YAKXZ @ stub ?_GetNextAsyncId@details@Concurrency@@YAIXZ @ stub -arch=win32 ?_Get_future_error_what@std@@YAPBDH@Z diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index dd25c9f..2e691d4 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -1192,8 +1192,8 @@ @ cdecl -arch=win64 ?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K444@Z(ptr ptr ptr ptr long str long long long long) num_put_wchar__Fput @ stub -arch=win32 ?_Future_error_map@std@@YAPBDH@Z @ stub -arch=win64 ?_Future_error_map@std@@YAPEBDH@Z -@ stub -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ -@ stub -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ +@ cdecl -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ() _GetCombinableSize +@ cdecl -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ() _GetCombinableSize @ cdecl -arch=win32 ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z(ptr ptr) codecvt_char__Getcat @ cdecl -arch=win64 ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z(ptr ptr) codecvt_char__Getcat @ cdecl -arch=win32 ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z(ptr ptr) codecvt_short__Getcat diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index 6f599b6..4c6df37 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -1192,8 +1192,8 @@ @ cdecl -arch=win64 ?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K444@Z(ptr ptr ptr ptr long str long long long long) msvcp120.?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K444@Z @ stub -arch=win32 ?_Future_error_map@std@@YAPBDH@Z @ stub -arch=win64 ?_Future_error_map@std@@YAPEBDH@Z -@ stub -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ -@ stub -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ +@ cdecl -arch=win32 ?_GetCombinableSize@details@Concurrency@@YAIXZ() msvcp120.?_GetCombinableSize@details@Concurrency@@YAIXZ +@ cdecl -arch=win64 ?_GetCombinableSize@details@Concurrency@@YA_KXZ() msvcp120.?_GetCombinableSize@details@Concurrency@@YA_KXZ @ cdecl -arch=win32 ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z(ptr ptr) msvcp120.?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z @ cdecl -arch=win64 ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z(ptr ptr) msvcp120.?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z @ cdecl -arch=win32 ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z(ptr ptr) msvcp120.?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c index 7a682b6..89dfc45 100644 --- a/dlls/msvcp90/misc.c +++ b/dlls/msvcp90/misc.c @@ -1852,6 +1852,14 @@ MSVCP_bool __cdecl is_current_task_group_canceling(void) { return Context_IsCurrentTaskCollectionCanceling(); } + +/* ?_GetCombinableSize@details@Concurrency@@YAIXZ */ +/* ?_GetCombinableSize@details@Concurrency@@YA_KXZ */ +MSVCP_size_t __cdecl _GetCombinableSize(void) +{ + FIXME("() stub\n"); + return 11; +} #endif #if _MSVCP_VER >= 140
1
0
0
0
Louis Lenders : ntoskrnl.exe: Add stub for KeSetTargetProcessorDpc.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: e6148e75789224a3512eeddb272090e5d933aa12 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=e6148e75789224a3512eeddb…
Author: Louis Lenders <xerox.xerox2000x(a)gmail.com> Date: Tue Nov 6 13:10:17 2018 +0100 ntoskrnl.exe: Add stub for KeSetTargetProcessorDpc. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=46040
Signed-off-by: Louis Lenders <xerox.xerox2000x(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 52ed78883898bb10e1c8af85804f389928a976c0) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/ntoskrnl.exe/ntoskrnl.c | 8 ++++++++ dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- include/ddk/ntddk.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 5085f27..815c5eb 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2533,6 +2533,14 @@ VOID WINAPI KeInitializeDpc(PRKDPC Dpc, PKDEFERRED_ROUTINE DeferredRoutine, PVOI } /*********************************************************************** + * KeSetTargetProcessorDpc (NTOSKRNL.EXE.@) + */ +VOID WINAPI KeSetTargetProcessorDpc(PRKDPC dpc, CCHAR number) +{ + FIXME("%p, %d stub\n", dpc, number); +} + +/*********************************************************************** * READ_REGISTER_BUFFER_UCHAR (NTOSKRNL.EXE.@) */ VOID WINAPI READ_REGISTER_BUFFER_UCHAR(PUCHAR Register, PUCHAR Buffer, ULONG Count) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index bdf2a9f..332f606 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -619,7 +619,7 @@ @ stdcall KeSetPriorityThread(ptr long) @ stub KeSetProfileIrql @ stdcall KeSetSystemAffinityThread(long) -@ stub KeSetTargetProcessorDpc +@ stdcall KeSetTargetProcessorDpc(ptr long) @ stub KeSetTimeIncrement @ stub KeSetTimer @ stdcall KeSetTimerEx(ptr int64 long ptr) diff --git a/include/ddk/ntddk.h b/include/ddk/ntddk.h index 7a565aa..f5633e6 100644 --- a/include/ddk/ntddk.h +++ b/include/ddk/ntddk.h @@ -196,6 +196,7 @@ NTSTATUS WINAPI IoQueryDeviceDescription(PINTERFACE_TYPE,PULONG,PCONFIGURATION_ PCONFIGURATION_TYPE,PULONG,PIO_QUERY_DEVICE_ROUTINE,PVOID); void WINAPI IoRegisterDriverReinitialization(PDRIVER_OBJECT,PDRIVER_REINITIALIZE,PVOID); NTSTATUS WINAPI IoRegisterShutdownNotification(PDEVICE_OBJECT); +void WINAPI KeSetTargetProcessorDpc(PRKDPC,CCHAR); BOOLEAN WINAPI MmIsAddressValid(void *); NTSTATUS WINAPI PsSetLoadImageNotifyRoutine(PLOAD_IMAGE_NOTIFY_ROUTINE); void WINAPI RtlInitializeGenericTableAvl(PRTL_AVL_TABLE,PRTL_AVL_COMPARE_ROUTINE,PRTL_AVL_ALLOCATE_ROUTINE, PRTL_AVL_FREE_ROUTINE,void *);
1
0
0
0
Alistair Leslie-Hughes : include: Add MmIsAddressValid to header.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: 6efd7c6f9fd56a9a29971f0697d4ab7fe5c3a34a URL:
https://source.winehq.org/git/wine.git/?a=commit;h=6efd7c6f9fd56a9a29971f06…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Fri Aug 31 01:09:31 2018 +0000 include: Add MmIsAddressValid to header. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 82634cd9237ee1ba0c41e93a42c4848c40c45a64) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- include/ddk/ntddk.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/ddk/ntddk.h b/include/ddk/ntddk.h index 6aae257..7a565aa 100644 --- a/include/ddk/ntddk.h +++ b/include/ddk/ntddk.h @@ -196,6 +196,7 @@ NTSTATUS WINAPI IoQueryDeviceDescription(PINTERFACE_TYPE,PULONG,PCONFIGURATION_ PCONFIGURATION_TYPE,PULONG,PIO_QUERY_DEVICE_ROUTINE,PVOID); void WINAPI IoRegisterDriverReinitialization(PDRIVER_OBJECT,PDRIVER_REINITIALIZE,PVOID); NTSTATUS WINAPI IoRegisterShutdownNotification(PDEVICE_OBJECT); +BOOLEAN WINAPI MmIsAddressValid(void *); NTSTATUS WINAPI PsSetLoadImageNotifyRoutine(PLOAD_IMAGE_NOTIFY_ROUTINE); void WINAPI RtlInitializeGenericTableAvl(PRTL_AVL_TABLE,PRTL_AVL_COMPARE_ROUTINE,PRTL_AVL_ALLOCATE_ROUTINE, PRTL_AVL_FREE_ROUTINE,void *); void WINAPI RtlInsertElementGenericTableAvl(PRTL_AVL_TABLE,void *,ULONG,BOOL*);
1
0
0
0
Sebastian Lackner : xaudio2: Use assembly wrapper to call OnVoiceProcessingPassStart callback.
by Alexandre Julliard
03 Mar '19
03 Mar '19
Module: wine Branch: oldstable Commit: afb233e448c8f011ed066c8fd4bcd34d87303d71 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=afb233e448c8f011ed066c8f…
Author: Sebastian Lackner <sebastian(a)fds-team.de> Date: Thu Nov 1 10:32:38 2018 -0500 xaudio2: Use assembly wrapper to call OnVoiceProcessingPassStart callback. During a callback function, some games use the wrong function signature for an xaudio2 function, which changed between xaudio2 versions. As a result, the EDI and ESI registers are overwritten by the game. Apparently Windows's implementation happens not to use these registers in a way that causes the crash. This patch pushes EDI and ESI onto the stack before calling the callback, then pops them back after the callback exits. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=42520
Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=43358
Signed-off-by: Andrew Eikum <aeikum(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit c649ec3a02a7574578180e1228dacb6f3a511c55) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/xaudio2_7/xaudio_dll.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c index bc5cf1c..5f126a3 100644 --- a/dlls/xaudio2_7/xaudio_dll.c +++ b/dlls/xaudio2_7/xaudio_dll.c @@ -17,6 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "config.h" #include <stdarg.h> #define NONAMELESSUNION @@ -50,6 +51,37 @@ static HINSTANCE instance; #define COMPAT_E_DEVICE_INVALIDATED XAUDIO2_E_DEVICE_INVALIDATED #endif +#if XAUDIO2_VER != 0 && defined(__i386__) +/* EVE Online uses an OnVoiceProcessingPassStart callback which corrupts %esi. */ +#define IXAudio2VoiceCallback_OnVoiceProcessingPassStart(a, b) call_on_voice_processing_pass_start(a, b) +extern void call_on_voice_processing_pass_start(IXAudio2VoiceCallback *This, UINT32 BytesRequired); +__ASM_GLOBAL_FUNC( call_on_voice_processing_pass_start, + "pushl %ebp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") + "movl %esp,%ebp\n\t" + __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") + "pushl %esi\n\t" + __ASM_CFI(".cfi_rel_offset %esi,-4\n\t") + "pushl %edi\n\t" + __ASM_CFI(".cfi_rel_offset %edi,-8\n\t") + "subl $8,%esp\n\t" + "pushl 12(%ebp)\n\t" /* BytesRequired */ + "pushl 8(%ebp)\n\t" /* This */ + "movl 8(%ebp),%eax\n\t" + "movl 0(%eax),%eax\n\t" + "call *0(%eax)\n\t" /* This->lpVtbl->OnVoiceProcessingPassStart */ + "leal -8(%ebp),%esp\n\t" + "popl %edi\n\t" + __ASM_CFI(".cfi_same_value %edi\n\t") + "popl %esi\n\t" + __ASM_CFI(".cfi_same_value %esi\n\t") + "popl %ebp\n\t" + __ASM_CFI(".cfi_def_cfa %esp,4\n\t") + __ASM_CFI(".cfi_same_value %ebp\n\t") + "ret" ) +#endif + static void dump_fmt(const WAVEFORMATEX *fmt) { TRACE("wFormatTag: 0x%x (", fmt->wFormatTag);
1
0
0
0
← Newer
1
...
96
97
98
99
100
101
102
...
110
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
Results per page:
10
25
50
100
200