diff --git a/source/common/ucmndata.h b/source/common/ucmndata.h index 486b4fd7..1e63833f 100644 --- a/source/common/ucmndata.h +++ b/source/common/ucmndata.h @@ -45,6 +45,20 @@ typedef struct { UDataInfo info; } DataHeader; +typedef struct { + DataHeader hdr; + char padding[8]; + uint32_t count, reserved; + /* + const struct { + const char *const name; + const void *const data; + } toc[1]; + */ + int fakeNameAndData[4]; /* TODO: Change this header type from */ + /* pointerTOC to OffsetTOC. */ +} ICU_Data_Header; + typedef struct { uint32_t nameOffset; uint32_t dataOffset; diff --git a/source/common/udata.cpp b/source/common/udata.cpp index 88126fc6..93458444 100644 --- a/source/common/udata.cpp +++ b/source/common/udata.cpp @@ -643,7 +643,7 @@ U_NAMESPACE_END *----------------------------------------------------------------------*/ #if !defined(ICU_DATA_DIR_WINDOWS) // When using the Windows system data, we expect only a single data file. -extern "C" const DataHeader U_DATA_API U_ICUDATA_ENTRY_POINT; +extern "C" const ICU_Data_Header U_DATA_API U_ICUDATA_ENTRY_POINT; #endif /* @@ -696,7 +696,7 @@ openCommonData(const char *path, /* Path from OpenChoice? */ // When using the Windows system data, we expect only a single data file. int32_t i; for(i = 0; i < commonDataIndex; ++i) { - if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT) { + if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT.hdr) { /* The linked-in data is already in the list. */ return nullptr; } @@ -719,7 +719,7 @@ openCommonData(const char *path, /* Path from OpenChoice? */ */ #if !defined(ICU_DATA_DIR_WINDOWS) // When using the Windows system data, we expect only a single data file. - setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT, false, pErrorCode); + setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT.hdr, false, pErrorCode); { Mutex lock; return gCommonICUDataArray[commonDataIndex]; diff --git a/source/stubdata/stubdata.cpp b/source/stubdata/stubdata.cpp index 0fa2b170..32ceb185 100644 --- a/source/stubdata/stubdata.cpp +++ b/source/stubdata/stubdata.cpp @@ -1,3 +1,4 @@ + // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** @@ -17,36 +18,40 @@ * * The stub data library (for which this file is the source) is sufficient * for running the data building tools. +* */ - -#include "stubdata.h" - -extern "C" U_EXPORT const ICU_Data_Header U_ICUDATA_ENTRY_POINT alignas(16) = { - 32, /* headerSize */ - 0xda, /* magic1, (see struct MappedData in udata.c) */ - 0x27, /* magic2 */ - { /*UDataInfo */ - sizeof(UDataInfo), /* size */ - 0, /* reserved */ - +#include "ucmndata.h" +extern "C" U_EXPORT const ICU_Data_Header U_ICUDATA_ENTRY_POINT = { + { /* DataHeader */ + { /* MappedData */ + 32, /* headerSize */ + 0xda, /* magic1, (see struct MappedData in udata.c) */ + 0x27, /* magic2 */ + }, + { /*UDataInfo */ + sizeof(UDataInfo), /* size */ + 0, /* reserved */ #if U_IS_BIG_ENDIAN - 1, + 1, #else - 0, + 0, #endif - - U_CHARSET_FAMILY, - sizeof(char16_t), - 0, /* reserved */ - {0x54, 0x6f, 0x43, 0x50}, /* data format identifier: "ToCP" */ - {1, 0, 0, 0}, /* format version major, minor, milli, micro */ - {0, 0, 0, 0} /* dataVersion */ + U_CHARSET_FAMILY, + sizeof(UChar), + 0, /* reserved */ + { /* data format identifier */ + 0x54, 0x6f, 0x43, 0x50}, /* "ToCP" */ + {1, 0, 0, 0}, /* format version major, minor, milli, micro */ + {0, 0, 0, 0} /* dataVersion */ + }, }, - { 's', 't', 'u', 'b', 'd', 'a', 't', 'a' }, /* Padding[8] */ + {0,0,0,0,0,0,0,0}, /* Padding[8] */ 0, /* count */ 0, /* Reserved */ { /* TOC structure */ - 0 , 0 /* name and data entries. Count says there are none, */ +/* { */ + 0 , 0 , 0, 0 /* name and data entries. Count says there are none, */ /* but put one in just in case. */ +/* } */ } -}; +}; \ No newline at end of file