Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: source/i18n/uspoof_impl.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/i18n/uspoof.cpp ('k') | source/i18n/usrchimp.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/i18n/uspoof_impl.cpp
diff --git a/source/i18n/uspoof_impl.cpp b/source/i18n/uspoof_impl.cpp
index 47dca16aaf0640729b90e3e4d3ff48769af7acfd..9c662f8048336e70581300ba3f418c4a662ae945 100644
--- a/source/i18n/uspoof_impl.cpp
+++ b/source/i18n/uspoof_impl.cpp
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2008-2013, International Business Machines
+* Copyright (C) 2008-2014, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*/
@@ -15,7 +15,6 @@
#include "cstring.h"
#include "identifier_info.h"
#include "scriptset.h"
-#include "udatamem.h"
#include "umutex.h"
#include "udataswp.h"
#include "uassert.h"
@@ -475,6 +474,30 @@ UBool SpoofData::validateDataVersion(const SpoofDataHeader *rawData, UErrorCode
return TRUE;
}
+static UBool U_CALLCONV
+spoofDataIsAcceptable(void *context,
+ const char * /* type */, const char * /*name*/,
+ const UDataInfo *pInfo) {
+ if(
+ pInfo->size >= 20 &&
+ pInfo->isBigEndian == U_IS_BIG_ENDIAN &&
+ pInfo->charsetFamily == U_CHARSET_FAMILY &&
+ pInfo->dataFormat[0] == 0x43 && // dataFormat="Cfu "
+ pInfo->dataFormat[1] == 0x66 &&
+ pInfo->dataFormat[2] == 0x75 &&
+ pInfo->dataFormat[3] == 0x20 &&
+ pInfo->formatVersion[0] == 1
+ ) {
+ UVersionInfo *version = static_cast<UVersionInfo *>(context);
+ if(version != NULL) {
+ uprv_memcpy(version, pInfo->dataVersion, 4);
+ }
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
//
// SpoofData::getDefault() - return a wrapper around the spoof data that is
// baked into the default ICU data.
@@ -482,7 +505,10 @@ UBool SpoofData::validateDataVersion(const SpoofDataHeader *rawData, UErrorCode
SpoofData *SpoofData::getDefault(UErrorCode &status) {
// TODO: Cache it. Lazy create, keep until cleanup.
- UDataMemory *udm = udata_open(NULL, "cfu", "confusables", &status);
+ UDataMemory *udm = udata_openChoice(NULL, "cfu", "confusables",
+ spoofDataIsAcceptable,
+ NULL, // context, would receive dataVersion if supplied.
+ &status);
if (U_FAILURE(status)) {
return NULL;
}
@@ -497,16 +523,16 @@ SpoofData *SpoofData::getDefault(UErrorCode &status) {
return This;
}
-
SpoofData::SpoofData(UDataMemory *udm, UErrorCode &status)
{
reset();
if (U_FAILURE(status)) {
return;
}
- fRawData = reinterpret_cast<SpoofDataHeader *>
- ((char *)(udm->pHeader) + udm->pHeader->dataHeader.headerSize);
fUDM = udm;
+ // fRawData is non-const because it may be constructed by the data builder.
+ fRawData = reinterpret_cast<SpoofDataHeader *>(
+ const_cast<void *>(udata_getMemory(udm)));
validateDataVersion(fRawData, status);
initPtrs(status);
}
« no previous file with comments | « source/i18n/uspoof.cpp ('k') | source/i18n/usrchimp.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698