1Index: source/common/udata.cpp 2=================================================================== 3--- source/common/udata.cpp (revision 259715) 4+++ source/common/udata.cpp (working copy) 5@@ -621,7 +621,7 @@ 6 * our common data. * 7 * * 8 *----------------------------------------------------------------------*/ 9-extern "C" const DataHeader U_DATA_API U_ICUDATA_ENTRY_POINT; 10+extern "C" const ICU_Data_Header U_DATA_API U_ICUDATA_ENTRY_POINT; 11 12 /* 13 * This would be a good place for weak-linkage declarations of 14@@ -667,7 +667,7 @@ 15 if(gCommonICUDataArray[commonDataIndex] == NULL) { 16 int32_t i; 17 for(i = 0; i < commonDataIndex; ++i) { 18- if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT) { 19+ if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT.hdr) { 20 /* The linked-in data is already in the list. */ 21 return NULL; 22 } 23@@ -686,7 +686,7 @@ 24 setCommonICUDataPointer(uprv_getICUData_conversion(), FALSE, pErrorCode); 25 } 26 */ 27- setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT, FALSE, pErrorCode); 28+ setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT.hdr, FALSE, pErrorCode); 29 } 30 return gCommonICUDataArray[commonDataIndex]; 31 } 32Index: source/common/ucmndata.h 33=================================================================== 34--- source/common/ucmndata.h (revision 68397) 35+++ source/common/ucmndata.h (working copy) 36@@ -44,6 +44,20 @@ 37 } DataHeader; 38 39 typedef struct { 40+ DataHeader hdr; 41+ char padding[8]; 42+ uint32_t count, reserved; 43+ /* 44+ const struct { 45+ const char *const name; 46+ const void *const data; 47+ } toc[1]; 48+ */ 49+ int fakeNameAndData[4]; /* TODO: Change this header type from */ 50+ /* pointerTOC to OffsetTOC. */ 51+} ICU_Data_Header; 52+ 53+typedef struct { 54 uint32_t nameOffset; 55 uint32_t dataOffset; 56 } UDataOffsetTOCEntry; 57Index: source/stubdata/stubdata.c 58=================================================================== 59--- source/stubdata/stubdata.c (revision 68397) 60+++ source/stubdata/stubdata.c (working copy) 61@@ -20,45 +20,34 @@ 62 #include "unicode/utypes.h" 63 #include "unicode/udata.h" 64 #include "unicode/uversion.h" 65+#include "ucmndata.h" 66 67 68-typedef struct { 69- uint16_t headerSize; 70- uint8_t magic1, magic2; 71- UDataInfo info; 72- char padding[8]; 73- uint32_t count, reserved; 74- /* 75- const struct { 76- const char *const name; 77- const void *const data; 78- } toc[1]; 79- */ 80- int fakeNameAndData[4]; /* TODO: Change this header type from */ 81- /* pointerTOC to OffsetTOC. */ 82-} ICU_Data_Header; 83- 84 U_EXPORT const ICU_Data_Header U_ICUDATA_ENTRY_POINT = { 85- 32, /* headerSize */ 86- 0xda, /* magic1, (see struct MappedData in udata.c) */ 87- 0x27, /* magic2 */ 88- { /*UDataInfo */ 89- sizeof(UDataInfo), /* size */ 90- 0, /* reserved */ 91+ { /* DataHeader */ 92+ { /* MappedData */ 93+ 32, /* headerSize */ 94+ 0xda, /* magic1, (see struct MappedData in udata.c) */ 95+ 0x27, /* magic2 */ 96+ }, 97+ { /*UDataInfo */ 98+ sizeof(UDataInfo), /* size */ 99+ 0, /* reserved */ 100 101 #if U_IS_BIG_ENDIAN 102- 1, 103+ 1, 104 #else 105- 0, 106+ 0, 107 #endif 108 109- U_CHARSET_FAMILY, 110- sizeof(UChar), 111- 0, /* reserved */ 112- { /* data format identifier */ 113- 0x54, 0x6f, 0x43, 0x50}, /* "ToCP" */ 114- {1, 0, 0, 0}, /* format version major, minor, milli, micro */ 115- {0, 0, 0, 0} /* dataVersion */ 116+ U_CHARSET_FAMILY, 117+ sizeof(UChar), 118+ 0, /* reserved */ 119+ { /* data format identifier */ 120+ 0x54, 0x6f, 0x43, 0x50}, /* "ToCP" */ 121+ {1, 0, 0, 0}, /* format version major, minor, milli, micro */ 122+ {0, 0, 0, 0} /* dataVersion */ 123+ }, 124 }, 125 {0,0,0,0,0,0,0,0}, /* Padding[8] */ 126 0, /* count */ 127