rem: ip = soap_lookup(soap, soap->href);
add: ip = soap_lookup(soap, href);
context: soap_id_forward(struct soap *soap, const char *href, void *p, int t, size_t n){ struct soap_ilist *ip;  if (!p || !*href)    return p;  ip = soap_lookup(soap, soap->href); /* lookup pointer to hash table entry for string id */  if (!ip)  { if (n >= sizeof(void*))    { ip = soap_enter(soap, href); /* new hash table entry for string id */      ip->type = t;      ip->size = n;      ip->link = NULL;      ip->copy = p;      ip->flist = NULL;      *(void**)p = NULL;      ip->ptr = NULL;      ip->level = 0;      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding first copying address %p for type %d href='%s'\n", p, t, href));      return p;    }    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding problem: copying location %p too small (%u) for href='%s'\n", p, (unsigned int)n, href));    soap->error = SOAP_HREF;    return NULL;  }  else if (ip->ptr)  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying value from location %p to location %p to resolve href='%s'\n", ip->ptr, p, href));    memcpy(p, ip->ptr, n);  }  else if (n >= sizeof(void*))  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding copying address %p for type %d href='%s' (prev in chain = %p)\n", p, t, href, ip->copy));    *(void**)p = ip->copy;    ip->copy = p;    return p;  }  else  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding problem: copying location %p too small (%u) for href='%s'\n", p, (unsigned int)n, href));    soap->error = SOAP_HREF; /* href to object too small to hold pointer */    return NULL;  }  return ip->ptr;}