rem: for (ip = soap->iht[i]; ip; ip = ip->next) { register struct soap_flist *fp; for (fp = ip->flist; fp; fp = fp->next) if (fp->finsert) { unsigned int k = fp->level; void *p = ip->ptr; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded container data type=%d location=%p level=%u,%u\n", fp->type, fp->ptr, ip->level, fp->level)); while (ip->level < k) { void **q = (void**)soap_malloc(soap, sizeof(void*)); if (!q) return SOAP_EOM; *q = p; p = (void*)q; k--; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n")); } fp->finsert(soap, fp->type, fp->ptr, p); }
add: { for (ip = soap->iht[i]; ip; ip = ip->next) { if (ip->copy || ip->flist) { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution error: forwarded data for id='%s' could not be propagated, please report this problem to the developers\n", ip->id)); }
context: soap_resolve(struct soap *soap){ register int i;  register struct soap_ilist *ip;  short flag1 = 0, flag2;  for (i = 0; i < SOAP_IDHASH; i++)    for (ip = soap->iht[i]; ip; ip = ip->next)    { if (ip->ptr)        soap_resolve_ptr(ip);      else if (*ip->id == '#')        flag1 = 1;    }  do  { flag2 = 0;    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data\n"));    for (i = 0; i < SOAP_IDHASH; i++)      for (ip = soap->iht[i]; ip; ip = ip->next)        if (ip->copy && ip->ptr && ip->size)          if (!soap_has_copies(soap, (char*)ip->ptr, (char*)ip->ptr + ip->size))          { register void *p, **q = (void**)ip->copy;            DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing copy chain to resolve id='%s'\n", ip->id));            ip->copy = NULL;            do            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%u bytes)\n", ip->ptr, q, (unsigned int)ip->size));	      p = *q;              memcpy(q, ip->ptr, ip->size);              q = (void**)p;            } while (q);	    flag2 = 1;	  }  } while (flag2);  for (i = 0; i < SOAP_IDHASH; i++)    for (ip = soap->iht[i]; ip; ip = ip->next)    { register struct soap_flist *fp;      for (fp = ip->flist; fp; fp = fp->next)        if (fp->finsert)        { unsigned int k = fp->level;	  void *p = ip->ptr;          DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded container data type=%d location=%p level=%u,%u\n", fp->type, fp->ptr, ip->level, fp->level));	  while (ip->level < k)          { void **q = (void**)soap_malloc(soap, sizeof(void*));	    if (!q)	      return SOAP_EOM;	    *q = p;            p = (void*)q;            k--;            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));          }	  fp->finsert(soap, fp->type, fp->ptr, p);        }    }  if (flag1)    return soap->error = SOAP_MISSING_ID;  return SOAP_OK;}