user: 这段汇编代码用C语言表示是什么样的？

```asm
<makeextralist>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  add    $0xa,%rax
  mov    $0x4,%esi
  mov    %rax,%rdi
  call   <calloc@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L103
  mov    $0x0,%eax
  jmp    L108
L103:
  mov    -0x10(%rbp),%rdx
  mov    -0x30(%rbp),%rcx
  mov    -0x8(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <mbstowcs@plt>
  cmp    $0xffffffffffffffff,%rax
  jne    L106
  movq   $0x0,-0x18(%rbp)
  jmp    L55
L59:
  mov    -0x30(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    -0x18(%rbp),%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  movsbl %al,%eax
  mov    %eax,(%rdx)
  addq   $0x1,-0x18(%rbp)
L55:
  mov    -0x18(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L59
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  jmp    L49
L106:
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <wcslen@plt>
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
L49:
  mov    -0x24(%rbp),%eax
  and    $0x1000,%eax
  test   %eax,%eax
  je     L46
  mov    -0x20(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movl   $0x2a,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movl   $0x3f,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movl   $0x5b,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movl   $0x23,(%rax)
L46:
  mov    -0x24(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L100
  mov    -0x20(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movl   $0x20,(%rax)
L100:
  mov    -0x24(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L99
  mov    -0x20(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movl   $0x9,(%rax)
L99:
  mov    -0x24(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L97
  mov    -0x20(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movl   $0xa,(%rax)
L97:
  mov    -0x24(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  jne    L6
  mov    -0x20(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movl   $0x5c,(%rax)
L6:
  mov    -0x20(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x8(%rbp),%rax
L108:
  leave
  ret
```

assistant: ```c
wchar_t *makeextralist(int flags, const char *src) {
  wchar_t *dst, *d;
  size_t len;
  len = strlen(src);
  if ((dst = calloc(len + 10, sizeof(*dst))) == NULL) {
    return NULL;
  }
  if (mbstowcs(dst, src, len) == (size_t)-1) {
    size_t i;
    for (i = 0; i < len; i++) {
      dst[i] = (wint_t)(u_char)src[i];
    }
    d = dst + len;
  } else {
    d = dst + wcslen(dst);
  }
  if (flags & 0x1000) {
    *d++ = L'*';
    *d++ = L'?';
    *d++ = L'[';
    *d++ = L'#';
  }
  if (flags & 0x0004) {
    *d++ = L' ';
  }
  if (flags & 0x0008) {
    *d++ = L'\t';
  }
  if (flags & 0x0010) {
    *d++ = L'\n';
  }
  if ((flags & 0x0040) == 0) {
    *d++ = L'\\';
  }
  *d = L'\0';
  return dst;
}
```