user: Converte this assembly snippet into its equivalent C code:

```asm
<send_error>:
  endbr64
  sub    $0x8,%rsp
  lea    -0x80(%rdi),%eax
  cmp    $0xa,%eax
  ja     L83
  mov    %eax,%eax
  lea    D108(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D7(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
L80:
  add    $0x8,%rsp
  ret
  lea    D102(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D80(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D41(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D53(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D99(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D16(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D98(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D113(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D54(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
  lea    D66(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
L83:
  mov    %edi,%esi
  lea    D101(%rip),%rdi
  mov    $0x0,%eax
  call   <info_log@plt>
  jmp    L80
```

tool_calls: name: read_data
arguments: tag: D7
type_guessed: string
name: read_data
arguments: tag: D102
type_guessed: string
name: read_data
arguments: tag: D80
type_guessed: string
name: read_data
arguments: tag: D41
type_guessed: string
name: read_data
arguments: tag: D53
type_guessed: string
name: read_data
arguments: tag: D99
type_guessed: string
name: read_data
arguments: tag: D16
type_guessed: string
name: read_data
arguments: tag: D98
type_guessed: string
name: read_data
arguments: tag: D113
type_guessed: string
name: read_data
arguments: tag: D54
type_guessed: string
name: read_data
arguments: tag: D66
type_guessed: string
name: read_data
arguments: tag: D101
type_guessed: string

tool: D7: send error: EBADF (bad file descriptor)


tool: D102: send error: EAGAIN(would have blocked)


tool: D80: send error: ECONNRESET(connection reset by peer)


tool: D41: send error: EFAULT(invalid userspace address)


tool: D53: send error: EINTR(Interrupted by signal)


tool: D99: send error: EINVAL(Invalid arguement)


tool: D16: send error: EMSGSIZE(message size too big)


tool: D98: send error: ENOTSOCK:(not a socket)


tool: D113: send error: ENOTCONN:(socket not connected


tool: D54: send error: EOPNOTSUPP


tool: D66: send error: EPIPE


tool: D101: Send: (%i)unknown errror


assistant: ```c
void send_error(int err) {
  switch (err) {
  case EBADF: {
    info_log("send error: EBADF (bad file descriptor)\n");
    return;
  }
  case EAGAIN: {
    info_log("send error: EAGAIN(would have blocked)\n");
    return;
  }
  case ECONNRESET: {
    info_log("send error: ECONNRESET(connection reset by peer)\n");
    return;
  }
  case EFAULT: {
    info_log("send error: EFAULT(invalid userspace address)\n");
    return;
  }
  case EINTR: {
    info_log("send error: EINTR(Interrupted by signal)\n");
    return;
  }
  case EINVAL: {
    info_log("send error: EINVAL(Invalid arguement)\n");
    return;
  }
  case EMSGSIZE: {
    info_log("send error: EMSGSIZE(message size too big)\n");
    return;
  }
  case ENOTSOCK: {
    info_log("send error: ENOTSOCK:(not a socket)\n");
    return;
  }
  case ENOTCONN: {
    info_log("send error: ENOTCONN:(socket not connected\n");
    return;
  }
  case EOPNOTSUPP: {
    info_log("send error: EOPNOTSUPP\n");
    return;
  }
  case EPIPE: {
    info_log("send error: EPIPE\n");
    return;
  }
  default: {
    info_log("Send: (%i)unknown errror\n", err);
    return;
  }
  }
}
```