| 178 | } |
| 179 | |
| 180 | void omtTestRealloc(omMemCell cell, unsigned long new_spec) |
| 181 | { |
| 182 | void* old_addr = cell->addr; |
| 183 | unsigned long old_spec = cell->spec; |
| 184 | omBin old_bin = cell->bin; |
| 185 | omBin old_orig_bin = cell->orig_bin; |
| 186 | size_t old_size = GET_SIZE(old_spec); |
| 187 | void* new_addr; |
| 188 | omBin new_bin = NULL; |
| 189 | omBin new_orig_bin = NULL; |
| 190 | size_t new_size = GET_SIZE(new_spec); |
| 191 | size_t real_old_size = omSizeOfAddr(old_addr); |
| 192 | size_t min_size; |
| 193 | |
| 194 | omtTestDebug(cell); |
| 195 | |
| 196 | if (old_bin != NULL && IS_FREE_BIN(old_spec) && |
| 197 | IS_BIN(new_spec) && ((new_size <= OM_MAX_BLOCK_SIZE) || IS_SPEC_BIN(new_spec))) |
| 198 | { |
| 199 | if (IS_SPEC_BIN(new_spec)) |
| 200 | { |
| 201 | if (IS_ALIGNED(new_spec)) |
| 202 | new_bin = omGetAlignedSpecBin(new_size); |
| 203 | else |
| 204 | new_bin = omGetSpecBin(new_size); |
| 205 | } |
| 206 | else |
| 207 | { |
| 208 | if (IS_ALIGNED(new_spec)) |
| 209 | new_bin = omSmallSize2AlignedBin(new_size); |
| 210 | else |
| 211 | new_bin = omSmallSize2Bin(new_size); |
| 212 | } |
| 213 | |
| 214 | if (IS_STICKY_BIN(new_spec)) |
| 215 | { |
| 216 | new_orig_bin = new_bin; |
| 217 | new_bin = omtGetStickyBin(new_bin); |
| 218 | } |
| 219 | |
| 220 | if (IS_INLINE(new_spec)) |
| 221 | { |
| 222 | if (IS_ZERO(new_spec)) new_addr = omRealloc0Bin(old_addr, old_bin, new_bin); |
| 223 | else new_addr = omReallocBin(old_addr, old_bin, new_bin); |
| 224 | } |
| 225 | else |
| 226 | { |
| 227 | if (IS_ZERO(new_spec)) omTypeRealloc0Bin(old_addr, old_bin, void*, new_addr, new_bin); |
| 228 | else omTypeReallocBin(old_addr, old_bin, void*, new_addr, new_bin); |
| 229 | } |
| 230 | } |
| 231 | else |
| 232 | { |
| 233 | if (IS_FREE_SIZE(old_spec)) |
| 234 | { |
| 235 | if (IS_INLINE(new_spec)) |
| 236 | { |
| 237 | if (IS_ZERO(new_spec)) |
no test coverage detected