user: Translate the below assembly code into C programming language:

```asm
<cceph_errno_str>:
  endbr64
  cmp    $0xfffffc18,%edi
  jge    L10
  lea    D56(%rip),%rax
  cmp    $0xfffffc0a,%edi
  jl     L11
  add    $0x3f5,%edi
  lea    D98(%rip),%rax
  cmp    $0xc,%edi
  ja     L11
  lea    D96(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  xchg   %ax,%ax
L10:
  test   %edi,%edi
  lea    D34(%rip),%rdx
  lea    D56(%rip),%rax
  cmove  %rdx,%rax
  ret
  nopl   (%rax)
  lea    D161(%rip),%rax
L11:
  ret
  lea    D50(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D69(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D12(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D109(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D41(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D54(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D141(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D112(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D11(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D178(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D103(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D43(%rip),%rax
  ret
```

tool_calls: name: read_data
arguments: tag: D56
type: string
name: read_data
arguments: tag: D98
type: string
name: read_data
arguments: tag: D34
type: string
name: read_data
arguments: tag: D161
type: string
name: read_data
arguments: tag: D50
type: string
name: read_data
arguments: tag: D69
type: string
name: read_data
arguments: tag: D12
type: string
name: read_data
arguments: tag: D109
type: string
name: read_data
arguments: tag: D41
type: string
name: read_data
arguments: tag: D54
type: string
name: read_data
arguments: tag: D141
type: string
name: read_data
arguments: tag: D112
type: string
name: read_data
arguments: tag: D11
type: string
name: read_data
arguments: tag: D178
type: string
name: read_data
arguments: tag: D103
type: string
name: read_data
arguments: tag: D43
type: string

tool: D56: UnknowError

tool: D98: UnknownOsOp

tool: D34: OK

tool: D161: ConnectionClosed

tool: D50: ConnectionNotFound

tool: D69: WriteConnectionError

tool: D12: NotEnoughServer

tool: D109: UnknownOp

tool: D41: MapNodeNotExist

tool: D54: MapNodeAlreadyExist

tool: D141: ObjectNotExist

tool: D112: ObjectAlreadyExist

tool: D11: CollectionNotExist

tool: D178: CollectionAlreadyExist

tool: D103: NoEnoughMemory

tool: D43: WrongClientID

assistant: ```c
const char *cceph_errno_str(int err_no) {
  switch (err_no) {
  case 0:
    return "OK";
  case (-1001):
    return "ConnectionNotFound";
  case (-1002):
    return "ConnectionClosed";
  case (-1003):
    return "WriteConnectionError";
  case (-1004):
    return "UnknownOp";
  case (-1005):
    return "NotEnoughServer";
  case (-1006):
    return "WrongClientID";
  case (-1007):
    return "NoEnoughMemory";
  case (-1008):
    return "CollectionAlreadyExist";
  case (-1009):
    return "CollectionNotExist";
  case (-1010):
    return "ObjectAlreadyExist";
  case (-1011):
    return "ObjectNotExist";
  case (-1012):
    return "MapNodeAlreadyExist";
  case (-1013):
    return "MapNodeNotExist";
  case (-1014):
    return "UnknownOsOp";
  }
  return "UnknowError";
}
```