diff --git a/source/common/ucmndata.h b/source/common/ucmndata.h index 9e87fad..206ddbf 100644 --- a/source/common/ucmndata.h +++ b/source/common/ucmndata.h @@ -46,6 +46,20 @@ typedef struct { } 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; } UDataOffsetTOCEntry; diff --git a/source/common/udata.cpp b/source/common/udata.cpp index ec72a0c..9460746 100644 --- a/source/common/udata.cpp +++ b/source/common/udata.cpp @@ -624,7 +624,7 @@ U_NAMESPACE_END * our common data. * * * *----------------------------------------------------------------------*/ -extern "C" const DataHeader U_DATA_API U_ICUDATA_ENTRY_POINT; +extern "C" const ICU_Data_Header U_DATA_API U_ICUDATA_ENTRY_POINT; /* * This would be a good place for weak-linkage declarations of @@ -674,7 +674,7 @@ openCommonData(const char *path, /* Path from OpenChoice? */ } 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; } @@ -694,7 +694,7 @@ openCommonData(const char *path, /* Path from OpenChoice? */ setCommonICUDataPointer(uprv_getICUData_conversion(), FALSE, pErrorCode); } */ - 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.c b/source/stubdata/stubdata.c index 6493ac4..ba644b2 100644 --- a/source/stubdata/stubdata.c +++ b/source/stubdata/stubdata.c @@ -22,45 +22,34 @@ #include "unicode/utypes.h" #include "unicode/udata.h" #include "unicode/uversion.h" +#include "ucmndata.h" -typedef struct { - uint16_t headerSize; - uint8_t magic1, magic2; - UDataInfo info; - 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; - 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 */