// File: /workspace/github_c_makefile_star2_O0/loversmile[P]sugarcrm/sugar_stdsoap2.c
// Function: soap_end_recv
SOAP_FMAC2
soap_end_recv(struct soap *soap)
{ soap->part = SOAP_END;
#ifndef WITH_LEANER
  if ((soap->mode & SOAP_ENC_DIME) && soap_getdime(soap))
  { soap->dime.first = NULL;
    soap->dime.last = NULL;
    return soap->error;
  }
  soap->dime.list = soap->dime.first;
  soap->dime.first = NULL;
  soap->dime.last = NULL;
  /* Check if MIME attachments and mime-post-check flag is set, if set call soap_resolve() and return */
  if (soap->mode & SOAP_ENC_MIME)
  { 
#ifndef WITH_NOIDREF
    if (soap->mode & SOAP_MIME_POSTCHECK)
    { soap_resolve(soap);
      return SOAP_OK;
    }
#endif
    if (soap_getmime(soap))
      return soap->error;
  }
  soap->mime.list = soap->mime.first;
  soap->mime.first = NULL;
  soap->mime.last = NULL;
  soap->mime.boundary = NULL;
  if (soap->xlist)
  { struct soap_multipart *content;
    for (content = soap->mime.list; content; content = content->next)
      soap_resolve_attachment(soap, content);
  }
#endif
  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "End of receive message ok\n"));
#ifdef WITH_ZLIB
  if (soap->mode & SOAP_ENC_ZLIB)
  { /* Make sure end of compressed content is reached */
    while (soap->d_stream->next_out != Z_NULL)
      if ((int)soap_get1(soap) == EOF)
        break;
    soap->mode &= ~SOAP_ENC_ZLIB;
    memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
    soap->bufidx = (char*)soap->d_stream->next_in - soap->z_buf;
    soap->buflen = soap->z_buflen;
    soap->zlib_state = SOAP_ZLIB_NONE;
    if (inflateEnd(soap->d_stream) != Z_OK)
      return soap->error = SOAP_ZLIB_ERROR;
    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Inflate end ok\n"));
#ifdef WITH_GZIP
    if (soap->zlib_in == SOAP_ZLIB_GZIP)
    { soap_wchar c;
      short i;
      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Inflate gzip crc check\n"));
      for (i = 0; i < 8; i++)
      { if ((int)(c = soap_get1(soap)) == EOF)
          return soap->error = SOAP_EOF;
        soap->z_buf[i] = (char)c;
      }
      if (soap->z_crc != ((uLong)(unsigned char)soap->z_buf[0] | ((uLong)(unsigned char)soap->z_buf[1] << 8) | ((uLong)(unsigned char)soap->z_buf[2] << 16) | ((uLong)(unsigned char)soap->z_buf[3] << 24)))
      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: crc check failed, message corrupted? (crc32=%lu)\n", (unsigned long)soap->z_crc));
        return soap->error = SOAP_ZLIB_ERROR;
      }
      if (soap->d_stream->total_out != ((uLong)(unsigned char)soap->z_buf[4] | ((uLong)(unsigned char)soap->z_buf[5] << 8) | ((uLong)(unsigned char)soap->z_buf[6] << 16) | ((uLong)(unsigned char)soap->z_buf[7] << 24)))
      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: incorrect message length\n"));
        return soap->error = SOAP_ZLIB_ERROR;
      }
    }
    soap->zlib_in = SOAP_ZLIB_NONE;
#endif
  }
#endif
  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
    while ((int)soap_getchar(soap) != EOF) /* advance to last chunk */
      ;
#ifndef WITH_NOIDREF
  if (soap_resolve(soap))
    return soap->error;
#endif
#ifndef WITH_LEANER
  if (soap->xlist)
  { if (soap->mode & SOAP_ENC_MTOM)
      return soap->error = SOAP_MIME_HREF;
    return soap->error = SOAP_DIME_HREF;
  }
#endif
  if (soap->fdisconnect && (soap->error = soap->fdisconnect(soap)))
    return soap->error;
  soap_free_ns(soap);
  return SOAP_OK;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movw $0x9, 0x18590(%rax)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x80, %eax
cmpl $0x0, %eax
je 0x5d8d8
movq -0x10(%rbp), %rdi
callq 0x5dad0
cmpl $0x0, %eax
je 0x5d8d8
movq -0x10(%rbp), %rax
movq $0x0, 0x19278(%rax)
movq -0x10(%rbp), %rax
movq $0x0, 0x19280(%rax)
movq -0x10(%rbp), %rax
movl 0x19214(%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x5dac5
movq -0x10(%rbp), %rax
movq 0x19278(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x19270(%rax)
movq -0x10(%rbp), %rax
movq $0x0, 0x19278(%rax)
movq -0x10(%rbp), %rax
movq $0x0, 0x19280(%rax)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x100, %eax            # imm = 0x100
cmpl $0x0, %eax
je 0x5d965
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x10000000, %eax       # imm = 0x10000000
cmpl $0x0, %eax
je 0x5d943
movq -0x10(%rbp), %rdi
callq 0x53ac0
movl $0x0, -0x4(%rbp)
jmp 0x5dac5
movq -0x10(%rbp), %rdi
callq 0x5e1b0
cmpl $0x0, %eax
je 0x5d963
movq -0x10(%rbp), %rax
movl 0x19214(%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x5dac5
jmp 0x5d965
movq -0x10(%rbp), %rax
movq 0x192a0(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x19298(%rax)
movq -0x10(%rbp), %rax
movq $0x0, 0x192a0(%rax)
movq -0x10(%rbp), %rax
movq $0x0, 0x192a8(%rax)
movq -0x10(%rbp), %rax
movq $0x0, 0x19288(%rax)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x192b0(%rax)
je 0x5d9e8
movq -0x10(%rbp), %rax
movq 0x19298(%rax), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x5d9e6
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5e1f0
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x5d9c5
jmp 0x5d9e8
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x3, %eax
cmpl $0x3, %eax
jne 0x5da0b
jmp 0x5d9f9
movq -0x10(%rbp), %rdi
callq 0x4fdb0
cmpl $-0x1, %eax
je 0x5da09
jmp 0x5d9f9
jmp 0x5da0b
movq -0x10(%rbp), %rdi
callq 0x53ac0
cmpl $0x0, %eax
je 0x5da2b
movq -0x10(%rbp), %rax
movl 0x19214(%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x5dac5
movq -0x10(%rbp), %rax
cmpq $0x0, 0x192b0(%rax)
je 0x5da78
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x200, %eax            # imm = 0x200
cmpl $0x0, %eax
je 0x5da61
movq -0x10(%rbp), %rax
movl $0x25, 0x19214(%rax)
movl $0x25, -0x4(%rbp)
jmp 0x5dac5
movq -0x10(%rbp), %rax
movl $0x21, 0x19214(%rax)
movl $0x21, -0x4(%rbp)
jmp 0x5dac5
movq -0x10(%rbp), %rax
cmpq $0x0, 0x5fd0(%rax)
je 0x5dab5
movq -0x10(%rbp), %rax
movq 0x5fd0(%rax), %rax
movq -0x10(%rbp), %rdi
callq *%rax
movq -0x10(%rbp), %rcx
movl %eax, 0x19214(%rcx)
cmpl $0x0, %eax
je 0x5dab5
movq -0x10(%rbp), %rax
movl 0x19214(%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x5dac5
movq -0x10(%rbp), %rdi
callq 0x5ad20
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nop