rem: np->next = soap->nlist; soap->nlist = np;
context: soap_push_namespace(struct soap *soap, const char *id, const char *ns){ register struct soap_nlist *np;  register struct Namespace *p;  np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + strlen(id));  if (!np)    return soap->error = SOAP_EOM;  np->next = soap->nlist;  soap->nlist = np;  strcpy(np->id, id);  np->level = soap->level;  np->index = -1;  np->ns = NULL;  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push namespace binding (level=%u) '%s' '%s'\n", soap->level, id, ns));  p = soap->local_namespaces;  if (p)  { register short i = 0;    for (; p->id; p++, i++)    { if (p->ns && !strcmp(ns, p->ns))      { if (p->out)        { SOAP_FREE(soap, p->out);          p->out = NULL;        }        break;      }      if (p->out)      { if (!SOAP_STRCMP(ns, p->out))          break;      }      else if (p->in)      { if (!soap_tag_cmp(ns, p->in))        { if ((p->out = (char*)SOAP_MALLOC(soap, strlen(ns) + 1)))            strcpy(p->out, ns);          break;        }      }    }    if (p && p->id)    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push OK ('%s' matches '%s' in namespace table)\n", id, p->id));      np->index = i;    }  }  if (!p || !p->id)  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push NOT OK: no match found for '%s' in namespace mapping table (added to stack anyway)\n", ns));    np->ns = (char*)SOAP_MALLOC(soap, strlen(ns) + 1);    if (!np->ns)      return soap->error = SOAP_EOM;    strcpy(np->ns, ns);  }  return SOAP_OK;}