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
April 2011
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
3 participants
937 discussions
Start a n
N
ew thread
Henri Verbeet : wined3d: Introduce a separate function for depth fills.
by Alexandre Julliard
06 Apr '11
06 Apr '11
Module: wine Branch: master Commit: 419d6e9acd175dff96a0f236cf3de5c778a163e7 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=419d6e9acd175dff96a0f236c…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Tue Apr 5 19:01:29 2011 +0200 wined3d: Introduce a separate function for depth fills. --- dlls/wined3d/surface.c | 104 +++++++++++++++++++++++++++++------------------ 1 files changed, 64 insertions(+), 40 deletions(-) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 7eb238c..e62f1f3 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -10,7 +10,7 @@ * Copyright 2006-2008 Stefan Dösinger for CodeWeavers * Copyright 2007-2008 Henri Verbeet * Copyright 2006-2008 Roderick Colenbrander - * Copyright 2009-2010 Henri Verbeet for CodeWeavers + * Copyright 2009-2011 Henri Verbeet for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -1285,6 +1285,37 @@ static BOOL surface_convert_color_to_float(IWineD3DSurfaceImpl *surface, DWORD c return TRUE; } +static BOOL surface_convert_depth_to_float(IWineD3DSurfaceImpl *surface, DWORD depth, float *float_depth) +{ + const struct wined3d_format *format = surface->resource.format; + + switch (format->id) + { + case WINED3DFMT_S1_UINT_D15_UNORM: + *float_depth = depth / (float)0x00007fff; + break; + + case WINED3DFMT_D16_UNORM: + *float_depth = depth / (float)0x0000ffff; + break; + + case WINED3DFMT_D24_UNORM_S8_UINT: + case WINED3DFMT_X8D24_UNORM: + *float_depth = depth / (float)0x00ffffff; + break; + + case WINED3DFMT_D32_UNORM: + *float_depth = depth / (float)0xffffffff; + break; + + default: + ERR("Unhandled conversion from %s to floating point.\n", debug_d3dformat(format->id)); + return FALSE; + } + + return TRUE; +} + static void surface_evict_sysmem(IWineD3DSurfaceImpl *surface) { if (surface->flags & SFLAG_DONOTFREE) @@ -3863,42 +3894,22 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *dst_surface, return WINED3DERR_INVALIDCALL; } -static HRESULT IWineD3DSurfaceImpl_BltZ(IWineD3DSurfaceImpl *This, const RECT *DestRect, - IWineD3DSurface *src_surface, const RECT *src_rect, DWORD flags, const WINEDDBLTFX *DDBltFx) +/* Do not call while under the GL lock. */ +static HRESULT wined3d_surface_depth_fill(IWineD3DSurfaceImpl *surface, const RECT *rect, float depth) { - IWineD3DDeviceImpl *device = This->resource.device; - float depth; + IWineD3DDeviceImpl *device = surface->resource.device; - if (flags & WINEDDBLT_DEPTHFILL) + if (surface != device->depth_stencil) { - switch (This->resource.format->id) - { - case WINED3DFMT_D16_UNORM: - depth = (float) DDBltFx->u5.dwFillDepth / (float) 0x0000ffff; - break; - case WINED3DFMT_S1_UINT_D15_UNORM: - depth = (float) DDBltFx->u5.dwFillDepth / (float) 0x00007fff; - break; - case WINED3DFMT_D24_UNORM_S8_UINT: - case WINED3DFMT_X8D24_UNORM: - depth = (float) DDBltFx->u5.dwFillDepth / (float) 0x00ffffff; - break; - case WINED3DFMT_D32_UNORM: - depth = (float) DDBltFx->u5.dwFillDepth / (float) 0xffffffff; - break; - default: - depth = 0.0f; - ERR("Unexpected format for depth fill: %s.\n", debug_d3dformat(This->resource.format->id)); - } - - return IWineD3DDevice_Clear((IWineD3DDevice *)device, DestRect ? 1 : 0, DestRect, - WINED3DCLEAR_ZBUFFER, 0x00000000, depth, 0x00000000); + FIXME("Depth fill is only implemented for the current depth / stencil buffer.\n"); + return WINED3DERR_INVALIDCALL; } - FIXME("(%p): Unsupp depthstencil blit\n", This); - return WINED3DERR_INVALIDCALL; + return IWineD3DDevice_Clear((IWineD3DDevice *)device, !!rect, rect, + WINED3DCLEAR_ZBUFFER, 0x00000000, depth, 0); } +/* Do not call while under the GL lock. */ static HRESULT WINAPI IWineD3DSurfaceImpl_Blt(IWineD3DSurface *iface, const RECT *DestRect, IWineD3DSurface *src_surface, const RECT *SrcRect, DWORD flags, const WINEDDBLTFX *DDBltFx, WINED3DTEXTUREFILTERTYPE Filter) @@ -3918,20 +3929,33 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_Blt(IWineD3DSurface *iface, const RECT return WINEDDERR_SURFACEBUSY; } - /* Accessing the depth stencil is supposed to fail between a BeginScene and EndScene pair, - * except depth blits, which seem to work - */ - if (This == device->depth_stencil || (src && src == device->depth_stencil)) + if (This->resource.format->flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL) + || (src && src->resource.format->flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))) { - if (device->inScene && !(flags & WINEDDBLT_DEPTHFILL)) + if (flags & WINEDDBLT_DEPTHFILL) { - TRACE("Attempt to access the depth stencil surface in a BeginScene / EndScene pair, returning WINED3DERR_INVALIDCALL\n"); - return WINED3DERR_INVALIDCALL; + float depth; + + TRACE("Depth fill.\n"); + + if (!surface_convert_depth_to_float(This, DDBltFx->u5.dwFillDepth, &depth)) + return WINED3DERR_INVALIDCALL; + + if (SUCCEEDED(wined3d_surface_depth_fill(This, DestRect, depth))) + return WINED3D_OK; } - else if (SUCCEEDED(IWineD3DSurfaceImpl_BltZ(This, DestRect, src_surface, SrcRect, flags, DDBltFx))) + else { - TRACE("Z Blit override handled the blit\n"); - return WINED3D_OK; + /* Accessing depth / stencil surfaces is supposed to fail while in + * a scene, except for fills, which seem to work. */ + if (device->inScene) + { + WARN("Rejecting depth / stencil access while in scene.\n"); + return WINED3DERR_INVALIDCALL; + } + + FIXME("Depth blits not implemeted.\n"); + return WINED3DERR_INVALIDCALL; } }
1
0
0
0
Henri Verbeet : wined3d: Make "blit_operation" naming a bit more consistent .
by Alexandre Julliard
06 Apr '11
06 Apr '11
Module: wine Branch: master Commit: 90da00927ef2903bb953faa7de1e7e320dd9f034 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=90da00927ef2903bb953faa7d…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Tue Apr 5 19:01:28 2011 +0200 wined3d: Make "blit_operation" naming a bit more consistent. --- dlls/wined3d/arb_program_shader.c | 6 +++--- dlls/wined3d/directx.c | 2 +- dlls/wined3d/surface.c | 36 ++++++++++++++++++------------------ dlls/wined3d/utils.c | 2 +- dlls/wined3d/wined3d_private.h | 12 ++++++------ 5 files changed, 29 insertions(+), 29 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=90da00927ef2903bb953f…
1
0
0
0
Piotr Caban : msvcr90: Added _CRT_RTC_INIT and _CRT_RTC_INITW implementation.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 2d7fa5f2435ed2a7f322851a594e993c52d85395 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2d7fa5f2435ed2a7f322851a5…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Apr 5 17:07:31 2011 +0200 msvcr90: Added _CRT_RTC_INIT and _CRT_RTC_INITW implementation. --- dlls/msvcr100/msvcr100.spec | 6 +++--- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 6 +++--- dlls/msvcr90/msvcr90.c | 18 ++++++++++++++++++ dlls/msvcr90/msvcr90.spec | 6 +++--- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index c1f6e47..88655cf 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -290,7 +290,7 @@ @ stub ?lock@critical_section@Concurrency@@QAEXXZ @ stub ?lock@reader_writer_lock@Concurrency@@QAEXXZ @ stub ?lock_read@reader_writer_lock@Concurrency@@QAEXXZ -@ stub -arch=win32 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z # public: char const * __thiscall type_info::name(struct __type_info_node *)const +@ stub -arch=win32 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z # public: char const * __thiscall type_info::name(struct __type_info_node *)const @ stub -arch=win64 ?name@type_info@@QEBAPEBDPEAU__type_info_node@@@Z # public: char const * __ptr64 __cdecl type_info::name(struct __type_info_node * __ptr64)const __ptr64 @ stub ?native_handle@critical_section@Concurrency@@QAEAAV12@XZ @ thiscall -arch=win32 ?raw_name@type_info@@QBEPBDXZ(ptr) msvcrt.?raw_name@type_info@@QBEPBDXZ @@ -334,8 +334,8 @@ @ cdecl -arch=i386 _CIsqrt() msvcrt._CIsqrt @ cdecl -arch=i386 _CItan() msvcrt._CItan @ cdecl -arch=i386 _CItanh() msvcrt._CItanh -@ stub _CRT_RTC_INIT -@ stub _CRT_RTC_INITW +@ cdecl _CRT_RTC_INIT(ptr ptr long long long) msvcr90._CRT_RTC_INIT +@ cdecl _CRT_RTC_INITW(ptr ptr long long long) msvcr90._CRT_RTC_INITW @ stub _CreateFrameInfo @ cdecl _CxxThrowException(long long) msvcrt._CxxThrowException @ cdecl -i386 -norelay _EH_prolog() msvcrt._EH_prolog diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 58bdb0c..9df4d9c 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -107,7 +107,7 @@ @ cdecl -arch=i386 _CIsqrt() msvcrt._CIsqrt @ cdecl -arch=i386 _CItan() msvcrt._CItan @ cdecl -arch=i386 _CItanh() msvcrt._CItanh -@ stub _CRT_RTC_INIT +@ cdecl _CRT_RTC_INIT(ptr ptr long long long) msvcr90._CRT_RTC_INIT @ cdecl _CxxThrowException(long long) msvcrt._CxxThrowException @ cdecl -i386 -norelay _EH_prolog() msvcrt._EH_prolog @ cdecl _Getdays() msvcrt._Getdays diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index 0d2744b..7949a4b 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -101,7 +101,7 @@ @ cdecl -arch=i386 _CIsqrt() msvcrt._CIsqrt @ cdecl -arch=i386 _CItan() msvcrt._CItan @ cdecl -arch=i386 _CItanh() msvcrt._CItanh -@ stub _CRT_RTC_INIT +@ cdecl _CRT_RTC_INIT(ptr ptr long long long) msvcr90._CRT_RTC_INIT @ cdecl _CxxThrowException(long long) msvcrt._CxxThrowException @ cdecl -i386 _EH_prolog() msvcrt._EH_prolog @ cdecl _Getdays() msvcrt._Getdays diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 6b898a5..8dc251b 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -109,7 +109,7 @@ @ cdecl -arch=win64 ?_wsopen@@YAHPEB_WHHH@Z(wstr long long long) msvcrt._wsopen @ thiscall -arch=win32 ?before@type_info@@QBEHABV1@@Z(ptr ptr) msvcrt.?before@type_info@@QBEHABV1@@Z @ cdecl -arch=win64 ?before@type_info@@QEBAHAEBV1@@Z(ptr ptr) msvcrt.?before@type_info@@QEBAHAEBV1@@Z -@ stub -arch=win32 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z # public: char const * __thiscall type_info::name(struct __type_info_node *)const +@ stub -arch=win32 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z # public: char const * __thiscall type_info::name(struct __type_info_node *)const @ stub -arch=win64 ?name@type_info@@QEBAPEBDPEAU__type_info_node@@@Z # public: char const * __ptr64 __cdecl type_info::name(struct __type_info_node * __ptr64)const __ptr64 @ thiscall -arch=win32 ?raw_name@type_info@@QBEPBDXZ(ptr) msvcrt.?raw_name@type_info@@QBEPBDXZ @ cdecl -arch=win64 ?raw_name@type_info@@QEBAPEBDXZ(ptr) msvcrt.?raw_name@type_info@@QEBAPEBDXZ @@ -145,8 +145,8 @@ @ cdecl -arch=i386 _CIsqrt() msvcrt._CIsqrt @ cdecl -arch=i386 _CItan() msvcrt._CItan @ cdecl -arch=i386 _CItanh() msvcrt._CItanh -@ stub _CRT_RTC_INIT -@ stub _CRT_RTC_INITW +@ cdecl _CRT_RTC_INIT(ptr ptr long long long) msvcr90._CRT_RTC_INIT +@ cdecl _CRT_RTC_INITW(ptr ptr long long long) msvcr90._CRT_RTC_INITW @ stub _CreateFrameInfo @ cdecl _CxxThrowException(long long) msvcrt._CxxThrowException @ cdecl -i386 -norelay _EH_prolog() msvcrt._EH_prolog diff --git a/dlls/msvcr90/msvcr90.c b/dlls/msvcr90/msvcr90.c index 32a874b..f2adb04 100644 --- a/dlls/msvcr90/msvcr90.c +++ b/dlls/msvcr90/msvcr90.c @@ -338,3 +338,21 @@ const char * __thiscall MSVCRT_type_info_name_internal_method(type_info * _this, TRACE("(%p) returning %s\n", _this, _this->name); return _this->name; } + +/********************************************************************* + * _CRT_RTC_INIT (MSVCR90.@) + */ +void* CDECL _CRT_RTC_INIT(void *unk1, void *unk2, int unk3, int unk4, int unk5) +{ + TRACE("%p %p %x %x %x\n", unk1, unk2, unk3, unk4, unk5); + return NULL; +} + +/********************************************************************* + * _CRT_RTC_INITW (MSVCR90.@) + */ +void* CDECL _CRT_RTC_INITW(void *unk1, void *unk2, int unk3, int unk4, int unk5) +{ + TRACE("%p %p %x %x %x\n", unk1, unk2, unk3, unk4, unk5); + return NULL; +} diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 43582cd..94810e5 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -109,7 +109,7 @@ @ cdecl -arch=win64 ?_wsopen@@YAHPEB_WHHH@Z(wstr long long long) msvcrt._wsopen @ thiscall -arch=win32 ?before@type_info@@QBEHABV1@@Z(ptr ptr) msvcrt.?before@type_info@@QBEHABV1@@Z @ cdecl -arch=win64 ?before@type_info@@QEBAHAEBV1@@Z(ptr ptr) msvcrt.?before@type_info@@QEBAHAEBV1@@Z -@ stub -arch=win32 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z # public: char const * __thiscall type_info::name(struct __type_info_node *)const +@ stub -arch=win32 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z # public: char const * __thiscall type_info::name(struct __type_info_node *)const @ stub -arch=win64 ?name@type_info@@QEBAPEBDPEAU__type_info_node@@@Z # public: char const * __ptr64 __cdecl type_info::name(struct __type_info_node * __ptr64)const __ptr64 @ thiscall -arch=win32 ?raw_name@type_info@@QBEPBDXZ(ptr) msvcrt.?raw_name@type_info@@QBEPBDXZ @ cdecl -arch=win64 ?raw_name@type_info@@QEBAPEBDXZ(ptr) msvcrt.?raw_name@type_info@@QEBAPEBDXZ @@ -142,8 +142,8 @@ @ cdecl -arch=i386 _CIsqrt() msvcrt._CIsqrt @ cdecl -arch=i386 _CItan() msvcrt._CItan @ cdecl -arch=i386 _CItanh() msvcrt._CItanh -@ stub _CRT_RTC_INIT -@ stub _CRT_RTC_INITW +@ cdecl _CRT_RTC_INIT(ptr ptr long long long) +@ cdecl _CRT_RTC_INITW(ptr ptr long long long) @ stub _CreateFrameInfo @ cdecl _CxxThrowException(long long) msvcrt._CxxThrowException @ cdecl -i386 -norelay _EH_prolog() msvcrt._EH_prolog
1
0
0
0
Piotr Caban : msvcrt: Added _snwscanf implementation.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: d09ab74d9bc6d6ad8221a22b315b53705cbccad7 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=d09ab74d9bc6d6ad8221a22b3…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Apr 5 17:07:17 2011 +0200 msvcrt: Added _snwscanf implementation. --- dlls/msvcr100/msvcr100.spec | 8 ++-- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 8 ++-- dlls/msvcr90/msvcr90.spec | 8 ++-- dlls/msvcrt/msvcrt.spec | 8 ++-- dlls/msvcrt/scanf.c | 69 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 87 insertions(+), 18 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 569192c..c1f6e47 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1101,10 +1101,10 @@ @ stub _snwprintf_l @ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s @ stub _snwprintf_s_l -@ stub _snwscanf -@ stub _snwscanf_l -@ stub _snwscanf_s -@ stub _snwscanf_s_l +@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf +@ varargs _snwscanf_l(wstr long wstr ptr) msvcrt._snwscanf_l +@ varargs _snwscanf_s(wstr long wstr) msvcrt._snwscanf_s +@ varargs _snwscanf_s_l(wstr long wstr ptr) msvcrt._snwscanf_s_l @ varargs _sopen(str long long) msvcrt._sopen @ cdecl _sopen_s(ptr str long long long) msvcrt._sopen_s @ varargs _spawnl(long str str) msvcrt._spawnl diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 815262d..58bdb0c 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -528,7 +528,7 @@ @ varargs _snprintf(ptr long str) msvcrt._snprintf @ varargs _snscanf(str long str) msvcrt._snscanf @ varargs _snwprintf(ptr long wstr) msvcrt._snwprintf -@ stub _snwscanf +@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf @ varargs _sopen(str long long) msvcrt._sopen @ varargs _spawnl(long str str) msvcrt._spawnl @ varargs _spawnle(long str str) msvcrt._spawnle diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index de8fffe..0d2744b 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -524,7 +524,7 @@ @ varargs _snprintf(str long str) msvcrt._snprintf @ varargs _snscanf(str long str) msvcrt._snscanf @ varargs _snwprintf(wstr long wstr) msvcrt._snwprintf -@ stub _snwscanf +@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf @ varargs _sopen(str long long) msvcrt._sopen @ varargs _spawnl(long str str) msvcrt._spawnl @ varargs _spawnle(long str str) msvcrt._spawnle diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 813f20a..6b898a5 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -955,10 +955,10 @@ @ stub _snwprintf_l @ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s @ stub _snwprintf_s_l -@ stub _snwscanf -@ stub _snwscanf_l -@ stub _snwscanf_s -@ stub _snwscanf_s_l +@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf +@ varargs _snwscanf_l(wstr long wstr ptr) msvcrt._snwscanf_l +@ varargs _snwscanf_s(wstr long wstr) msvcrt._snwscanf_s +@ varargs _snwscanf_s_l(wstr long wstr ptr) msvcrt._snwscanf_s_l @ varargs _sopen(str long long) msvcrt._sopen @ cdecl _sopen_s(ptr str long long long) msvcrt._sopen_s @ varargs _spawnl(long str str) msvcrt._spawnl diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index b27bbbb..43582cd 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -941,10 +941,10 @@ @ stub _snwprintf_l @ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s @ stub _snwprintf_s_l -@ stub _snwscanf -@ stub _snwscanf_l -@ stub _snwscanf_s -@ stub _snwscanf_s_l +@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf +@ varargs _snwscanf_l(wstr long wstr ptr) msvcrt._snwscanf_l +@ varargs _snwscanf_s(wstr long wstr) msvcrt._snwscanf_s +@ varargs _snwscanf_s_l(wstr long wstr ptr) msvcrt._snwscanf_s_l @ varargs _sopen(str long long) msvcrt._sopen @ cdecl _sopen_s(ptr str long long long) msvcrt._sopen_s @ varargs _spawnl(long str str) msvcrt._spawnl diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 43bcec0..ef88e71 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -884,10 +884,10 @@ # stub _snwprintf_l @ varargs _snwprintf_s(ptr long long wstr) MSVCRT__snwprintf_s # stub _snwprintf_s_l -# stub _snwscanf -# stub _snwscanf_l -# stub _snwscanf_s -# stub _snwscanf_s_l +@ varargs _snwscanf(wstr long wstr) MSVCRT__snwscanf +@ varargs _snwscanf_l(wstr long wstr ptr) MSVCRT__snwscanf_l +@ varargs _snwscanf_s(wstr long wstr) MSVCRT__snwscanf_s +@ varargs _snwscanf_s_l(wstr long wstr ptr) MSVCRT__snwscanf_s_l @ varargs _sopen(str long long) MSVCRT__sopen @ cdecl _sopen_s(ptr str long long long) MSVCRT__sopen_s @ varargs _spawnl(long str str) diff --git a/dlls/msvcrt/scanf.c b/dlls/msvcrt/scanf.c index d02892c..b998400 100644 --- a/dlls/msvcrt/scanf.c +++ b/dlls/msvcrt/scanf.c @@ -99,6 +99,15 @@ static int wchar2digit(MSVCRT_wchar_t c, int base) { /* vsnscanf_s_l */ #define SECURE #include "scanf.h" + +/* vsnwscanf_l */ +#define WIDE_SCANF 1 +#undef SECURE +#include "scanf.h" + +/* vsnwscanf_s_l */ +#define SECURE 1 +#include "scanf.h" #undef STRING_LEN /* vswscanf_l */ @@ -650,3 +659,63 @@ int CDECL MSVCRT__snscanf_s_l(char *input, MSVCRT_size_t length, __ms_va_end(valist); return res; } + +/********************************************************************* + * _snwscanf (MSVCRT.@) + */ +int CDECL MSVCRT__snwscanf(MSVCRT_wchar_t *input, MSVCRT_size_t length, + const MSVCRT_wchar_t *format, ...) +{ + __ms_va_list valist; + int res; + + __ms_va_start(valist, format); + res = MSVCRT_vsnwscanf_l(input, length, format, NULL, valist); + __ms_va_end(valist); + return res; +} + +/********************************************************************* + * _snwscanf_l (MSVCRT.@) + */ +int CDECL MSVCRT__snwscanf_l(MSVCRT_wchar_t *input, MSVCRT_size_t length, + const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, ...) +{ + __ms_va_list valist; + int res; + + __ms_va_start(valist, locale); + res = MSVCRT_vsnwscanf_l(input, length, format, locale, valist); + __ms_va_end(valist); + return res; +} + +/********************************************************************* + * _snwscanf_s (MSVCRT.@) + */ +int CDECL MSVCRT__snwscanf_s(MSVCRT_wchar_t *input, MSVCRT_size_t length, + const MSVCRT_wchar_t *format, ...) +{ + __ms_va_list valist; + int res; + + __ms_va_start(valist, format); + res = MSVCRT_vsnwscanf_s_l(input, length, format, NULL, valist); + __ms_va_end(valist); + return res; +} + +/********************************************************************* + * _snscanf_s_l (MSVCRT.@) + */ +int CDECL MSVCRT__snwscanf_s_l(MSVCRT_wchar_t *input, MSVCRT_size_t length, + const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, ...) +{ + __ms_va_list valist; + int res; + + __ms_va_start(valist, locale); + res = MSVCRT_vsnwscanf_s_l(input, length, format, locale, valist); + __ms_va_end(valist); + return res; +}
1
0
0
0
Piotr Caban : msvcrt: Added _snscanf implementation.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 405e6eb309ba7dbefe88725a96fe280c92af040e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=405e6eb309ba7dbefe88725a9…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Apr 5 17:06:58 2011 +0200 msvcrt: Added _snscanf implementation. --- dlls/msvcr100/msvcr100.spec | 8 ++-- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 8 ++-- dlls/msvcr90/msvcr90.spec | 8 ++-- dlls/msvcrt/msvcrt.spec | 8 ++-- dlls/msvcrt/scanf.c | 68 +++++++++++++++++++++++++++++++++++++++++++ dlls/msvcrt/scanf.h | 18 +++++++++++ 8 files changed, 104 insertions(+), 18 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 45f4220..569192c 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1093,10 +1093,10 @@ @ stub _snprintf_l @ varargs _snprintf_s(ptr long long str) msvcrt._snprintf_s @ stub _snprintf_s_l -@ stub _snscanf -@ stub _snscanf_l -@ stub _snscanf_s -@ stub _snscanf_s_l +@ varargs _snscanf(str long str) msvcrt._snscanf +@ varargs _snscanf_l(str long str ptr) msvcrt._snscanf_l +@ varargs _snscanf_s(str long str) msvcrt._snscanf_s +@ varargs _snscanf_s_l(str long str ptr) msvcrt._snscanf_s_l @ varargs _snwprintf(ptr long wstr) msvcrt._snwprintf @ stub _snwprintf_l @ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index b1f0da6..815262d 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -526,7 +526,7 @@ @ stub _setsystime @ cdecl _sleep(long) msvcrt._sleep @ varargs _snprintf(ptr long str) msvcrt._snprintf -@ stub _snscanf +@ varargs _snscanf(str long str) msvcrt._snscanf @ varargs _snwprintf(ptr long wstr) msvcrt._snwprintf @ stub _snwscanf @ varargs _sopen(str long long) msvcrt._sopen diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index 9a6018c..de8fffe 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -522,7 +522,7 @@ @ cdecl _setsystime(ptr long) msvcrt._setsystime @ cdecl _sleep(long) msvcrt._sleep @ varargs _snprintf(str long str) msvcrt._snprintf -@ stub _snscanf +@ varargs _snscanf(str long str) msvcrt._snscanf @ varargs _snwprintf(wstr long wstr) msvcrt._snwprintf @ stub _snwscanf @ varargs _sopen(str long long) msvcrt._sopen diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 13ff03d..813f20a 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -947,10 +947,10 @@ @ stub _snprintf_l @ varargs _snprintf_s(ptr long long str) msvcrt._snprintf_s @ stub _snprintf_s_l -@ stub _snscanf -@ stub _snscanf_l -@ stub _snscanf_s -@ stub _snscanf_s_l +@ varargs _snscanf(str long str) msvcrt._snscanf +@ varargs _snscanf_l(str long str ptr) msvcrt._snscanf_l +@ varargs _snscanf_s(str long str) msvcrt._snscanf_s +@ varargs _snscanf_s_l(str long str ptr) msvcrt._snscanf_s_l @ varargs _snwprintf(ptr long wstr) msvcrt._snwprintf @ stub _snwprintf_l @ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 54c583e..b27bbbb 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -933,10 +933,10 @@ @ stub _snprintf_l @ varargs _snprintf_s(ptr long long str) msvcrt._snprintf_s @ stub _snprintf_s_l -@ stub _snscanf -@ stub _snscanf_l -@ stub _snscanf_s -@ stub _snscanf_s_l +@ varargs _snscanf(str long str) msvcrt._snscanf +@ varargs _snscanf_l(str long str ptr) msvcrt._snscanf_l +@ varargs _snscanf_s(str long str) msvcrt._snscanf_s +@ varargs _snscanf_s_l(str long str ptr) msvcrt._snscanf_s_l @ varargs _snwprintf(ptr long wstr) msvcrt._snwprintf @ stub _snwprintf_l @ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 9b1937b..43bcec0 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -876,10 +876,10 @@ # stub _snprintf_l @ varargs _snprintf_s(ptr long long str) MSVCRT__snprintf_s # stub _snprintf_s_l -# stub _snscanf -# stub _snscanf_l -# stub _snscanf_s -# stub _snscanf_s_l +@ varargs _snscanf(str long str) MSVCRT__snscanf +@ varargs _snscanf_l(str long str ptr) MSVCRT__snscanf_l +@ varargs _snscanf_s(str long str) MSVCRT__snscanf_s +@ varargs _snscanf_s_l(str long str ptr) MSVCRT__snscanf_s_l @ varargs _snwprintf(ptr long wstr) MSVCRT__snwprintf # stub _snwprintf_l @ varargs _snwprintf_s(ptr long long wstr) MSVCRT__snwprintf_s diff --git a/dlls/msvcrt/scanf.c b/dlls/msvcrt/scanf.c index c795e15..d02892c 100644 --- a/dlls/msvcrt/scanf.c +++ b/dlls/msvcrt/scanf.c @@ -91,6 +91,16 @@ static int wchar2digit(MSVCRT_wchar_t c, int base) { #define SECURE 1 #include "scanf.h" +/* vsnscanf_l */ +#undef SECURE +#define STRING_LEN 1 +#include "scanf.h" + +/* vsnscanf_s_l */ +#define SECURE +#include "scanf.h" +#undef STRING_LEN + /* vswscanf_l */ #define WIDE_SCANF 1 #undef CONSOLE @@ -582,3 +592,61 @@ int CDECL _cwscanf_s_l(const char *format, MSVCRT__locale_t locale, ...) __ms_va_end(valist); return res; } + +/********************************************************************* + * _snscanf (MSVCRT.@) + */ +int CDECL MSVCRT__snscanf(char *input, MSVCRT_size_t length, const char *format, ...) +{ + __ms_va_list valist; + int res; + + __ms_va_start(valist, format); + res = MSVCRT_vsnscanf_l(input, length, format, NULL, valist); + __ms_va_end(valist); + return res; +} + +/********************************************************************* + * _snscanf_l (MSVCRT.@) + */ +int CDECL MSVCRT__snscanf_l(char *input, MSVCRT_size_t length, + const char *format, MSVCRT__locale_t locale, ...) +{ + __ms_va_list valist; + int res; + + __ms_va_start(valist, locale); + res = MSVCRT_vsnscanf_l(input, length, format, locale, valist); + __ms_va_end(valist); + return res; +} + +/********************************************************************* + * _snscanf_s (MSVCRT.@) + */ +int CDECL MSVCRT__snscanf_s(char *input, MSVCRT_size_t length, const char *format, ...) +{ + __ms_va_list valist; + int res; + + __ms_va_start(valist, format); + res = MSVCRT_vsnscanf_s_l(input, length, format, NULL, valist); + __ms_va_end(valist); + return res; +} + +/********************************************************************* + * _snscanf_s_l (MSVCRT.@) + */ +int CDECL MSVCRT__snscanf_s_l(char *input, MSVCRT_size_t length, + const char *format, MSVCRT__locale_t locale, ...) +{ + __ms_va_list valist; + int res; + + __ms_va_start(valist, locale); + res = MSVCRT_vsnscanf_s_l(input, length, format, locale, valist); + __ms_va_end(valist); + return res; +} diff --git a/dlls/msvcrt/scanf.h b/dlls/msvcrt/scanf.h index b78d57c..8b796b1 100644 --- a/dlls/msvcrt/scanf.h +++ b/dlls/msvcrt/scanf.h @@ -65,6 +65,23 @@ #ifdef STRING #undef _EOF_ #define _EOF_ 0 +#ifdef STRING_LEN +#define _GETC_(file) (consumed==length ? '\0' : (consumed++, *file++)) +#define _UNGETC_(nch, file) do { file--; consumed--; } while(0) +#ifdef WIDE_SCANF +#ifdef SECURE +#define _FUNCTION_ static int MSVCRT_vsnwscanf_s_l(const MSVCRT_wchar_t *file, MSVCRT_size_t length, const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, __ms_va_list ap) +#else /* SECURE */ +#define _FUNCTION_ static int MSVCRT_vsnwscanf_l(const MSVCRT_wchar_t *file, MSVCRT_size_t length, const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, __ms_va_list ap) +#endif /* SECURE */ +#else /* WIDE_SCANF */ +#ifdef SECURE +#define _FUNCTION_ static int MSVCRT_vsnscanf_s_l(const char *file, MSVCRT_size_t length, const char *format, MSVCRT__locale_t locale, __ms_va_list ap) +#else /* SECURE */ +#define _FUNCTION_ static int MSVCRT_vsnscanf_l(const char *file, MSVCRT_size_t length, const char *format, MSVCRT__locale_t locale, __ms_va_list ap) +#endif /* SECURE */ +#endif /* WIDE_SCANF */ +#else /* STRING_LEN */ #define _GETC_(file) (consumed++, *file++) #define _UNGETC_(nch, file) do { file--; consumed--; } while(0) #ifdef WIDE_SCANF @@ -80,6 +97,7 @@ #define _FUNCTION_ static int MSVCRT_vsscanf_l(const char *file, const char *format, MSVCRT__locale_t locale, __ms_va_list ap) #endif /* SECURE */ #endif /* WIDE_SCANF */ +#endif /* STRING_LEN */ #else /* STRING */ #ifdef WIDE_SCANF #define _GETC_(file) (consumed++, MSVCRT_fgetwc(file))
1
0
0
0
Piotr Caban : msvcrt: Added _wassert implementation.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 220b6ab37f9d42f9e2d09fdad8c990036f8a7d5e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=220b6ab37f9d42f9e2d09fdad…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Apr 5 17:06:45 2011 +0200 msvcrt: Added _wassert implementation. --- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/exit.c | 69 +++++++++++++++++++++++++++++++----------- dlls/msvcrt/msvcrt.h | 3 ++ dlls/msvcrt/msvcrt.spec | 2 +- 6 files changed, 58 insertions(+), 22 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 1812407..45f4220 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1277,7 +1277,7 @@ @ cdecl _waccess_s(wstr long) msvcrt._waccess_s @ cdecl _wasctime(ptr) msvcrt._wasctime @ stub _wasctime_s -@ stub _wassert +@ cdecl _wassert(wstr wstr long) msvcrt._wassert @ cdecl _wchdir(wstr) msvcrt._wchdir @ cdecl _wchmod(wstr long) msvcrt._wchmod @ extern _wcmdln msvcrt._wcmdln diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 8b58e7d..13ff03d 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1130,7 +1130,7 @@ @ cdecl _waccess_s(wstr long) msvcrt._waccess_s @ cdecl _wasctime(ptr) msvcrt._wasctime @ stub _wasctime_s -@ stub _wassert +@ cdecl _wassert(wstr wstr long) msvcrt._wassert @ cdecl _wchdir(wstr) msvcrt._wchdir @ cdecl _wchmod(wstr long) msvcrt._wchmod @ extern _wcmdln msvcrt._wcmdln diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index d18651d..54c583e 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1117,7 +1117,7 @@ @ cdecl _waccess_s(wstr long) msvcrt._waccess_s @ cdecl _wasctime(ptr) msvcrt._wasctime @ stub _wasctime_s -@ stub _wassert +@ cdecl _wassert(wstr wstr long) msvcrt._wassert @ cdecl _wchdir(wstr) msvcrt._wchdir @ cdecl _wchmod(wstr long) msvcrt._wchmod @ extern _wcmdln msvcrt._wcmdln diff --git a/dlls/msvcrt/exit.c b/dlls/msvcrt/exit.c index d7f28f1..6c6b55f 100644 --- a/dlls/msvcrt/exit.c +++ b/dlls/msvcrt/exit.c @@ -37,7 +37,7 @@ static MSVCRT_purecall_handler purecall_handler = NULL; static const char szMsgBoxTitle[] = "Wine C++ Runtime Library"; extern int MSVCRT_app_type; -extern char *MSVCRT__pgmptr; +extern MSVCRT_wchar_t *MSVCRT__wpgmptr; static unsigned int MSVCRT_abort_behavior = MSVCRT__WRITE_ABORT_MSG | MSVCRT__CALL_REPORTFAULT; static int MSVCRT_error_mode = MSVCRT__OUT_TO_DEFAULT; @@ -103,32 +103,45 @@ void CDECL MSVCRT__exit(int exitcode) } /* Print out an error message with an option to debug */ -static void DoMessageBox(LPCSTR lead, LPCSTR message) +static void DoMessageBoxW(const MSVCRT_wchar_t *lead, const MSVCRT_wchar_t *message) { - MSGBOXPARAMSA msgbox; - char text[2048]; + static const MSVCRT_wchar_t message_format[] = {'%','s','\n','\n','P','r','o','g','r','a','m',':',' ','%','s','\n', + '%','s','\n','\n','P','r','e','s','s',' ','O','K',' ','t','o',' ','e','x','i','t',' ','t','h','e',' ', + 'p','r','o','g','r','a','m',',',' ','o','r',' ','C','a','n','c','e','l',' ','t','o',' ','s','t','a','r','t',' ', + 't','h','e',' ','W','i','n','e',' ','d','e','b','b','u','g','e','r','.','\n',0}; + + MSGBOXPARAMSW msgbox; + MSVCRT_wchar_t text[2048]; INT ret; - snprintf(text,sizeof(text),"%s\n\nProgram: %s\n%s\n\n" - "Press OK to exit the program, or Cancel to start the Wine debugger.\n ", - lead, MSVCRT__pgmptr, message); + MSVCRT__snwprintf(text,sizeof(text),message_format, lead, MSVCRT__wpgmptr, message); msgbox.cbSize = sizeof(msgbox); msgbox.hwndOwner = GetActiveWindow(); msgbox.hInstance = 0; - msgbox.lpszText = text; - msgbox.lpszCaption = szMsgBoxTitle; + msgbox.lpszText = (LPCWSTR)text; + msgbox.lpszCaption = (LPCWSTR)szMsgBoxTitle; msgbox.dwStyle = MB_OKCANCEL|MB_ICONERROR; msgbox.lpszIcon = NULL; msgbox.dwContextHelpId = 0; msgbox.lpfnMsgBoxCallback = NULL; msgbox.dwLanguageId = LANG_NEUTRAL; - ret = MessageBoxIndirectA(&msgbox); + ret = MessageBoxIndirectW(&msgbox); if (ret == IDCANCEL) DebugBreak(); } +static void DoMessageBox(const char *lead, const char *message) +{ + MSVCRT_wchar_t leadW[1024], messageW[1024]; + + MSVCRT_mbstowcs(leadW, lead, 1024); + MSVCRT_mbstowcs(messageW, message, 1024); + + return DoMessageBoxW(leadW, messageW); +} + /********************************************************************* * _amsg_exit (MSVCRT.@) */ @@ -188,26 +201,46 @@ unsigned int CDECL MSVCRT__set_abort_behavior(unsigned int flags, unsigned int m } /********************************************************************* - * _assert (MSVCRT.@) + * _wassert (MSVCRT.@) */ -void CDECL MSVCRT__assert(const char* str, const char* file, unsigned int line) +void CDECL MSVCRT__wassert(const MSVCRT_wchar_t* str, const MSVCRT_wchar_t* file, unsigned int line) { - TRACE("(%s,%s,%d)\n",str,file,line); + static const MSVCRT_wchar_t assertion_failed[] = {'A','s','s','e','r','t','i','o','n',' ','f','a','i','l','e','d','!',0}; + static const MSVCRT_wchar_t format_msgbox[] = {'F','i','l','e',':',' ','%','s','\n','L','i','n','e',':',' ','%','d', + '\n','\n','E','x','p','r','e','s','s','i','o','n',':',' ','\"','%','s','\"',0}; + static const MSVCRT_wchar_t format_console[] = {'A','s','s','e','r','t','i','o','n',' ','f','a','i','l','e','d',':',' ', + '%','s',',',' ','f','i','l','e',' ','%','s',',',' ','l','i','n','e',' ','%','d','\n','\n',0}; + + TRACE("(%s,%s,%d)\n", debugstr_w(str), debugstr_w(file), line); + if ((MSVCRT_error_mode == MSVCRT__OUT_TO_MSGBOX) || ((MSVCRT_error_mode == MSVCRT__OUT_TO_DEFAULT) && (MSVCRT_app_type == 2))) { - char text[2048]; - snprintf(text, sizeof(text), "File: %s\nLine: %d\n\nExpression: \"%s\"", file, line, str); - DoMessageBox("Assertion failed!", text); + MSVCRT_wchar_t text[2048]; + MSVCRT__snwprintf(text, sizeof(text), format_msgbox, file, line, str); + DoMessageBoxW(assertion_failed, text); } else - _cprintf("Assertion failed: %s, file %s, line %d\n\n",str, file, line); + _cwprintf(format_console, str, file, line); + MSVCRT_raise(MSVCRT_SIGABRT); - /* in case raise() returns */ MSVCRT__exit(3); } /********************************************************************* + * _assert (MSVCRT.@) + */ +void CDECL MSVCRT__assert(const char* str, const char* file, unsigned int line) +{ + MSVCRT_wchar_t strW[1024], fileW[1024]; + + MSVCRT_mbstowcs(strW, str, 1024); + MSVCRT_mbstowcs(fileW, file, 1024); + + MSVCRT__wassert(strW, fileW, line); +} + +/********************************************************************* * _c_exit (MSVCRT.@) */ void CDECL MSVCRT__c_exit(void) diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 69d3668..e401929 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -804,6 +804,7 @@ MSVCRT_FILE* __cdecl MSVCRT__wfdopen(int, const MSVCRT_wchar_t *); int __cdecl MSVCRT_vsnprintf(char *str, MSVCRT_size_t len, const char *format, __ms_va_list valist); int __cdecl MSVCRT_vsnwprintf(MSVCRT_wchar_t *str, MSVCRT_size_t len, const MSVCRT_wchar_t *format, __ms_va_list valist ); +int __cdecl MSVCRT__snwprintf(MSVCRT_wchar_t*, unsigned int, const MSVCRT_wchar_t*, ...); int __cdecl MSVCRT_sprintf(char*,const char*,...); int __cdecl MSVCRT__scprintf(const char*,...); int __cdecl MSVCRT_raise(int sig); @@ -871,6 +872,7 @@ int __cdecl MSVCRT__write(int,const void*,unsigned int); int __cdecl _getch(void); int __cdecl _ismbblead(unsigned int); int __cdecl _ismbstrail(const unsigned char* start, const unsigned char* str); +MSVCRT_size_t __cdecl MSVCRT_mbstowcs(MSVCRT_wchar_t*,const char*,MSVCRT_size_t); MSVCRT_intptr_t __cdecl MSVCRT__spawnve(int,const char*,const char* const *,const char* const *); MSVCRT_intptr_t __cdecl MSVRT__spawnvpe(int,const char*,const char* const *,const char* const *); MSVCRT_intptr_t __cdecl _wspawnve(int,const MSVCRT_wchar_t*,const MSVCRT_wchar_t* const *,const MSVCRT_wchar_t* const *); @@ -883,6 +885,7 @@ char* __cdecl _strset(char*,int); int __cdecl _ungetch(int); int __cdecl _cputs(const char*); int __cdecl _cprintf(const char*,...); +int __cdecl _cwprintf(const MSVCRT_wchar_t*,...); char*** __cdecl __p__environ(void); int* __cdecl __p___mb_cur_max(void); unsigned int* __cdecl __p__fmode(void); diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 103142e..9b1937b 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1052,7 +1052,7 @@ @ cdecl _waccess_s(wstr long) @ cdecl _wasctime(ptr) MSVCRT__wasctime # stub _wasctime_s -# stub _wassert +@ cdecl _wassert(wstr wstr long) MSVCRT__wassert @ cdecl _wchdir(wstr) @ cdecl _wchmod(wstr long) @ extern _wcmdln MSVCRT__wcmdln
1
0
0
0
Huw Davies : gdi32/tests: Start of a framework for writing dib driver tests .
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 0aebe831b441046e306f616c864023880221ecc2 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0aebe831b441046e306f616c8…
Author: Huw Davies <huw(a)codeweavers.com> Date: Tue Apr 5 14:23:49 2011 +0100 gdi32/tests: Start of a framework for writing dib driver tests. --- dlls/gdi32/tests/Makefile.in | 3 +- dlls/gdi32/tests/dib.c | 152 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 1 deletions(-) diff --git a/dlls/gdi32/tests/Makefile.in b/dlls/gdi32/tests/Makefile.in index 90f937e..c77f9e2 100644 --- a/dlls/gdi32/tests/Makefile.in +++ b/dlls/gdi32/tests/Makefile.in @@ -1,11 +1,12 @@ TESTDLL = gdi32.dll -IMPORTS = user32 gdi32 +IMPORTS = user32 gdi32 advapi32 C_SRCS = \ bitmap.c \ brush.c \ clipping.c \ dc.c \ + dib.c \ font.c \ gdiobj.c \ generated.c \ diff --git a/dlls/gdi32/tests/dib.c b/dlls/gdi32/tests/dib.c new file mode 100644 index 0000000..7dd1ba3 --- /dev/null +++ b/dlls/gdi32/tests/dib.c @@ -0,0 +1,152 @@ +/* + * DIB driver tests. + * + * Copyright 2011 Huw Davies + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> +#include <stdio.h> + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winuser.h" +#include "wincrypt.h" + +#include "wine/test.h" + +static HCRYPTPROV crypt_prov; + +static const char *sha1_graphics_a8r8g8b8[] = +{ + "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf", + NULL +}; + +static inline DWORD get_stride(BITMAPINFO *bmi) +{ + return ((bmi->bmiHeader.biBitCount * bmi->bmiHeader.biWidth + 31) >> 3) & ~3; +} + +static inline DWORD get_dib_size(BITMAPINFO *bmi) +{ + return get_stride(bmi) * abs(bmi->bmiHeader.biHeight); +} + +static char *hash_dib(BITMAPINFO *bmi, void *bits) +{ + DWORD dib_size = get_dib_size(bmi); + HCRYPTHASH hash; + char *buf; + BYTE hash_buf[20]; + DWORD hash_size = sizeof(hash_buf); + int i; + static const char *hex = "0123456789abcdef"; + + if(!crypt_prov) return NULL; + + if(!CryptCreateHash(crypt_prov, CALG_SHA1, 0, 0, &hash)) return NULL; + + CryptHashData(hash, bits, dib_size, 0); + + CryptGetHashParam(hash, HP_HASHVAL, NULL, &hash_size, 0); + if(hash_size != sizeof(hash_buf)) return NULL; + + CryptGetHashParam(hash, HP_HASHVAL, hash_buf, &hash_size, 0); + CryptDestroyHash(hash); + + buf = HeapAlloc(GetProcessHeap(), 0, hash_size * 2 + 1); + + for(i = 0; i < hash_size; i++) + { + buf[i * 2] = hex[hash_buf[i] >> 4]; + buf[i * 2 + 1] = hex[hash_buf[i] & 0xf]; + } + buf[i * 2] = '\0'; + + return buf; +} + +static void compare_hash(BITMAPINFO *bmi, BYTE *bits, const char ***sha1, const char *info) +{ + char *hash = hash_dib(bmi, bits); + + if(!hash) + { + skip("SHA1 hashing unavailable on this platform\n"); + return; + } + + if(**sha1) + { + ok(!strcmp(hash, **sha1), "%d: %s: expected hash %s got %s\n", + bmi->bmiHeader.biBitCount, info, **sha1, hash); + (*sha1)++; + } + else trace("\"%s\",\n", hash); + + HeapFree(GetProcessHeap(), 0, hash); +} + +static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sha1) +{ + DWORD dib_size = get_dib_size(bmi); + + memset(bits, 0xcc, dib_size); + compare_hash(bmi, bits, sha1, "empty"); +} + +static void test_simple_graphics(void) +{ + char bmibuf[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)]; + BITMAPINFO *bmi = (BITMAPINFO *)bmibuf; + HDC mem_dc; + BYTE *bits; + HBITMAP dib, orig_bm; + const char **sha1; + + /* a8r8g8b8 */ + trace("8888\n"); + memset(bmi, 0, sizeof(bmibuf)); + bmi->bmiHeader.biSize = sizeof(bmi->bmiHeader); + bmi->bmiHeader.biHeight = 512; + bmi->bmiHeader.biWidth = 512; + bmi->bmiHeader.biBitCount = 32; + bmi->bmiHeader.biPlanes = 1; + bmi->bmiHeader.biCompression = BI_RGB; + + dib = CreateDIBSection(0, bmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0); + ok(dib != NULL, "ret NULL\n"); + mem_dc = CreateCompatibleDC(NULL); + orig_bm = SelectObject(mem_dc, dib); + + sha1 = sha1_graphics_a8r8g8b8; + draw_graphics(mem_dc, bmi, bits, &sha1); + + SelectObject(mem_dc, orig_bm); + DeleteObject(dib); + DeleteDC(mem_dc); +} + +START_TEST(dib) +{ + CryptAcquireContextW(&crypt_prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); + + test_simple_graphics(); + + CryptReleaseContext(crypt_prov, 0); +}
1
0
0
0
Michael Stefaniuc : wininet: Move "inline" right after the storage specifier.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 9bf247d44eda5cb5396610c51057c8e91e24ce82 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=9bf247d44eda5cb5396610c51…
Author: Michael Stefaniuc <mstefani(a)redhat.de> Date: Tue Apr 5 16:18:38 2011 +0200 wininet: Move "inline" right after the storage specifier. --- dlls/wininet/http.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index 5258c2e..e775bc0 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -254,7 +254,7 @@ typedef struct { DWORD chunk_size; } chunked_stream_t; -static void inline destroy_data_stream(data_stream_t *stream) +static inline void destroy_data_stream(data_stream_t *stream) { stream->vtbl->destroy(stream); }
1
0
0
0
Joris Huizer : dxdiagn: Plug memory leak.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 8c6c2261b3cb59fec6913f68ce1960730fd0a315 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=8c6c2261b3cb59fec6913f68c…
Author: Joris Huizer <joris_huizer(a)yahoo.com> Date: Tue Apr 5 16:01:04 2011 +0200 dxdiagn: Plug memory leak. --- dlls/dxdiagn/provider.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/dlls/dxdiagn/provider.c b/dlls/dxdiagn/provider.c index 459f8e9..1731b8f 100644 --- a/dlls/dxdiagn/provider.c +++ b/dlls/dxdiagn/provider.c @@ -433,8 +433,12 @@ static BOOL is_netmeeting_running(void) { if (get_process_name_from_pid(pid_list[i], process_name, sizeof(process_name)/sizeof(WCHAR)) && !lstrcmpW(conf_exe, process_name)) + { + HeapFree(GetProcessHeap(), 0, pid_list); return TRUE; + } } + HeapFree(GetProcessHeap(), 0, pid_list); } return FALSE;
1
0
0
0
André Hentschel : uxtheme/tests: Remove unneeded comment.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: b0696b8b4a9ee4c0eefaf7d8a9f453aaaed9ed44 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b0696b8b4a9ee4c0eefaf7d8a…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Fri Apr 1 18:51:59 2011 +0200 uxtheme/tests: Remove unneeded comment. --- dlls/uxtheme/tests/system.c | 5 ----- 1 files changed, 0 insertions(+), 5 deletions(-) diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c index a63b6c4..0aaadbd 100644 --- a/dlls/uxtheme/tests/system.c +++ b/dlls/uxtheme/tests/system.c @@ -514,11 +514,6 @@ static void test_GetCurrentThemeName(void) "Expected 0xdeadbeef, got 0x%08x\n", GetLastError()); - /* When the number of characters given is too small (not 0, see above), GetCurrentThemeName returns 0x8007007a. - * The only definition I found was in strsafe.h: - * - * #define STRSAFE_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007AL) // 0x7A = 122L = ERROR_INSUFFICIENT_BUFFER - */ SetLastError(0xdeadbeef); hRes = pGetCurrentThemeName(currentTheme, 2, NULL, 0, NULL, 0); if (bThemeActive)
1
0
0
0
← Newer
1
...
78
79
80
81
82
83
84
...
94
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
Results per page:
10
25
50
100
200