⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 275084 in webkit


Ignore:
Timestamp:
Mar 26, 2021, 2:25:21 AM (5 years ago)
Author:
ysuzuki@apple.com
Message:

Use ICUDeleter to encode ucnv_close/uenum_close call into type of deleter of std::unique_ptr
https://bugs.webkit.org/show_bug.cgi?id=223503

Reviewed by Alex Christensen.

Use ICUDeleter<ucnv_close> instead of holding ucnv_close pointer in ICUConverterPtr.
This deleter encodes ucnv_close calls into type so that we do not need to hold a pointer
to ucnv_close.

We also use ICUDeleter<uenum_close> in place where we use UEnumeration.

  • Modules/applepay/PaymentRequestValidator.mm:

(WebCore::validateCurrencyCode):

  • platform/text/EncodingTables.cpp:

(WebCore::jis0208):
(WebCore::jis0212):
(WebCore::big5):
(WebCore::eucKR):
(WebCore::gb18030):

  • platform/text/TextCodecICU.cpp:

(WebCore::TextCodecICU::createICUConverter const):

  • platform/text/TextCodecICU.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r275082 r275084  
     12021-03-26  Yusuke Suzuki  <ysuzuki@apple.com>
     2
     3        Use ICUDeleter to encode ucnv_close/uenum_close call into type of deleter of std::unique_ptr
     4        https://bugs.webkit.org/show_bug.cgi?id=223503
     5
     6        Reviewed by Alex Christensen.
     7
     8        Use ICUDeleter<ucnv_close> instead of holding ucnv_close pointer in ICUConverterPtr.
     9        This deleter encodes ucnv_close calls into type so that we do not need to hold a pointer
     10        to ucnv_close.
     11
     12        We also use ICUDeleter<uenum_close> in place where we use UEnumeration.
     13
     14        * Modules/applepay/PaymentRequestValidator.mm:
     15        (WebCore::validateCurrencyCode):
     16        * platform/text/EncodingTables.cpp:
     17        (WebCore::jis0208):
     18        (WebCore::jis0212):
     19        (WebCore::big5):
     20        (WebCore::eucKR):
     21        (WebCore::gb18030):
     22        * platform/text/TextCodecICU.cpp:
     23        (WebCore::TextCodecICU::createICUConverter const):
     24        * platform/text/TextCodecICU.h:
     25
    1262021-03-26  Jessie Berlin  <jberlin@webkit.org>
    227
  • trunk/Source/WebCore/Modules/applepay/PaymentRequestValidator.mm

    r273143 r275084  
    3333#import <unicode/ucurr.h>
    3434#import <unicode/uloc.h>
     35#import <wtf/unicode/icu/ICUHelpers.h>
    3536
    3637namespace WebCore {
     
    116117
    117118    UErrorCode errorCode = U_ZERO_ERROR;
    118     auto currencyCodes = std::unique_ptr<UEnumeration, void (*)(UEnumeration*)>(ucurr_openISOCurrencies(UCURR_ALL, &errorCode), uenum_close);
     119    auto currencyCodes = std::unique_ptr<UEnumeration, ICUDeleter<uenum_close>>(ucurr_openISOCurrencies(UCURR_ALL, &errorCode));
    119120
    120121    int32_t length;
  • trunk/Source/WebCore/platform/text/EncodingTables.cpp

    r274569 r275084  
    10671067       
    10681068        UErrorCode error = U_ZERO_ERROR;
    1069         auto icuConverter = ICUConverterPtr { ucnv_open("EUC-JP", &error), ucnv_close };
     1069        auto icuConverter = ICUConverterPtr { ucnv_open("EUC-JP", &error) };
    10701070        ASSERT(!error);
    10711071
     
    18721872       
    18731873        UErrorCode error = U_ZERO_ERROR;
    1874         auto icuConverter = ICUConverterPtr { ucnv_open("EUC-JP", &error), ucnv_close };
     1874        auto icuConverter = ICUConverterPtr { ucnv_open("EUC-JP", &error) };
    18751875        ASSERT(!error);
    18761876
     
    48834883       
    48844884        UErrorCode error = U_ZERO_ERROR;
    4885         auto icuConverter = ICUConverterPtr { ucnv_open("Big-5", &error), ucnv_close };
     4885        auto icuConverter = ICUConverterPtr { ucnv_open("Big-5", &error) };
    48864886        ASSERT(!error);
    48874887
     
    70737073        array = new std::array<std::pair<uint16_t, UChar>, 17048>;
    70747074        UErrorCode error = U_ZERO_ERROR;
    7075         auto icuConverter = ICUConverterPtr { ucnv_open("windows-949", &error), ucnv_close };
     7075        auto icuConverter = ICUConverterPtr { ucnv_open("windows-949", &error) };
    70767076        ASSERT(U_SUCCESS(error));
    70777077        auto getPair = [icuConverter = WTFMove(icuConverter)] (uint16_t pointer) -> Optional<std::pair<uint16_t, UChar>> {
     
    86128612        array = new std::array<UChar, 23940>;
    86138613        UErrorCode error = U_ZERO_ERROR;
    8614         auto icuConverter = ICUConverterPtr { ucnv_open("gb18030", &error), ucnv_close };
     8614        auto icuConverter = ICUConverterPtr { ucnv_open("gb18030", &error) };
    86158615        for (size_t pointer = 0; pointer < 23940; pointer++) {
    86168616            uint8_t icuInput[2];
  • trunk/Source/WebCore/platform/text/TextCodecICU.cpp

    r269499 r275084  
    187187
    188188    UErrorCode error = U_ZERO_ERROR;
    189     m_converter = ICUConverterPtr { ucnv_open(m_canonicalConverterName, &error), ucnv_close };
     189    m_converter = ICUConverterPtr { ucnv_open(m_canonicalConverterName, &error) };
    190190    if (m_converter)
    191191        ucnv_setFallback(m_converter.get(), true);
  • trunk/Source/WebCore/platform/text/TextCodecICU.h

    r269499 r275084  
    2929#include "TextCodec.h"
    3030#include <unicode/ucnv.h>
     31#include <wtf/unicode/icu/ICUHelpers.h>
    3132
    3233namespace WebCore {
    3334
    34 using ICUConverterPtr = std::unique_ptr<UConverter, void (*)(UConverter*)>;
     35using ICUConverterPtr = std::unique_ptr<UConverter, ICUDeleter<ucnv_close>>;
    3536
    3637class TextCodecICU final : public TextCodec {
     
    5354    const char* const m_encodingName;
    5455    const char* const m_canonicalConverterName;
    55     mutable ICUConverterPtr m_converter { nullptr, ucnv_close };
     56    mutable ICUConverterPtr m_converter;
    5657};
    5758
     
    5960    WTF_MAKE_STRUCT_FAST_ALLOCATED;
    6061
    61     ICUConverterPtr converter { nullptr, ucnv_close };
     62    ICUConverterPtr converter;
    6263};
    6364
Note: See TracChangeset for help on using the changeset viewer.