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 2bc74c97..432a511e 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 NULL; } @@ -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 3f336612..88449b57 100644 --- a/source/stubdata/stubdata.cpp +++ b/source/stubdata/stubdata.cpp @@ -20,29 +20,33 @@ * */ -#include "stubdata.h" +#include "ucmndata.h" extern "C" U_EXPORT const ICU_Data_Header U_ICUDATA_ENTRY_POINT = { - 32, /* headerSize */ - 0xda, /* magic1, (see struct MappedData in udata.c) */ - 0x27, /* magic2 */ - { /*UDataInfo */ - sizeof(UDataInfo), /* size */ - 0, /* reserved */ + { /* 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(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 */ + 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 */ + }, }, {0,0,0,0,0,0,0,0}, /* Padding[8] */ 0, /* count */