| diff --git a/source/common/ucmndata.h b/source/common/ucmndata.h |
| index c3eba9f4..15c1a6c4 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 ec9c999c..07156da5 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 0fcab4fa..f2efd3c3 100644 |
| --- a/source/stubdata/stubdata.cpp |
| +++ b/source/stubdata/stubdata.cpp |
| @@ -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; |
| - |
| 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 */ |