| 1098 | } |
| 1099 | |
| 1100 | void bFile::resolvePointersMismatch() |
| 1101 | { |
| 1102 | // printf("resolvePointersStructMismatch\n"); |
| 1103 | |
| 1104 | int i; |
| 1105 | |
| 1106 | for (i = 0; i < m_pointerFixupArray.size(); i++) |
| 1107 | { |
| 1108 | char *cur = m_pointerFixupArray.at(i); |
| 1109 | void **ptrptr = (void **)cur; |
| 1110 | void *ptr = *ptrptr; |
| 1111 | ptr = findLibPointer(ptr); |
| 1112 | if (ptr) |
| 1113 | { |
| 1114 | //printf("Fixup pointer!\n"); |
| 1115 | *(ptrptr) = ptr; |
| 1116 | } |
| 1117 | else |
| 1118 | { |
| 1119 | // printf("pointer not found: %x\n",cur); |
| 1120 | } |
| 1121 | } |
| 1122 | |
| 1123 | for (i = 0; i < m_pointerPtrFixupArray.size(); i++) |
| 1124 | { |
| 1125 | char *cur = m_pointerPtrFixupArray.at(i); |
| 1126 | void **ptrptr = (void **)cur; |
| 1127 | |
| 1128 | bChunkInd *block = m_chunkPtrPtrMap.find(*ptrptr); |
| 1129 | if (block) |
| 1130 | { |
| 1131 | int ptrMem = mMemoryDNA->getPointerSize(); |
| 1132 | int ptrFile = mFileDNA->getPointerSize(); |
| 1133 | |
| 1134 | int blockLen = block->len / ptrFile; |
| 1135 | |
| 1136 | void *onptr = findLibPointer(*ptrptr); |
| 1137 | if (onptr) |
| 1138 | { |
| 1139 | char *newPtr = new char[blockLen * ptrMem]; |
| 1140 | addDataBlock(newPtr); |
| 1141 | memset(newPtr, 0, blockLen * ptrMem); |
| 1142 | |
| 1143 | void **onarray = (void **)onptr; |
| 1144 | char *oldPtr = (char *)onarray; |
| 1145 | |
| 1146 | int p = 0; |
| 1147 | while (blockLen-- > 0) |
| 1148 | { |
| 1149 | btPointerUid dp = {{0}}; |
| 1150 | safeSwapPtr((char *)dp.m_uniqueIds, oldPtr); |
| 1151 | |
| 1152 | void **tptr = (void **)(newPtr + p * ptrMem); |
| 1153 | *tptr = findLibPointer(dp.m_ptr); |
| 1154 | |
| 1155 | oldPtr += ptrFile; |
| 1156 | ++p; |
| 1157 | } |
nothing calls this directly
no test coverage detected