1 Index: source/common/udata.cpp 2 =================================================================== 3 --- source/common/udata.cpp (revision 68397) 4 +++ source/common/udata.cpp (working copy) 5 @@ -610,7 +610,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 @@ -656,7 +656,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 @@ -675,7 +675,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 } 32 Index: 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; 57 Index: 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