From: <Sha...@si...> - 2008-12-02 21:03:44
|
Ew. Mea culpa, mea maxima culpa. Yes, it looks like it needs to be changed as you suggest. Keith Stribley <str...@fa...> 12/02/2008 04:30 AM Please respond to SILGraphite development <sil...@li...> To SIL Graphite Developers <sil...@li...> cc Subject [Silgraphite-devel] Problem with FontHandleCache I think there is a bug in WinFont::LogFontWrapper::operator== which means the FontHandleCache isn't working correctly. This can result in the assertion on line 800 being thrown. According to the following extract, we should be checking for zero, not non-zero when using memcmp: > http://www.cplusplus.com/reference/clibrary/cstring/memcmp.html > int memcmp ( const void * ptr1, const void * ptr2, size_t num ); > > <cstring> > > *Compare two blocks of memory* > > Compares the first /num/ bytes of the block of memory pointed by > /ptr1/ to the first /num/ bytes pointed by /ptr2/, returning zero if > they all match or a value different from zero representing which is > greater if they do not. > I therefore propose the following patch, which stops the assertion for me. --- misc/build/silgraphite-2.3/wrappers/win32/WinFont.cpp.orig.cc 2008-12-02 15:36:54.968750000 +0630 +++ misc/build/silgraphite-2.3/wrappers/win32/WinFont.cpp 2008-12-02 15:37:29.046875000 +0630 @@ -841,7 +841,7 @@ --------------------------------------------------------------------------------------*/ bool WinFont::LogFontWrapper::operator==(const WinFont::LogFontWrapper & lfw) const { - return memcmp(&m_lf, &(lfw.m_lf), sizeof(LOGFONT)); + return (memcmp(&m_lf, &(lfw.m_lf), sizeof(LOGFONT)) == 0); } Can anyone see any pitfall in this? I'm surprised it hasn't been noticed before. cheers, Keith |