rem: soap_update_ptrs(soap, q, q + n, (long)s - (long)q);
add: if (flag) soap_update_ptrs(soap, q, q + n, (long)s - (long)q);
context: soap_save_block(struct soap *soap, char *p){ register size_t n;  register char *q, *s;  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Save all blocks in contiguous memory space of %u bytes (%p->%p)\n", (unsigned int)soap->blist->size, soap->blist->ptr, p));  if (soap->blist->size)  { if (!p)      p = (char*)soap_malloc(soap, soap->blist->size);    if (p)      for (s = p, q = soap_first_block(soap); q; q = soap_next_block(soap))      { n = soap_block_size(soap);        soap_update_ptrs(soap, q, q + n, (long)s - (long)q); /* pointers s and q may or may not be related */        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy %u bytes from %p to %p\n", (unsigned int)n, q, s));        memcpy(s, q, n);        s += n;      }    else      soap->error = SOAP_EOM;  }  soap_end_block(soap);  return p;}