Sync with trunk r58151 to bring the latest changes from Amine and Timo.

svn path=/branches/ros-csrss/; revision=58152
This commit is contained in:
Hermès Bélusca-Maïto 2013-01-09 20:12:23 +00:00
commit 122303c4ea
180 changed files with 5471 additions and 1510 deletions

View file

@ -179,7 +179,8 @@ list(APPEND SOURCE
gdi/ntgdi/xformobj.c
gdi/eng/stubs.c
gdi/eng/umpdstubs.c
win32k.rc)
win32k.rc
${CMAKE_CURRENT_BINARY_DIR}/win32k.def)
if(USE_DIBLIB)
add_definitions(-D_USE_DIBLIB_)
@ -200,7 +201,7 @@ else()
endif()
if(ARCH STREQUAL "i386")
list(APPEND SOURCE
list(APPEND ASM_SOURCE
gdi/dib/i386/dib24bpp_hline.s
gdi/dib/i386/dib32bpp_hline.s
gdi/dib/i386/dib32bpp_colorfill.s
@ -216,9 +217,8 @@ if(KDBG)
gdi/ntgdi/gdikdbgext.c)
endif()
add_library(win32k SHARED
${CMAKE_CURRENT_BINARY_DIR}/win32k.def
${SOURCE})
add_asm_files(win32k_asm ${ASM_SOURCE})
add_library(win32k SHARED ${SOURCE} ${win32k_asm})
set_module_type(win32k kernelmodedriver)
@ -235,5 +235,7 @@ add_importlibs(win32k ntoskrnl hal ftfd)
add_pch(win32k pch.h)
add_cd_file(TARGET win32k DESTINATION reactos/system32 FOR all)
add_library(win32ksys sys-stubs.S)
set_source_files_properties(sys-stubs.S PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/w32ksvc.h)
add_asm_files(win32ksys_asm sys-stubs.S)
add_library(win32ksys ${win32ksys_asm})
set_target_properties(win32ksys PROPERTIES LINKER_LANGUAGE "C")

View file

@ -1071,6 +1071,14 @@ NtGdiStretchDIBitsInternal(
return 0;
}
/* Check for info / mem DC without surface */
if (!pdc->dclevel.pSurface)
{
DC_UnlockDc(pdc);
// CHECKME
return TRUE;
}
/* Transform dest size */
sizel.cx = cxDst;
sizel.cy = cyDst;
@ -1099,22 +1107,30 @@ NtGdiStretchDIBitsInternal(
hcmXform);
}
pvBits = ExAllocatePoolWithTag(PagedPool, cjMaxBits, 'pmeT');
if (!pvBits)
if (pjInit && (cjMaxBits > 0))
{
return 0;
}
pvBits = ExAllocatePoolWithTag(PagedPool, cjMaxBits, 'pmeT');
if (!pvBits)
{
return 0;
}
_SEH2_TRY
{
ProbeForRead(pjInit, cjMaxBits, 1);
RtlCopyMemory(pvBits, pjInit, cjMaxBits);
_SEH2_TRY
{
ProbeForRead(pjInit, cjMaxBits, 1);
RtlCopyMemory(pvBits, pjInit, cjMaxBits);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
ExFreePoolWithTag(pvBits, 'pmeT');
_SEH2_YIELD(return 0);
}
_SEH2_END
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
else
{
_SEH2_YIELD(return 0);
pvBits = NULL;
}
_SEH2_END
/* FIXME: Locking twice is cheesy, coord tranlation in UM will fix it */
if (!(pdc = DC_LockDc(hdc)))
@ -1171,13 +1187,6 @@ NtGdiStretchDIBitsInternal(
DC_vPrepareDCsForBlit(pdc, rcDst, NULL, rcSrc);
psurfDst = pdc->dclevel.pSurface;
if (!psurfDst)
{
DC_vFinishBlit(pdc, NULL);
// CHECKME
bResult = TRUE;
goto cleanup;
}
/* Initialize XLATEOBJ */
EXLATEOBJ_vInitialize(&exlo,
@ -1209,7 +1218,7 @@ cleanup:
if (psurfTmp) SURFACE_ShareUnlockSurface(psurfTmp);
if (hbmTmp) GreDeleteObject(hbmTmp);
if (pdc) DC_UnlockDc(pdc);
ExFreePoolWithTag(pvBits, 'pmeT');
if (pvBits) ExFreePoolWithTag(pvBits, 'pmeT');
return bResult;
}