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 2014
----- 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
530 discussions
Start a n
N
ew thread
Matteo Bruni : d3dx9: Parse "usage 2" effect resources.
by Alexandre Julliard
18 Mar '14
18 Mar '14
Module: wine Branch: master Commit: babf0dca0395c6647146320f50035f1b4bf0a1b3 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=babf0dca0395c6647146320f5…
Author: Matteo Bruni <mbruni(a)codeweavers.com> Date: Mon Mar 17 20:22:54 2014 +0100 d3dx9: Parse "usage 2" effect resources. --- dlls/d3dx9_36/effect.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c index 73eb5c8..d5258e9 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c @@ -96,6 +96,7 @@ enum STATE_TYPE ST_CONSTANT, ST_PARAMETER, ST_FXLC, + ST_ARRAY_SELECTOR, }; struct d3dx_parameter @@ -4983,6 +4984,32 @@ static HRESULT d3dx9_create_object(struct d3dx9_base_effect *base, struct d3dx_o return D3D_OK; } +static HRESULT d3dx9_parse_array_selector(struct d3dx9_base_effect *base, struct d3dx_parameter *param) +{ + DWORD string_size; + struct d3dx_object *object = &base->objects[param->object_id]; + char *ptr = object->data; + + TRACE("Parsing array entry selection state for parameter %p.\n", param); + + string_size = *(DWORD *)ptr; + param->referenced_param = get_parameter_by_name(base, NULL, ptr + 4); + if (param->referenced_param) + { + TRACE("Mapping to parameter %s.\n", debugstr_a(param->referenced_param->name)); + } + else + { + FIXME("Referenced parameter %s not found.\n", ptr + 4); + return D3DXERR_INVALIDDATA; + } + TRACE("Unknown DWORD: 0x%.8x.\n", *(DWORD *)(ptr + string_size)); + + FIXME("Parse preshader.\n"); + + return D3D_OK; +} + static HRESULT d3dx9_parse_resource(struct d3dx9_base_effect *base, const char *data, const char **ptr) { DWORD technique_index; @@ -5121,6 +5148,13 @@ static HRESULT d3dx9_parse_resource(struct d3dx9_base_effect *base, const char * } break; + case 2: + state->type = ST_ARRAY_SELECTOR; + if (FAILED(hr = d3dx9_copy_data(object, ptr))) + return hr; + hr = d3dx9_parse_array_selector(base, param); + break; + default: FIXME("Unknown usage %x\n", usage); break;
1
0
0
0
Matteo Bruni : d3dx9: Store pointers to referenced parameters for "usage 1 " resources.
by Alexandre Julliard
18 Mar '14
18 Mar '14
Module: wine Branch: master Commit: 0e0b613192bc431232ce9c657bd37674bb097472 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0e0b613192bc431232ce9c657…
Author: Matteo Bruni <mbruni(a)codeweavers.com> Date: Mon Mar 17 20:22:53 2014 +0100 d3dx9: Store pointers to referenced parameters for "usage 1" resources. --- dlls/d3dx9_36/effect.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c index b3a2719..73eb5c8 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c @@ -118,6 +118,8 @@ struct d3dx_parameter struct d3dx_parameter *annotations; struct d3dx_parameter *members; + + struct d3dx_parameter *referenced_param; }; struct d3dx_object @@ -5070,11 +5072,11 @@ static HRESULT d3dx9_parse_resource(struct d3dx9_base_effect *base, const char * TRACE("Using object id %u.\n", param->object_id); object = &base->objects[param->object_id]; + TRACE("Usage %u: class %s, type %s.\n", usage, debug_d3dxparameter_class(param->class), + debug_d3dxparameter_type(param->type)); switch (usage) { case 0: - TRACE("usage 0: class %s type %s.\n", debug_d3dxparameter_class(param->class), - debug_d3dxparameter_type(param->type)); switch (param->type) { case D3DXPT_VERTEXSHADER: @@ -5103,7 +5105,20 @@ static HRESULT d3dx9_parse_resource(struct d3dx9_base_effect *base, const char * case 1: state->type = ST_PARAMETER; - hr = d3dx9_copy_data(&base->objects[param->object_id], ptr); + if (FAILED(hr = d3dx9_copy_data(&base->objects[param->object_id], ptr))) + return hr; + + TRACE("Looking for parameter %s.\n", debugstr_a(object->data)); + param->referenced_param = get_parameter_by_name(base, NULL, object->data); + if (param->referenced_param) + { + TRACE("Mapping to parameter %p.\n", param->referenced_param); + } + else + { + FIXME("Referenced parameter %s not found.\n", (char *)object->data); + return D3DXERR_INVALIDDATA; + } break; default:
1
0
0
0
Matteo Bruni : d3dx9: Create shaders and strings.
by Alexandre Julliard
18 Mar '14
18 Mar '14
Module: wine Branch: master Commit: aef52a1d13336e668042a3daf258882ba3617cc9 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=aef52a1d13336e668042a3daf…
Author: Matteo Bruni <mbruni(a)codeweavers.com> Date: Mon Mar 17 20:22:52 2014 +0100 d3dx9: Create shaders and strings. --- dlls/d3dx9_36/effect.c | 68 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c index 9530687..b3a2719 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c @@ -4939,12 +4939,55 @@ err_out: return hr; } +static HRESULT d3dx9_create_object(struct d3dx9_base_effect *base, struct d3dx_object *object) +{ + struct d3dx_parameter *param = object->param; + struct IDirect3DDevice9 *device = base->effect->device; + HRESULT hr; + + if (*(char **)param->data) + ERR("Parameter data already allocated.\n"); + + switch (param->type) + { + case D3DXPT_STRING: + *(char **)param->data = HeapAlloc(GetProcessHeap(), 0, object->size); + if (!*(char **)param->data) + { + ERR("Out of memory.\n"); + return E_OUTOFMEMORY; + } + memcpy(*(char **)param->data, object->data, object->size); + break; + case D3DXPT_VERTEXSHADER: + if (FAILED(hr = IDirect3DDevice9_CreateVertexShader(device, object->data, + (IDirect3DVertexShader9 **)param->data))) + { + WARN("Failed to create vertex shader.\n"); + return hr; + } + break; + case D3DXPT_PIXELSHADER: + if (FAILED(hr = IDirect3DDevice9_CreatePixelShader(device, object->data, + (IDirect3DPixelShader9 **)param->data))) + { + WARN("Failed to create pixel shader.\n"); + return hr; + } + break; + default: + break; + } + return D3D_OK; +} + static HRESULT d3dx9_parse_resource(struct d3dx9_base_effect *base, const char *data, const char **ptr) { DWORD technique_index; DWORD index, state_index, usage, element_index; struct d3dx_state *state; struct d3dx_parameter *param; + struct d3dx_object *object; HRESULT hr = E_FAIL; read_dword(ptr, &technique_index); @@ -5022,21 +5065,26 @@ static HRESULT d3dx9_parse_resource(struct d3dx9_base_effect *base, const char * state = &pass->states[state_index]; } + TRACE("State operation %#x (%s).\n", state->operation, state_table[state->operation].name); param = &state->parameter; + TRACE("Using object id %u.\n", param->object_id); + object = &base->objects[param->object_id]; - /* - * TODO: Do we need to create the shader/string here or later when we access them? - */ switch (usage) { case 0: - TRACE("usage 0: type %s\n", debug_d3dxparameter_type(param->type)); + TRACE("usage 0: class %s type %s.\n", debug_d3dxparameter_class(param->class), + debug_d3dxparameter_type(param->type)); switch (param->type) { case D3DXPT_VERTEXSHADER: case D3DXPT_PIXELSHADER: state->type = ST_CONSTANT; - hr = d3dx9_copy_data(&base->objects[param->object_id], ptr); + if (FAILED(hr = d3dx9_copy_data(&base->objects[param->object_id], ptr))) + return hr; + + if (object->data) + hr = d3dx9_create_object(base, object); break; case D3DXPT_BOOL: @@ -5153,11 +5201,13 @@ static HRESULT d3dx9_parse_effect(struct d3dx9_base_effect *base, const char *da read_dword(&ptr, &id); TRACE("Id: %u\n", id); - hr = d3dx9_copy_data(&base->objects[id], &ptr); - if (hr != D3D_OK) - { - WARN("Failed to parse data %u\n", i); + if (FAILED(hr = d3dx9_copy_data(&base->objects[id], &ptr))) goto err_out; + + if (base->objects[id].data) + { + if (FAILED(hr = d3dx9_create_object(base, &base->objects[id]))) + goto err_out; } }
1
0
0
0
Frédéric Delanoy : gdiplus: Use BOOL type where appropriate.
by Alexandre Julliard
18 Mar '14
18 Mar '14
Module: wine Branch: master Commit: 73288e110058b0460b6de6541fc052a93121998d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=73288e110058b0460b6de6541…
Author: Frédéric Delanoy <frederic.delanoy(a)gmail.com> Date: Mon Mar 17 07:50:26 2014 +0100 gdiplus: Use BOOL type where appropriate. --- dlls/gdiplus/graphics.c | 30 +++++++++++++++--------------- dlls/gdiplus/image.c | 2 +- dlls/gdiplus/metafile.c | 4 ++-- dlls/gdiplus/pathiterator.c | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index d16c6c1..e3bf98e 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -1243,7 +1243,7 @@ static GpStatus brush_fill_pixels(GpGraphics *graphics, GpBrush *brush, INT min_y, max_y, min_x, max_x; INT x, y; ARGB outer_color; - static int transform_fixme_once; + static BOOL transform_fixme_once; if (fill->focus.X != 0.0 || fill->focus.Y != 0.0) { @@ -1280,7 +1280,7 @@ static GpStatus brush_fill_pixels(GpGraphics *graphics, GpBrush *brush, if (!is_identity) { FIXME("path gradient transform not implemented\n"); - transform_fixme_once = 1; + transform_fixme_once = TRUE; } } @@ -1314,7 +1314,7 @@ static GpStatus brush_fill_pixels(GpGraphics *graphics, GpBrush *brush, for (i=0; i<flat_path->pathdata.Count; i++) { int start_center_line=0, end_center_line=0; - int seen_start=0, seen_end=0, seen_center=0; + BOOL seen_start = FALSE, seen_end = FALSE, seen_center = FALSE; REAL center_distance; ARGB start_color, end_color; REAL dy, dx; @@ -1374,17 +1374,17 @@ static GpStatus brush_fill_pixels(GpGraphics *graphics, GpBrush *brush, if (!seen_start && yf >= start_point.Y) { - seen_start = 1; + seen_start = TRUE; start_center_line ^= 1; } if (!seen_end && yf >= end_point.Y) { - seen_end = 1; + seen_end = TRUE; end_center_line ^= 1; } if (!seen_center && yf >= center_point.Y) { - seen_center = 1; + seen_center = TRUE; start_center_line ^= 1; end_center_line ^= 1; } @@ -2839,7 +2839,7 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image else if (image->type == ImageTypeBitmap) { GpBitmap* bitmap = (GpBitmap*)image; - int use_software=0; + BOOL use_software = FALSE; TRACE("graphics: %.2fx%.2f dpi, fmt %#x, scale %f, image: %.2fx%.2f dpi, fmt %#x, color %08x\n", graphics->xres, graphics->yres, @@ -2853,7 +2853,7 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image ptf[1].X - ptf[0].X != srcwidth || ptf[2].Y - ptf[0].Y != srcheight || srcx < 0 || srcy < 0 || srcx + srcwidth > bitmap->width || srcy + srcheight > bitmap->height) - use_software = 1; + use_software = TRUE; if (use_software) { @@ -2980,7 +2980,7 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image else { HDC hdc; - int temp_hdc=0, temp_bitmap=0; + BOOL temp_hdc = FALSE, temp_bitmap = FALSE; HBITMAP hbitmap, old_hbm=NULL; if (!(bitmap->format == PixelFormat16bppRGB555 || @@ -2994,8 +2994,8 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image /* we can't draw a bitmap of this format directly */ hdc = CreateCompatibleDC(0); - temp_hdc = 1; - temp_bitmap = 1; + temp_hdc = TRUE; + temp_bitmap = TRUE; bih.biSize = sizeof(BITMAPINFOHEADER); bih.biWidth = bitmap->width; @@ -3029,7 +3029,7 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image else { GdipCreateHBITMAPFromBitmap(bitmap, &hbitmap, 0); - temp_bitmap = 1; + temp_bitmap = TRUE; } hdc = bitmap->hdc; @@ -4381,7 +4381,7 @@ GpStatus gdip_format_string(HDC hdc, INT *hotkeyprefix_offsets=NULL; INT hotkeyprefix_count=0; INT hotkeyprefix_pos=0, hotkeyprefix_end_pos=0; - int seen_prefix=0; + BOOL seen_prefix = FALSE; if(length == -1) length = lstrlenW(string); @@ -4428,11 +4428,11 @@ GpStatus gdip_format_string(HDC hdc, hotkeyprefix_offsets[hotkeyprefix_count++] = j; else if (!seen_prefix && hkprefix != HotkeyPrefixNone && string[i] == '&') { - seen_prefix = 1; + seen_prefix = TRUE; continue; } - seen_prefix = 0; + seen_prefix = FALSE; stringdup[j] = string[i]; j++; diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index d57498c..f734274 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -4714,7 +4714,7 @@ GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage *image, RotateFlipType type) GpBitmap *new_bitmap; GpBitmap *bitmap; int bpp, bytesperpixel; - int rotate_90, flip_x, flip_y; + BOOL rotate_90, flip_x, flip_y; int src_x_offset, src_y_offset; LPBYTE src_origin; UINT x, y, width, height; diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c index ed00a3e..24ab6be 100644 --- a/dlls/gdiplus/metafile.c +++ b/dlls/gdiplus/metafile.c @@ -363,7 +363,7 @@ GpStatus METAFILE_FillRectangles(GpMetafile* metafile, GpBrush* brush, { EmfPlusFillRects *record; GpStatus stat; - BOOL integer_rects=1; + BOOL integer_rects = TRUE; int i; DWORD brushid; int flags = 0; @@ -383,7 +383,7 @@ GpStatus METAFILE_FillRectangles(GpMetafile* metafile, GpBrush* brush, { if (!is_integer_rect(&rects[i])) { - integer_rects = 0; + integer_rects = FALSE; break; } } diff --git a/dlls/gdiplus/pathiterator.c b/dlls/gdiplus/pathiterator.c index d0a4ed1..49d79d0 100644 --- a/dlls/gdiplus/pathiterator.c +++ b/dlls/gdiplus/pathiterator.c @@ -217,7 +217,7 @@ GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator* iterator, if(iterator->subpath_pos == count){ *startIndex = *endIndex = *resultCount = 0; - *isClosed = 1; + *isClosed = TRUE; return Ok; }
1
0
0
0
Stefan Dösinger : ddraw/tests: Use a custom GUID for the private data tests.
by Alexandre Julliard
17 Mar '14
17 Mar '14
Module: wine Branch: master Commit: bd69346d2c15b93ec41b0e7dd7658540bdc66fbc URL:
http://source.winehq.org/git/wine.git/?a=commit;h=bd69346d2c15b93ec41b0e7dd…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Sun Mar 16 23:14:10 2014 +0100 ddraw/tests: Use a custom GUID for the private data tests. --- dlls/ddraw/tests/ddraw4.c | 56 ++++++++++++++++++++++++++++----------------- dlls/ddraw/tests/ddraw7.c | 56 ++++++++++++++++++++++++++++----------------- 2 files changed, 70 insertions(+), 42 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=bd69346d2c15b93ec41b0…
1
0
0
0
Stefan Dösinger : ddraw/tests: Add mipmap private data tests.
by Alexandre Julliard
17 Mar '14
17 Mar '14
Module: wine Branch: master Commit: 4a62f81d0de48c9e2deabc31062721d0252cec1b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4a62f81d0de48c9e2deabc310…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Sun Mar 16 23:14:09 2014 +0100 ddraw/tests: Add mipmap private data tests. --- dlls/ddraw/tests/ddraw4.c | 33 ++++++++++++++++++++++++++++++++- dlls/ddraw/tests/ddraw7.c | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index f01f812..84faf1c 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -6047,13 +6047,16 @@ static void test_surface_attachment(void) static void test_private_data(void) { IDirectDraw4 *ddraw; - IDirectDrawSurface4 *surface; + IDirectDrawSurface4 *surface, *surface2; DDSURFACEDESC2 surface_desc; ULONG refcount, refcount2, refcount3; IUnknown *ptr; DWORD size = sizeof(ptr); HRESULT hr; HWND window; + DDSCAPS2 caps = {DDSCAPS_COMPLEX, 0, 0, 0}; + DWORD data[] = {1, 2, 3, 4}; + DDCAPS hal_caps; window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, 0, 0, 0, 0); @@ -6163,6 +6166,34 @@ static void test_private_data(void) refcount2 = get_refcount((IUnknown *)ddraw); ok(refcount2 == refcount - 1, "Got unexpected refcount %u.\n", refcount2); + memset(&hal_caps, 0, sizeof(hal_caps)); + hal_caps.dwSize = sizeof(hal_caps); + hr = IDirectDraw7_GetCaps(ddraw, &hal_caps, NULL); + ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); + if ((hal_caps.ddsCaps.dwCaps & (DDSCAPS_TEXTURE | DDSCAPS_MIPMAP)) == (DDSCAPS_TEXTURE | DDSCAPS_MIPMAP)) + { + reset_ddsd(&surface_desc); + surface_desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_MIPMAPCOUNT; + surface_desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX | DDSCAPS_MIPMAP; + surface_desc.dwHeight = 4; + surface_desc.dwWidth = 4; + U2(surface_desc).dwMipMapCount = 2; + hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); + hr = IDirectDrawSurface4_GetAttachedSurface(surface, &caps, &surface2); + ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); + + hr = IDirectDrawSurface4_SetPrivateData(surface, &IID_IDirect3D, data, sizeof(data), 0); + ok(SUCCEEDED(hr), "Failed to set private data, hr %#x.\n", hr); + hr = IDirectDrawSurface4_GetPrivateData(surface2, &IID_IDirect3D, NULL, NULL); + ok(hr == DDERR_NOTFOUND, "Got unexpected hr %#x.\n", hr); + + IDirectDrawSurface4_Release(surface2); + IDirectDrawSurface4_Release(surface); + } + else + skip("Mipmapped textures not supported, skipping mipmap private data test.\n"); + refcount = IDirectDraw4_Release(ddraw); ok(!refcount, "Got unexpected refcount %u.\n", refcount); DestroyWindow(window); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 1efde27..b7c9508 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -5902,13 +5902,16 @@ static void test_surface_attachment(void) static void test_private_data(void) { IDirectDraw7 *ddraw; - IDirectDrawSurface7 *surface; + IDirectDrawSurface7 *surface, *surface2; DDSURFACEDESC2 surface_desc; ULONG refcount, refcount2, refcount3; IUnknown *ptr; DWORD size = sizeof(ptr); HRESULT hr; HWND window; + DDSCAPS2 caps = {DDSCAPS_COMPLEX, 0, 0, 0}; + DWORD data[] = {1, 2, 3, 4}; + DDCAPS hal_caps; window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, 0, 0, 0, 0); @@ -6018,6 +6021,34 @@ static void test_private_data(void) refcount2 = get_refcount((IUnknown *)ddraw); ok(refcount2 == refcount - 1, "Got unexpected refcount %u.\n", refcount2); + memset(&hal_caps, 0, sizeof(hal_caps)); + hal_caps.dwSize = sizeof(hal_caps); + hr = IDirectDraw7_GetCaps(ddraw, &hal_caps, NULL); + ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); + if ((hal_caps.ddsCaps.dwCaps & (DDSCAPS_TEXTURE | DDSCAPS_MIPMAP)) == (DDSCAPS_TEXTURE | DDSCAPS_MIPMAP)) + { + reset_ddsd(&surface_desc); + surface_desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_MIPMAPCOUNT; + surface_desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX | DDSCAPS_MIPMAP; + surface_desc.dwHeight = 4; + surface_desc.dwWidth = 4; + U2(surface_desc).dwMipMapCount = 2; + hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); + hr = IDirectDrawSurface7_GetAttachedSurface(surface, &caps, &surface2); + ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); + + hr = IDirectDrawSurface7_SetPrivateData(surface, &IID_IDirect3D, data, sizeof(data), 0); + ok(SUCCEEDED(hr), "Failed to set private data, hr %#x.\n", hr); + hr = IDirectDrawSurface7_GetPrivateData(surface2, &IID_IDirect3D, NULL, NULL); + ok(hr == DDERR_NOTFOUND, "Got unexpected hr %#x.\n", hr); + + IDirectDrawSurface7_Release(surface2); + IDirectDrawSurface7_Release(surface); + } + else + skip("Mipmapped textures not supported, skipping mipmap private data test.\n"); + refcount = IDirectDraw7_Release(ddraw); ok(!refcount, "Got unexpected refcount %u.\n", refcount); DestroyWindow(window);
1
0
0
0
Stefan Dösinger : ddraw/tests: Test GetPrivateData size behavior.
by Alexandre Julliard
17 Mar '14
17 Mar '14
Module: wine Branch: master Commit: 1d9ff5c43b4630be0791508c0b7d9f6e1379dd39 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1d9ff5c43b4630be0791508c0…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Sun Mar 16 20:38:59 2014 +0100 ddraw/tests: Test GetPrivateData size behavior. --- dlls/ddraw/tests/ddraw4.c | 26 ++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 26 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index bb725e7..f01f812 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -6122,13 +6122,39 @@ static void test_private_data(void) hr = IDirectDrawSurface4_SetPrivateData(surface, &IID_IDirect3D, ddraw, sizeof(ddraw), DDSPD_IUNKNOWNPOINTER); ok(SUCCEEDED(hr), "Failed to set private data, hr %#x.\n", hr); + size = 2 * sizeof(ptr); hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3D, &ptr, &size); ok(SUCCEEDED(hr), "Failed to get private data, hr %#x.\n", hr); + ok(size == sizeof(ddraw), "Got unexpected size %u.\n", size); refcount2 = get_refcount(ptr); /* Object is NOT addref'ed by the getter. */ ok(ptr == (IUnknown *)ddraw, "Returned interface pointer is %p, expected %p.\n", ptr, ddraw); ok(refcount2 == refcount + 1, "Got unexpected refcount %u.\n", refcount2); + ptr = (IUnknown *)0xdeadbeef; + size = 1; + hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3D, NULL, &size); + ok(hr == DDERR_MOREDATA, "Got unexpected hr %#x.\n", hr); + ok(size == sizeof(ddraw), "Got unexpected size %u.\n", size); + size = 2 * sizeof(ptr); + hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3D, NULL, &size); + ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr); + ok(size == 2 * sizeof(ptr), "Got unexpected size %u.\n", size); + size = 1; + hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3D, &ptr, &size); + ok(hr == DDERR_MOREDATA, "Got unexpected hr %#x.\n", hr); + ok(size == sizeof(ddraw), "Got unexpected size %u.\n", size); + ok(ptr == (IUnknown *)0xdeadbeef, "Got unexpected pointer %p.\n", ptr); + hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3DViewport, NULL, NULL); + ok(hr == DDERR_NOTFOUND, "Got unexpected hr %#x.\n", hr); + size = 0xdeadbabe; + hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3DViewport, &ptr, &size); + ok(hr == DDERR_NOTFOUND, "Got unexpected hr %#x.\n", hr); + ok(ptr == (IUnknown *)0xdeadbeef, "Got unexpected pointer %p.\n", ptr); + ok(size == 0xdeadbabe, "Got unexpected size %u.\n", size); + hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3D, NULL, NULL); + ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr); + refcount3 = IDirectDrawSurface4_Release(surface); ok(!refcount3, "Got unexpected refcount %u.\n", refcount3); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 15e89a1..1efde27 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -5977,13 +5977,39 @@ static void test_private_data(void) hr = IDirectDrawSurface7_SetPrivateData(surface, &IID_IDirect3D, ddraw, sizeof(ddraw), DDSPD_IUNKNOWNPOINTER); ok(SUCCEEDED(hr), "Failed to set private data, hr %#x.\n", hr); + size = 2 * sizeof(ptr); hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3D, &ptr, &size); ok(SUCCEEDED(hr), "Failed to get private data, hr %#x.\n", hr); + ok(size == sizeof(ddraw), "Got unexpected size %u.\n", size); refcount2 = get_refcount(ptr); /* Object is NOT addref'ed by the getter. */ ok(ptr == (IUnknown *)ddraw, "Returned interface pointer is %p, expected %p.\n", ptr, ddraw); ok(refcount2 == refcount + 1, "Got unexpected refcount %u.\n", refcount2); + ptr = (IUnknown *)0xdeadbeef; + size = 1; + hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3D, NULL, &size); + ok(hr == DDERR_MOREDATA, "Got unexpected hr %#x.\n", hr); + ok(size == sizeof(ddraw), "Got unexpected size %u.\n", size); + size = 2 * sizeof(ptr); + hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3D, NULL, &size); + ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr); + ok(size == 2 * sizeof(ptr), "Got unexpected size %u.\n", size); + size = 1; + hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3D, &ptr, &size); + ok(hr == DDERR_MOREDATA, "Got unexpected hr %#x.\n", hr); + ok(size == sizeof(ddraw), "Got unexpected size %u.\n", size); + ok(ptr == (IUnknown *)0xdeadbeef, "Got unexpected pointer %p.\n", ptr); + hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3DViewport, NULL, NULL); + ok(hr == DDERR_NOTFOUND, "Got unexpected hr %#x.\n", hr); + size = 0xdeadbabe; + hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3DViewport, &ptr, &size); + ok(hr == DDERR_NOTFOUND, "Got unexpected hr %#x.\n", hr); + ok(ptr == (IUnknown *)0xdeadbeef, "Got unexpected pointer %p.\n", ptr); + ok(size == 0xdeadbabe, "Got unexpected size %u.\n", size); + hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3D, NULL, NULL); + ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr); + refcount3 = IDirectDrawSurface7_Release(surface); ok(!refcount3, "Got unexpected refcount %u.\n", refcount3);
1
0
0
0
Stefan Dösinger : ddraw: Use the new private store api.
by Alexandre Julliard
17 Mar '14
17 Mar '14
Module: wine Branch: master Commit: 7d793715f3a18162f1d53472e371cea826b8bf78 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=7d793715f3a18162f1d53472e…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Sun Mar 16 20:38:58 2014 +0100 ddraw: Use the new private store api. --- dlls/ddraw/ddraw_private.h | 1 + dlls/ddraw/surface.c | 74 +++++++++++++++++++++++++++++--------------- dlls/wined3d/resource.c | 8 +---- 3 files changed, 51 insertions(+), 32 deletions(-) diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index 0f7f755..2bf8132 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -150,6 +150,7 @@ struct ddraw_surface struct ddraw *ddraw; struct wined3d_surface *wined3d_surface; struct wined3d_texture *wined3d_texture; + struct wined3d_private_store private_store; struct d3d_device *device1; /* This implementation handles attaching surfaces to other surfaces */ diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 13aa813..5cfec01 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -2246,25 +2246,18 @@ static HRESULT WINAPI ddraw_surface7_GetPriority(IDirectDrawSurface7 *iface, DWO * *****************************************************************************/ static HRESULT WINAPI ddraw_surface7_SetPrivateData(IDirectDrawSurface7 *iface, - REFGUID tag, void *Data, DWORD Size, DWORD Flags) + REFGUID tag, void *data, DWORD size, DWORD flags) { struct ddraw_surface *surface = impl_from_IDirectDrawSurface7(iface); - struct wined3d_resource *resource; HRESULT hr; TRACE("iface %p, tag %s, data %p, data_size %u, flags %#x.\n", - iface, debugstr_guid(tag), Data, Size, Flags); + iface, debugstr_guid(tag), data, size, flags); wined3d_mutex_lock(); - resource = wined3d_surface_get_resource(surface->wined3d_surface); - hr = wined3d_resource_set_private_data(resource, tag, Data, Size, Flags); + hr = wined3d_private_store_set_private_data(&surface->private_store, tag, data, size, flags); wined3d_mutex_unlock(); - - switch(hr) - { - case WINED3DERR_INVALIDCALL: return DDERR_INVALIDPARAMS; - default: return hr; - } + return hr_ddraw_from_wined3d(hr); } static HRESULT WINAPI ddraw_surface4_SetPrivateData(IDirectDrawSurface4 *iface, @@ -2294,23 +2287,45 @@ static HRESULT WINAPI ddraw_surface4_SetPrivateData(IDirectDrawSurface4 *iface, * For more details, see IWineD3DSurface::GetPrivateData * *****************************************************************************/ -static HRESULT WINAPI ddraw_surface7_GetPrivateData(IDirectDrawSurface7 *iface, REFGUID tag, void *Data, DWORD *Size) +static HRESULT WINAPI ddraw_surface7_GetPrivateData(IDirectDrawSurface7 *iface, REFGUID tag, void *data, DWORD *size) { struct ddraw_surface *surface = impl_from_IDirectDrawSurface7(iface); - struct wined3d_resource *resource; + const struct wined3d_private_data *stored_data; HRESULT hr; TRACE("iface %p, tag %s, data %p, data_size %p.\n", - iface, debugstr_guid(tag), Data, Size); - - if(!Data) - return DDERR_INVALIDPARAMS; + iface, debugstr_guid(tag), data, size); wined3d_mutex_lock(); - resource = wined3d_surface_get_resource(surface->wined3d_surface); - hr = wined3d_resource_get_private_data(resource, tag, Data, Size); - wined3d_mutex_unlock(); + stored_data = wined3d_private_store_get_private_data(&surface->private_store, tag); + if (!stored_data) + { + hr = DDERR_NOTFOUND; + goto done; + } + if (!size) + { + hr = DDERR_INVALIDPARAMS; + goto done; + } + if (*size < stored_data->size) + { + *size = stored_data->size; + hr = DDERR_MOREDATA; + goto done; + } + if (!data) + { + hr = DDERR_INVALIDPARAMS; + goto done; + } + *size = stored_data->size; + memcpy(data, stored_data->content.data, stored_data->size); + hr = DD_OK; + +done: + wined3d_mutex_unlock(); return hr; } @@ -2340,17 +2355,22 @@ static HRESULT WINAPI ddraw_surface4_GetPrivateData(IDirectDrawSurface4 *iface, static HRESULT WINAPI ddraw_surface7_FreePrivateData(IDirectDrawSurface7 *iface, REFGUID tag) { struct ddraw_surface *surface = impl_from_IDirectDrawSurface7(iface); - struct wined3d_resource *resource; - HRESULT hr; + struct wined3d_private_data *entry; TRACE("iface %p, tag %s.\n", iface, debugstr_guid(tag)); wined3d_mutex_lock(); - resource = wined3d_surface_get_resource(surface->wined3d_surface); - hr = wined3d_resource_free_private_data(resource, tag); + entry = wined3d_private_store_get_private_data(&surface->private_store, tag); + if (!entry) + { + wined3d_mutex_unlock(); + return DDERR_NOTFOUND; + } + + wined3d_private_store_free_private_data(&surface->private_store, entry); wined3d_mutex_unlock(); - return hr; + return DD_OK; } static HRESULT WINAPI ddraw_surface4_FreePrivateData(IDirectDrawSurface4 *iface, REFGUID tag) @@ -5469,6 +5489,8 @@ static void STDMETHODCALLTYPE ddraw_surface_wined3d_object_destroyed(void *paren if (surface == surface->ddraw->primary) surface->ddraw->primary = NULL; + wined3d_private_store_cleanup(&surface->private_store); + HeapFree(GetProcessHeap(), 0, surface); } @@ -6095,5 +6117,7 @@ HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, s surface->wined3d_surface = wined3d_surface; *parent_ops = &ddraw_surface_wined3d_parent_ops; + wined3d_private_store_init(&surface->private_store); + return DD_OK; } diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c index 782cc9f..43bd7ce 100644 --- a/dlls/wined3d/resource.c +++ b/dlls/wined3d/resource.c @@ -192,13 +192,7 @@ HRESULT CDECL wined3d_resource_get_private_data(const struct wined3d_resource *r if (d->flags & WINED3DSPD_IUNKNOWN) { *(IUnknown **)data = d->content.object; - if (resource->device->wined3d->dxVersion != 7) - { - /* D3D8 and D3D9 addref the private data, DDraw does not. This - * can't be handled in ddraw because it doesn't know if the - * pointer returned is an IUnknown * or just a blob. */ - IUnknown_AddRef(d->content.object); - } + IUnknown_AddRef(d->content.object); } else {
1
0
0
0
Hans Leidekker : wbemprox: Implement Win32_LogicalDisk.VolumeSerialNumber.
by Alexandre Julliard
17 Mar '14
17 Mar '14
Module: wine Branch: master Commit: e50c4d0f3209528e1e94f37acbc46ca94fb3e867 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=e50c4d0f3209528e1e94f37ac…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Mon Mar 17 09:36:55 2014 +0100 wbemprox: Implement Win32_LogicalDisk.VolumeSerialNumber. --- dlls/wbemprox/builtin.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c index 118ec0a..66f2882 100644 --- a/dlls/wbemprox/builtin.c +++ b/dlls/wbemprox/builtin.c @@ -263,6 +263,8 @@ static const WCHAR prop_varianttypeW[] = {'V','a','r','i','a','n','t','T','y','p','e',0}; static const WCHAR prop_versionW[] = {'V','e','r','s','i','o','n',0}; +static const WCHAR prop_volumeserialnumberW[] = + {'V','o','l','u','m','e','S','e','r','i','a','l','N','u','m','b','e','r',0}; /* column definitions must be kept in sync with record structures below */ static const struct column col_baseboard[] = @@ -335,12 +337,13 @@ static const struct column col_diskpartition[] = }; static const struct column col_logicaldisk[] = { - { prop_deviceidW, CIM_STRING|COL_FLAG_DYNAMIC|COL_FLAG_KEY }, - { prop_drivetypeW, CIM_UINT32, VT_I4 }, - { prop_filesystemW, CIM_STRING|COL_FLAG_DYNAMIC }, - { prop_freespaceW, CIM_UINT64 }, - { prop_nameW, CIM_STRING|COL_FLAG_DYNAMIC }, - { prop_sizeW, CIM_UINT64 } + { prop_deviceidW, CIM_STRING|COL_FLAG_DYNAMIC|COL_FLAG_KEY }, + { prop_drivetypeW, CIM_UINT32, VT_I4 }, + { prop_filesystemW, CIM_STRING|COL_FLAG_DYNAMIC }, + { prop_freespaceW, CIM_UINT64 }, + { prop_nameW, CIM_STRING|COL_FLAG_DYNAMIC }, + { prop_sizeW, CIM_UINT64 }, + { prop_volumeserialnumberW, CIM_STRING|COL_FLAG_DYNAMIC } }; static const struct column col_networkadapter[] = { @@ -625,6 +628,7 @@ struct record_logicaldisk UINT64 freespace; const WCHAR *name; UINT64 size; + const WCHAR *volumeserialnumber; }; struct record_networkadapter { @@ -1520,6 +1524,17 @@ static enum fill_status fill_diskpartition( struct table *table, const struct ex return status; } +static WCHAR *get_volumeserialnumber( const WCHAR *root ) +{ + static const WCHAR fmtW[] = {'%','0','8','X',0}; + DWORD serial = 0; + WCHAR buffer[9]; + + GetVolumeInformationW( root, NULL, 0, &serial, NULL, NULL, NULL, 0 ); + sprintfW( buffer, fmtW, serial ); + return heap_strdupW( buffer ); +} + static enum fill_status fill_logicaldisk( struct table *table, const struct expr *cond ) { static const WCHAR fmtW[] = {'%','c',':',0}; @@ -1545,12 +1560,13 @@ static enum fill_status fill_logicaldisk( struct table *table, const struct expr rec = (struct record_logicaldisk *)(table->data + offset); sprintfW( device_id, fmtW, 'A' + i ); - rec->device_id = heap_strdupW( device_id ); - rec->drivetype = type; - rec->filesystem = get_filesystem( root ); - rec->freespace = get_freespace( root, &size ); - rec->name = heap_strdupW( device_id ); - rec->size = size; + rec->device_id = heap_strdupW( device_id ); + rec->drivetype = type; + rec->filesystem = get_filesystem( root ); + rec->freespace = get_freespace( root, &size ); + rec->name = heap_strdupW( device_id ); + rec->size = size; + rec->volumeserialnumber = get_volumeserialnumber( root ); if (!match_row( table, row, cond, &status )) { free_row_values( table, row );
1
0
0
0
Austin English : setupapi: Make sure DeviceInterfaceData-> cbSize is initialized in SetupDiEnumDeviceInterfaces.
by Alexandre Julliard
17 Mar '14
17 Mar '14
Module: wine Branch: master Commit: 8d854a4830776aaacb70161709db315d54eb77f0 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=8d854a4830776aaacb7016170…
Author: Austin English <austinenglish(a)gmail.com> Date: Fri Mar 14 19:45:19 2014 -0400 setupapi: Make sure DeviceInterfaceData->cbSize is initialized in SetupDiEnumDeviceInterfaces. --- dlls/setupapi/devinst.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index 33dea82..ef56d2b 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -2795,8 +2795,11 @@ BOOL WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } + /* In case application fails to check return value, clear output */ memset(DeviceInterfaceData, 0, sizeof(*DeviceInterfaceData)); + DeviceInterfaceData->cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + if (DeviceInfoData) { struct DeviceInfo *devInfo =
1
0
0
0
← Newer
1
...
21
22
23
24
25
26
27
...
53
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
Results per page:
10
25
50
100
200