user: 请将以下的汇编代码转换成C语言代码:

```asm
<cceph_errno_str>:
  endbr64
  cmp    $0xfffffc18,%edi
  jge    L27
  lea    D141(%rip),%rax
  cmp    $0xfffffc0a,%edi
  jl     L16
  add    $0x3f6,%edi
  cmp    $0xd,%edi
  ja     L25
  mov    %edi,%edi
  lea    D78(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D140(%rip),%rax
  ret
L25:
  lea    D141(%rip),%rax
  ret
L27:
  test   %edi,%edi
  lea    D141(%rip),%rax
  lea    D138(%rip),%rdx
  cmove  %rdx,%rax
  ret
  lea    D21(%rip),%rax
  ret
  lea    D25(%rip),%rax
  ret
  lea    D158(%rip),%rax
  ret
  lea    D49(%rip),%rax
  ret
  lea    D10(%rip),%rax
  ret
  lea    D54(%rip),%rax
  ret
  lea    D115(%rip),%rax
  ret
  lea    D99(%rip),%rax
  ret
  lea    D185(%rip),%rax
  ret
  lea    D164(%rip),%rax
  ret
  lea    D151(%rip),%rax
  ret
  lea    D32(%rip),%rax
  ret
  lea    D53(%rip),%rax
L16:
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D141
type_guessed: string
name: extract_symbolic_data
arguments: label: D140
type_guessed: string
name: extract_symbolic_data
arguments: label: D138
type_guessed: string
name: extract_symbolic_data
arguments: label: D21
type_guessed: string
name: extract_symbolic_data
arguments: label: D25
type_guessed: string
name: extract_symbolic_data
arguments: label: D158
type_guessed: string
name: extract_symbolic_data
arguments: label: D49
type_guessed: string
name: extract_symbolic_data
arguments: label: D10
type_guessed: string
name: extract_symbolic_data
arguments: label: D54
type_guessed: string
name: extract_symbolic_data
arguments: label: D115
type_guessed: string
name: extract_symbolic_data
arguments: label: D99
type_guessed: string
name: extract_symbolic_data
arguments: label: D185
type_guessed: string
name: extract_symbolic_data
arguments: label: D164
type_guessed: string
name: extract_symbolic_data
arguments: label: D151
type_guessed: string
name: extract_symbolic_data
arguments: label: D32
type_guessed: string
name: extract_symbolic_data
arguments: label: D53
type_guessed: string

tool: D141: UnknowError

tool: D140: ConnectionNotFound

tool: D138: OK

tool: D21: WriteConnectionError

tool: D25: UnknownOp

tool: D158: NotEnoughServer

tool: D49: WrongClientID

tool: D10: NoEnoughMemory

tool: D54: CollectionAlreadyExist

tool: D115: CollectionNotExist

tool: D99: ObjectAlreadyExist

tool: D185: ObjectNotExist

tool: D164: MapNodeAlreadyExist

tool: D151: MapNodeNotExist

tool: D32: UnknownOsOp

tool: D53: ConnectionClosed

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";
}
```