diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-05-05 23:52:18 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-05-06 10:28:08 +0100 |
commit | 810ab680c60e21660cbb1bfa1893ee6321bfa771 (patch) | |
tree | 888d8e4258b9687398356cb2d86ecc1acc727713 | |
parent | c6a56e0b7f36b247c6808e3c6640c47599c5b56e (diff) |
valgrind: silence annoying conditional jump warnings from dead scanline space
Change-Id: I46f3d61ff85886c44849c22bfda4a3628041d6dd
-rw-r--r-- | vcl/Library_vclplug_gen.mk | 7 | ||||
-rw-r--r-- | vcl/unx/generic/gdi/salbmp.cxx | 31 |
2 files changed, 38 insertions, 0 deletions
diff --git a/vcl/Library_vclplug_gen.mk b/vcl/Library_vclplug_gen.mk index c9c9bbe6468f..31df6c2d95c5 100644 --- a/vcl/Library_vclplug_gen.mk +++ b/vcl/Library_vclplug_gen.mk @@ -132,6 +132,13 @@ $(eval $(call gb_Library_add_defs,vclplug_gen,\ endif endif +$(eval $(call gb_Library_add_defs,vclplug_gen,\ + $(if $(VALGRIND_CFLAGS), \ + $(VALGRIND_CFLAGS) \ + -DHAVE_MEMCHECK_H=1 \ + ) \ +)) + ## handle Xinerama ifneq ($(USE_XINERAMA),NO) ifneq ($(OS),SOLARIS) diff --git a/vcl/unx/generic/gdi/salbmp.cxx b/vcl/unx/generic/gdi/salbmp.cxx index b8b9f42f9302..d48cf985fcc5 100644 --- a/vcl/unx/generic/gdi/salbmp.cxx +++ b/vcl/unx/generic/gdi/salbmp.cxx @@ -53,6 +53,10 @@ #include <unx/salinst.h> #include <unx/x11/xlimits.hxx> +#if defined(HAVE_MEMCHECK_H) +#include <memcheck.h> +#endif + // ----------- // - Defines - // ----------- @@ -113,6 +117,21 @@ void X11SalBitmap::ImplRemovedFromCache() delete mpDDB, mpDDB = NULL; } +#if defined(HAVE_MEMCHECK_H) +void blankExtraSpace(BitmapBuffer* pDIB) +{ + size_t nExtraSpaceInScanLine = pDIB->mnScanlineSize - pDIB->mnWidth * pDIB->mnBitCount / 8; + if (nExtraSpaceInScanLine) + { + for (long i = 0; i < pDIB->mnHeight; ++i) + { + sal_uInt8 *pRow = pDIB->mpBits + (i * pDIB->mnScanlineSize); + memset(pRow + (pDIB->mnScanlineSize - nExtraSpaceInScanLine), 0, nExtraSpaceInScanLine); + } + } +} +#endif + // ----------------------------------------------------------------------------- BitmapBuffer* X11SalBitmap::ImplCreateDIB( @@ -186,6 +205,10 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB( try { pDIB->mpBits = new sal_uInt8[ pDIB->mnScanlineSize * pDIB->mnHeight ]; +#if defined(HAVE_MEMCHECK_H) + if (RUNNING_ON_VALGRIND) + blankExtraSpace(pDIB); +#endif } catch (const std::bad_alloc&) { @@ -530,6 +553,10 @@ XImage* X11SalBitmap::ImplCreateXImage( if( pDstBuf && pDstBuf->mpBits ) { +#if defined(HAVE_MEMCHECK_H) + if (RUNNING_ON_VALGRIND) + blankExtraSpace(pDstBuf); +#endif // set data in buffer as data member in pImage pImage->data = (char*) pDstBuf->mpBits; @@ -704,6 +731,10 @@ bool X11SalBitmap::Create( const SalBitmap& rSSalBmp ) try { mpDIB->mpBits = new sal_uInt8[ mpDIB->mnScanlineSize * mpDIB->mnHeight ]; +#if defined(HAVE_MEMCHECK_H) + if (RUNNING_ON_VALGRIND) + blankExtraSpace(mpDIB); +#endif } catch (const std::bad_alloc&) { |