source: trunk/dports/graphics/wxWidgets/files/patch-TECConvertText.diff @ 35613

Last change on this file since 35613 was 35613, checked in by afb@…, 9 years ago

fix crashing wxMac threading bug (#14720, maintainer timeout)

File size: 3.6 KB
  • ../src/common

    # [ 1901956 ] wxMac: TECConvertText not thread safe
    # https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1901956&group_id=9863
    old new  
    5050    #include "wx/msw/wince/missing.h"       // for bsearch()
    5151#endif
    5252
     53#if defined(__WXMAC__) && defined(TARGET_CARBON)
     54extern OSStatus __wxTECConvertText(
     55                     TECObjectRef encodingConverter,
     56                     ConstTextPtr inputBuffer,
     57                     ByteCount inputBufferLength,
     58                     ByteCount *actualInputLength,
     59                     TextPtr outputBuffer,
     60                     ByteCount outputBufferLength,
     61                     ByteCount *actualOutputLength);
     62#endif
     63
    5364static const wxUint16* GetEncTable(wxFontEncoding enc)
    5465{
    5566#ifdef __WXMAC__
     
    6879            for( unsigned char c = 255 ; c >= 128 ; --c )
    6980            {
    7081                s[0] = c ;
    71                 status = TECConvertText(converter, (ConstTextPtr) &s , 1, &byteInLen,
     82                status = __wxTECConvertText(converter, (ConstTextPtr) &s , 1, &byteInLen,
    7283                (TextPtr) &gMacEncodings[i][c-128] , 2, &byteOutLen);
    7384            }
    7485            status = TECDisposeConverter(converter);
  • ../src/common

    old new  
    7777    #define WC_UTF16
    7878#endif
    7979
     80#if defined(__WXMAC__) && defined(TARGET_CARBON)
     81OSStatus __wxTECConvertText(
     82                     TECObjectRef encodingConverter,
     83                     ConstTextPtr inputBuffer,
     84                     ByteCount inputBufferLength,
     85                     ByteCount *actualInputLength,
     86                     TextPtr outputBuffer,
     87                     ByteCount outputBufferLength,
     88                     ByteCount *actualOutputLength)
     89{
     90        static wxCriticalSection s_sec;
     91        {
     92                wxCriticalSectionLocker l(s_sec);
     93                return TECConvertText(encodingConverter, inputBuffer, inputBufferLength, actualInputLength, outputBuffer, outputBufferLength, actualOutputLength);
     94        }
     95}
     96
     97#endif
    8098
    8199// ============================================================================
    82100// implementation
     
    28012819        ubuf = (UniChar*) (buf ? buf : tbuf) ;
    28022820#endif
    28032821
    2804         status = TECConvertText(
     2822        status = __wxTECConvertText(
    28052823            m_MB2WC_converter, (ConstTextPtr) psz, byteInLen, &byteInLen,
    28062824            (TextPtr) ubuf, byteBufferLen, &byteOutLen);
    28072825
     
    28542872        ubuf = (UniChar*) psz ;
    28552873#endif
    28562874
    2857         status = TECConvertText(
     2875        status = __wxTECConvertText(
    28582876            m_WC2MB_converter, (ConstTextPtr) ubuf, byteInLen, &byteInLen,
    28592877            (TextPtr) (buf ? buf : tbuf), byteBufferLen, &byteOutLen);
    28602878
     
    29632981
    29642982        // we now convert that decomposed buffer into UTF8
    29652983
    2966         status = TECConvertText(
     2984        status = __wxTECConvertText(
    29672985            m_WC2MB_converter, (ConstTextPtr) dcubuf, dcubufwritten, &dcubufread,
    29682986            (TextPtr) (buf ? buf : tbuf), byteBufferLen, &byteOutLen);
    29692987
     
    30153033        ByteCount dcubufread , dcubufwritten ;
    30163034        UniChar *dcubuf = (UniChar*) malloc( dcubuflen ) ;
    30173035
    3018         status = TECConvertText(
     3036        status = __wxTECConvertText(
    30193037                                m_MB2WC_converter, (ConstTextPtr) psz, byteInLen, &byteInLen,
    30203038                                (TextPtr) dcubuf, dcubuflen, &byteOutLen);
    30213039        // we have to terminate here, because n might be larger for the trailing zero, and if UniChar
Note: See TracBrowser for help on using the repository browser.