- return (addr_pointed1 != addr_pointed2);;
- } else {
- pointer_level++;
- if (pointer_level > 1) { /* Array of pointers */
- for (size_t i = 0; i < (area_size / sizeof(void *)); i++) {
- addr_pointed1 = snapshot1->read(
- remote((void**)((char*) real_area1 + i * sizeof(void *))),
- process_index);
- addr_pointed2 = snapshot2->read(
- remote((void**)((char*) real_area2 + i * sizeof(void *))),
- process_index);
- if (addr_pointed1 > state->std_heap_copy.heapbase
- && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1)
- && addr_pointed2 > state->std_heap_copy.heapbase
- && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2))
- res =
- compare_heap_area(process_index, addr_pointed1, addr_pointed2, snapshot1,
- snapshot2, previous, type->subtype,
- pointer_level);
- else
- res = (addr_pointed1 != addr_pointed2);
- if (res == 1)
- return res;
- }
- } else {
- addr_pointed1 = snapshot1->read(remote((void**)real_area1), process_index);
- addr_pointed2 = snapshot2->read(remote((void**)real_area2), process_index);
- if (addr_pointed1 > state->std_heap_copy.heapbase
- && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1)
- && addr_pointed2 > state->std_heap_copy.heapbase
- && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2))
- return compare_heap_area(process_index, addr_pointed1, addr_pointed2, snapshot1,
- snapshot2, previous, type->subtype,
- pointer_level);
- else
- return (addr_pointed1 != addr_pointed2);
- }