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

```asm
<explodegophermapline>:
  endbr64
  push   %rbx
  sub    $0x20,%rsp
  mov    %rsi,%rax
  mov    %rcx,%rsi
  mov    %fs:0x28,%rcx
  mov    %rcx,0x18(%rsp)
  xor    %ecx,%ecx
  movb   $0x0,(%rax)
  movb   $0x0,(%rdx)
  movb   $0x0,(%rsi)
  movb   $0x0,(%r8)
  movq   $0x0,(%r9)
  movzbl (%rdi),%ecx
  test   %cl,%cl
  je     L17
  mov    %r9,%rbx
  mov    %cl,(%rax)
  lea    0x1(%rdi),%rax
  add    $0x400,%rdi
L196:
  movzbl (%rax),%ecx
  cmp    $0x9,%cl
  je     L140
  test   %cl,%cl
  je     L63
  mov    %cl,(%rdx)
  movb   $0x0,0x1(%rdx)
  add    $0x1,%rax
  add    $0x1,%rdx
  cmp    %rdi,%rax
  jne    L196
  mov    $0xffffffff,%eax
  jmp    L237
L17:
  movb   $0x69,(%rax)
  mov    $0x0,%eax
L237:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L207
  add    $0x20,%rsp
  pop    %rbx
  ret
L140:
  lea    0x1(%rax),%rcx
  mov    %rsi,%rdx
  add    $0x400,%rax
L123:
  movzbl (%rcx),%esi
  cmp    $0x9,%sil
  je     L81
  test   %sil,%sil
  je     L188
  mov    %sil,(%rdx)
  movb   $0x0,0x1(%rdx)
  add    $0x1,%rcx
  add    $0x1,%rdx
  cmp    %rax,%rcx
  jne    L123
  mov    $0xffffffff,%eax
  jmp    L237
L81:
  lea    0x1(%rcx),%rax
  add    $0x40,%rcx
L116:
  movzbl (%rax),%edx
  cmp    $0x9,%dl
  je     L229
  test   %dl,%dl
  je     L33
  mov    %dl,(%r8)
  movb   $0x0,0x1(%r8)
  add    $0x1,%rax
  add    $0x1,%r8
  cmp    %rcx,%rax
  jne    L116
  mov    $0xffffffff,%eax
  jmp    L237
L229:
  add    $0x1,%rax
  mov    %rsp,%rdx
  lea    0x8(%rsp),%rsi
L99:
  movzbl (%rax),%ecx
  test   %cl,%cl
  je     L22
  cmp    $0x9,%cl
  je     L22
  mov    %cl,(%rdx)
  movb   $0x0,0x1(%rdx)
  add    $0x1,%rax
  add    $0x1,%rdx
  cmp    %rsi,%rdx
  jne    L99
  mov    $0xffffffff,%eax
  jmp    L237
L22:
  mov    %rsp,%rdi
  call   <atol@plt>
  lea    -0x1(%rax),%rdx
  cmp    $0xfffe,%rdx
  ja     L135
  mov    %rax,(%rbx)
  mov    $0x0,%eax
  jmp    L237
L135:
  movq   $0x0,(%rbx)
  mov    $0x0,%eax
  jmp    L237
L63:
  mov    $0x0,%eax
  jmp    L237
L188:
  mov    $0x0,%eax
  jmp    L237
L33:
  mov    $0x0,%eax
  jmp    L237
L207:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int explodegophermapline(char *linebuff, char *itemtype, char *itemdesc, char *itemselector, char *itemserver, long *itemport) {
  int x;
  char tmpstring[16];
  *itemtype = 0;
  itemdesc[0] = 0;
  itemselector[0] = 0;
  itemserver[0] = 0;
  *itemport = 0;
  if (*linebuff == 0) {
    *itemtype = 'i';
    return (0);
  }
  *itemtype = *linebuff;
  linebuff += 1;
  for (x = 0;;) {
    if (x == 1023)
      return (-1);
    if (*linebuff == '\t')
      break;
    if (*linebuff == 0)
      return (0);
    itemdesc[x] = *linebuff;
    itemdesc[++x] = 0;
    linebuff += 1;
  }
  linebuff += 1;
  for (x = 0;;) {
    if (x == 1023)
      return (-1);
    if (*linebuff == '\t')
      break;
    if (*linebuff == 0)
      return (0);
    itemselector[x] = *linebuff;
    itemselector[++x] = 0;
    linebuff += 1;
  }
  linebuff += 1;
  for (x = 0;;) {
    if (x == 63)
      return (-1);
    if (*linebuff == '\t')
      break;
    if (*linebuff == 0)
      return (0);
    itemserver[x] = *linebuff;
    itemserver[++x] = 0;
    linebuff += 1;
  }
  linebuff += 1;
  for (x = 0;;) {
    if (x == 8)
      return (-1);
    if (*linebuff == '\t')
      break;
    if (*linebuff == 0)
      break;
    tmpstring[x] = *linebuff;
    tmpstring[++x] = 0;
    linebuff += 1;
  }
  *itemport = atol(tmpstring);
  if ((*itemport < 1) || (*itemport > 65535))
    *itemport = 0;
  return (0);
}
```