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

```asm
<parse_qrels_line>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L268
L235:
  addq   $0x1,-0x8(%rbp)
L268:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L278
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L235
L278:
  mov    -0x20(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
  jmp    L30
L157:
  addq   $0x1,-0x8(%rbp)
L30:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L157
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L2
  mov    $0xffffffff,%eax
  jmp    L98
L2:
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movb   $0x0,(%rax)
  jmp    L36
L279:
  addq   $0x1,-0x8(%rbp)
L36:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L270
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L279
  jmp    L270
L310:
  addq   $0x1,-0x8(%rbp)
L270:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L310
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L102
  mov    $0xffffffff,%eax
  jmp    L98
L102:
  addq   $0x1,-0x8(%rbp)
  jmp    L97
L49:
  addq   $0x1,-0x8(%rbp)
L97:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L246
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L49
L246:
  mov    -0x28(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
  jmp    L10
L312:
  addq   $0x1,-0x8(%rbp)
L10:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L312
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L273
  mov    $0xffffffff,%eax
  jmp    L98
L273:
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movb   $0x0,(%rax)
  jmp    L64
L158:
  addq   $0x1,-0x8(%rbp)
L64:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L275
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L158
L275:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L18
  mov    $0xffffffff,%eax
  jmp    L98
L18:
  mov    -0x30(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
  jmp    L249
L29:
  addq   $0x1,-0x8(%rbp)
L249:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L29
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L231
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movb   $0x0,(%rax)
  jmp    L69
L83:
  addq   $0x1,-0x8(%rbp)
L69:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L72
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L83
L72:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L231
  mov    $0xffffffff,%eax
  jmp    L98
L231:
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
  mov    $0x0,%eax
L98:
  leave
  ret
```

assistant: ```c
int parse_qrels_line(char **start_ptr, char **qid_ptr, char **docno_ptr, char **rel_ptr) {
  char *ptr = *start_ptr;
  while (*ptr != '\n' && isspace(*ptr))
    ptr++;
  *qid_ptr = ptr;
  while (!isspace(*ptr))
    ptr++;
  if (*ptr == '\n')
    return (-1);
  *ptr++ = '\0';
  while (*ptr != '\n' && isspace(*ptr))
    ptr++;
  while (!isspace(*ptr))
    ptr++;
  if (*ptr == '\n')
    return (-1);
  ptr++;
  while (*ptr != '\n' && isspace(*ptr))
    ptr++;
  *docno_ptr = ptr;
  while (!isspace(*ptr))
    ptr++;
  if (*ptr == '\n')
    return (-1);
  *ptr++ = '\0';
  while (*ptr != '\n' && isspace(*ptr))
    ptr++;
  if (*ptr == '\n')
    return (-1);
  *rel_ptr = ptr;
  while (!isspace(*ptr))
    ptr++;
  if (*ptr != '\n') {
    *ptr++ = '\0';
    while (*ptr != '\n' && isspace(*ptr))
      ptr++;
    if (*ptr != '\n')
      return (-1);
  }
  *ptr++ = '\0';
  *start_ptr = ptr;
  return (0);
}
```