user: What is the c source code of the assembly code below?

```asm
<_nss_dnspq_gethostbyname3_r>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,(%rsp)
  mov    %rdx,0x18(%rsp)
  mov    %rcx,0x10(%rsp)
  mov    %r8,0x8(%rsp)
  mov    %r9,%rbp
  mov    0x80(%rsp),%r12
  mov    0x88(%rsp),%r15
  mov    0x90(%rsp),%r14
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  movq   $0x0,0x30(%rsp)
  mov    D31(%rip),%rax
  cmp    %esi,(%rax)
  je     L26
L64:
  mov    D10(%rip),%rax
  mov    (%rax),%eax
  mov    %eax,0x0(%rbp)
  mov    D20(%rip),%rax
  mov    (%rax),%eax
  mov    %eax,(%r12)
  mov    D44(%rip),%rax
  mov    (%rax),%eax
L38:
  mov    0x38(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L62
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L26:
  mov    %esi,%ebx
  call   <strlen@plt>
  mov    %rax,%r13
  test   %rax,%rax
  je     L64
  lea    0x1d(%rax),%rax
  cmp    0x8(%rsp),%rax
  ja     L64
  lea    0x30(%rsp),%rdi
  mov    (%rsp),%rsi
  call   <get_dnss_for_domain@plt>
  test   %rax,%rax
  je     L64
  lea    0x2c(%rsp),%rcx
  lea    0x2b(%rsp),%r8
  mov    0x10(%rsp),%rdx
  mov    (%rsp),%rsi
  mov    0x30(%rsp),%rdi
  call   <dnsq@plt>
  test   %rax,%rax
  jne    L64
  mov    0x18(%rsp),%rax
  mov    %ebx,(%rax)
  mov    %rax,%rbx
  movl   $0x4,0x4(%rax)
  mov    0x10(%rsp),%rsi
  lea    0x20(%rsi),%rax
  mov    %rax,0x8(%rbx)
  mov    %rsi,0x20(%rsi)
  mov    0x8(%rbx),%rax
  movq   $0x0,0x8(%rax)
  mov    0x8(%rbx),%rax
  lea    0x10(%rax),%rdx
  mov    %rdx,0x10(%rbx)
  movq   $0x0,0x10(%rax)
  mov    %rbx,%rax
  mov    0x10(%rbx),%rbx
  mov    %rbx,0x8(%rsp)
  lea    0x8(%rbx),%rdi
  mov    %rdi,0x18(%rax)
  lea    0x1(%r13),%rdx
  mov    (%rsp),%rsi
  call   <memcpy@plt>
  test   %r15,%r15
  je     L34
  mov    0x2c(%rsp),%eax
  mov    %rax,(%r15)
L34:
  test   %r14,%r14
  je     L83
  mov    0x18(%rsp),%rax
  mov    0x18(%rax),%rax
  mov    %rax,(%r14)
L83:
  movl   $0x0,0x0(%rbp)
  movl   $0x0,(%r12)
  mov    D14(%rip),%rax
  mov    (%rax),%eax
  jmp    L38
L62:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
enum nss_status _nss_dnspq_gethostbyname3_r(const char *name, int af, struct hostent *host, char *buf, size_t buflen, int *errnop, int *h_errnop, int32_t *ttlp, char **canonp) {
  unsigned int ttl;
  char sid;
  struct sockaddr_in **dnsservers = NULL;
  size_t nlen = 0;
  if (af == AF_INET && (nlen = strlen(name)) > 0 && buflen >= nlen + 1 + 2 * sizeof(void *) + sizeof(struct in_addr) + sizeof(void *) && get_dnss_for_domain(&dnsservers, name) && dnsq(dnsservers, name, (struct in_addr *)buf, &ttl, &sid) == 0) {
    host->h_addrtype = af;
    host->h_length = sizeof(struct in_addr);
    host->h_addr_list = (char **)buf + sizeof(struct in_addr);
    host->h_addr_list[0] = buf;
    host->h_addr_list[1] = NULL;
    host->h_aliases = (char **)&host->h_addr_list[2];
    host->h_aliases[0] = NULL;
    host->h_name = (char *)&host->h_aliases[1];
    memcpy(host->h_name, name, nlen + 1);
    if (ttlp != NULL)
      *ttlp = (int32_t)ttl;
    if (canonp != NULL)
      *canonp = host->h_name;
    *errnop = 0;
    *h_errnop = 0;
    return NSS_STATUS_SUCCESS;
  }
  *errnop = EINVAL;
  *h_errnop = NO_RECOVERY;
  return NSS_STATUS_UNAVAIL;
}
```