rem: { *s++ = (wchar)'&';
add: { *s++ = (soap_wchar)'&';
context: soap_wstring_in(struct soap *soap, int flag){ wchar_t *s;  register int i, n = 0;  register wchar c;  const char *t = NULL;  if (soap_new_block(soap))    return NULL;  for (;;)  { if (!(s = (wchar_t*)soap_push_block(soap, sizeof(wchar_t)*SOAP_BLKLEN)))      return NULL;    for (i = 0; i < SOAP_BLKLEN; i++)    { if (t)      { *s++ = (wchar_t)*t++;        if (!*t)          t = NULL;        continue;      }      if (soap->mode & SOAP_C_LATIN)        c = soap_get(soap);      else        c = soap_getutf8(soap);      switch (c)      {      case TT:        if (n == 0)          goto end;        n--;        *s++ = '<';        soap_unget(soap, '/');        break;      case LT:        n++;        *s++ = '<';        break;      case GT:        *s++ = '>';        break;      case QT:        *s++ = '"';        break;      case AP:        *s++ = '\'';        break;      case '/':        if (n > 0)        { c = soap_getutf8(soap);          if (c == GT)            n--;          soap_unget(soap, c);        }        *s++ = '/';        break;      case '<':        if (flag)          *s++ = (wchar)'<';        else        { *s++ = (wchar)'&';          t = "lt;";        }        break;      case '>':        if (flag)          *s++ = (wchar)'>';        else        { *s++ = (wchar)'&';          t = "gt;";        }        break;      case '"':        if (flag)          *s++ = (wchar)'"';        else        { *s++ = (wchar)'&';          t = "quot;";        }        break;      default:        if ((int)c == EOF)          goto end;        *s++ = (wchar_t)c & 0x7FFFFFFF;      }    }  }end:  soap_unget(soap, c);  *s = '\0';  soap_size_block(soap, sizeof(wchar_t) * (i + 1));  return (wchar_t*)soap_save_block(soap, NULL);}