Re: [v3] gdi32: return non-zero v-refresh value for display devices.
On Thu, Jul 20, 2017 at 10:56:40PM +0900, Akihiro Sagawa wrote:
To avoid division by zero (Bug 43369).
In version 3, refine a testcase. The refresh rate value is neither zero nor negative, thus we should test both. Thanks for reviewing.
Signed-off-by: Akihiro Sagawa <sagawa.aki(a)gmail.com> --- dlls/gdi32/driver.c | 2 +- dlls/gdi32/tests/dc.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index fe7812c..6a3975a 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -344,7 +344,7 @@ static INT nulldrv_GetDeviceCaps( PHYSDEV dev, INT cap ) case PHYSICALOFFSETY: return 0; case SCALINGFACTORX: return 0; case SCALINGFACTORY: return 0; - case VREFRESH: return 0; + case VREFRESH: return GetDeviceCaps( dev->hdc, TECHNOLOGY ) == DT_RASDISPLAY ? 1 : 0; case DESKTOPVERTRES: return GetDeviceCaps( dev->hdc, VERTRES ); case DESKTOPHORZRES: return GetDeviceCaps( dev->hdc, HORZRES ); case BLTALIGNMENT: return 0; diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c index add2c04..d316f3f 100644 --- a/dlls/gdi32/tests/dc.c +++ b/dlls/gdi32/tests/dc.c @@ -388,6 +388,7 @@ static void test_device_caps( HDC hdc, HDC ref_dc, const char *descr, int scale { INT precision = 0; INT hdc_caps = GetDeviceCaps( hdc, caps[i] ); + INT ref_caps;
switch (caps[i]) { @@ -400,6 +401,13 @@ static void test_device_caps( HDC hdc, HDC ref_dc, const char *descr, int scale case LOGPIXELSY: hdc_caps *= scale; break; + case VREFRESH: + ref_caps = GetDeviceCaps( ref_dc, caps[i] ); + if (GetDeviceCaps( ref_dc, TECHNOLOGY ) == DT_RASDISPLAY) + ok( ref_caps > 0, "expected a positive value on %s, got %d\n", descr, ref_caps ); + else + ok( ref_caps == 0, "expected 0 on %s, got %d\n", descr, ref_caps ); + break; }
You don't want to use 'ref_dc' here, use 'hdc' instead. Also, note that 'hdc_caps' already contains the thing you want to test, so you don't need the first call to GetDeviceCaps(). Huw.
participants (1)
-
Huw Davies