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

```asm
<parse_tarline>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x270,%rsp
  mov    %rdi,-0x228(%rbp)
  mov    %rsi,-0x230(%rbp)
  mov    %rdx,-0x238(%rbp)
  mov    %rcx,-0x240(%rbp)
  mov    %r8,-0x248(%rbp)
  mov    %r9,-0x250(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x258(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0x260(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0x268(%rbp)
  mov    0x28(%rbp),%rax
  mov    %rax,-0x270(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x21c(%rbp)
  mov    -0x268(%rbp),%rax
  movl   $0x0,(%rax)
  lea    -0x21c(%rbp),%rdx
  mov    -0x228(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nexttoken@plt>
  test   %eax,%eax
  jne    L225
  mov    $0x0,%eax
  jmp    L299
L225:
  movzbl -0x210(%rbp),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <tolower@plt>
  cmp    $0x6c,%al
  jne    L86
  mov    -0x268(%rbp),%rax
  mov    (%rax),%eax
  or     $0x20,%eax
  mov    %eax,%edx
  mov    -0x268(%rbp),%rax
  mov    %edx,(%rax)
L86:
  movl   $0x0,-0x218(%rbp)
  jmp    L378
L227:
  addl   $0x1,-0x218(%rbp)
L378:
  mov    -0x218(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <tolower@plt>
  cmp    $0x77,%al
  je     L320
  mov    -0x218(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L227
L320:
  mov    -0x218(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L241
  mov    -0x268(%rbp),%rax
  mov    (%rax),%eax
  or     $0x10,%eax
  mov    %eax,%edx
  mov    -0x268(%rbp),%rax
  mov    %edx,(%rax)
L241:
  movzbl -0x210(%rbp),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <tolower@plt>
  cmp    $0x64,%al
  jne    L87
  cmpl   $0x0,0x30(%rbp)
  jne    L404
  mov    $0x0,%eax
  jmp    L299
L404:
  mov    -0x268(%rbp),%rax
  mov    (%rax),%eax
  or     $0x2,%eax
  mov    %eax,%edx
  mov    -0x268(%rbp),%rax
  mov    %edx,(%rax)
L87:
  lea    -0x21c(%rbp),%rdx
  mov    -0x228(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nexttoken@plt>
  test   %eax,%eax
  jne    L47
  mov    $0x0,%eax
  jmp    L299
L47:
  lea    -0x210(%rbp),%rax
  lea    D11(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,-0x214(%rbp)
  lea    -0x21c(%rbp),%rdx
  mov    -0x228(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nexttoken@plt>
  test   %eax,%eax
  jne    L196
  mov    $0x0,%eax
  jmp    L299
L196:
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <is_a_number@plt>
  test   %eax,%eax
  jne    L406
  mov    $0x0,%eax
  jmp    L299
L406:
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    -0x230(%rbp),%rdx
  mov    %rax,(%rdx)
  lea    -0x21c(%rbp),%rdx
  mov    -0x228(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nexttoken@plt>
  test   %eax,%eax
  jne    L38
  mov    $0x0,%eax
  jmp    L299
L38:
  movl   $0x0,-0x218(%rbp)
  jmp    L190
L294:
  mov    -0x218(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D6(%rip),%rax
  mov    (%rdx,%rax,1),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %eax,%eax
  je     L319
  addl   $0x1,-0x218(%rbp)
L190:
  cmpl   $0xb,-0x218(%rbp)
  jle    L294
  jmp    L340
L319:
  nop
L340:
  cmpl   $0xb,-0x218(%rbp)
  jg     L411
  mov    -0x218(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x238(%rbp),%rax
  mov    %edx,(%rax)
  lea    -0x21c(%rbp),%rdx
  mov    -0x228(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nexttoken@plt>
  test   %eax,%eax
  jne    L177
  mov    $0x0,%eax
  jmp    L299
L177:
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x240(%rbp),%rdx
  mov    %eax,(%rdx)
  lea    -0x21c(%rbp),%rdx
  mov    -0x228(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nexttoken@plt>
  test   %eax,%eax
  jne    L122
  mov    $0x0,%eax
  jmp    L299
L122:
  movzbl -0x20e(%rbp),%eax
  cmp    $0x3a,%al
  je     L155
  mov    $0x0,%eax
  jmp    L299
L155:
  movb   $0x0,-0x20e(%rbp)
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x250(%rbp),%rdx
  mov    %eax,(%rdx)
  lea    -0x210(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x258(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x260(%rbp),%rax
  movl   $0x0,(%rax)
  lea    -0x21c(%rbp),%rdx
  mov    -0x228(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nexttoken@plt>
  test   %eax,%eax
  jne    L188
  mov    $0x0,%eax
  jmp    L299
L188:
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x248(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L107
L411:
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0xa,%eax
  jne    L244
  movzbl -0x20c(%rbp),%eax
  cmp    $0x2d,%al
  jne    L244
  movzbl -0x209(%rbp),%eax
  cmp    $0x2d,%al
  je     L139
L244:
  mov    $0x0,%eax
  jmp    L299
L139:
  movb   $0x0,-0x20c(%rbp)
  movb   $0x0,-0x209(%rbp)
  lea    -0x210(%rbp),%rax
  add    $0x8,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x240(%rbp),%rdx
  mov    %eax,(%rdx)
  lea    -0x210(%rbp),%rax
  add    $0x5,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x238(%rbp),%rdx
  mov    %eax,(%rdx)
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x248(%rbp),%rdx
  mov    %eax,(%rdx)
  lea    -0x21c(%rbp),%rdx
  mov    -0x228(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nexttoken@plt>
  test   %eax,%eax
  jne    L380
  mov    $0x0,%eax
  jmp    L299
L380:
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x8,%eax
  jne    L306
  movzbl -0x20e(%rbp),%eax
  cmp    $0x3a,%al
  jne    L306
  movzbl -0x20b(%rbp),%eax
  cmp    $0x3a,%al
  je     L195
L306:
  mov    $0x0,%eax
  jmp    L299
L195:
  movb   $0x0,-0x20e(%rbp)
  movb   $0x0,-0x20b(%rbp)
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x250(%rbp),%rdx
  mov    %eax,(%rdx)
  lea    -0x210(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x258(%rbp),%rdx
  mov    %eax,(%rdx)
  lea    -0x210(%rbp),%rax
  add    $0x6,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x260(%rbp),%rdx
  mov    %eax,(%rdx)
L107:
  mov    -0x21c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jg     L395
  mov    $0x0,%eax
  jmp    L299
L395:
  mov    -0x21c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rax,%rdx
  mov    -0x270(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  cmpl   $0x0,-0x214(%rbp)
  jne    L136
  mov    -0x268(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x270(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <filelist_tar_filename_proc@plt>
L136:
  mov    -0x270(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <wfile_noslash@plt>
  mov    $0xffffffff,%eax
L299:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L207
  call   <__stack_chk_fail@plt>
L207:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D11
data_type: string

tool: D11: 999/999

assistant: ```c
int parse_tarline(char *buf, double *size, int *month, int *day, int *year, int *hour, int *minute, int *second, int *attr, char *filename, int dirstoo) {
  char tbuf[512];
  int i, j, created_by_filelist_function;
  static char *months[] = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"};
  i = 0;
  (*attr) = 0;
  if (!nexttoken(tbuf, buf, &i))
    return (0);
  if (tolower(tbuf[0]) == 'l')
    (*attr) = (*attr) | 0x0020;
  for (j = 0; tolower(buf[j]) != 'w' && buf[j] != '\0'; j++)
    ;
  if (buf[j] == '\0')
    (*attr) = (*attr) | 0x0010;
  if (tolower(tbuf[0]) == 'd') {
    if (!dirstoo)
      return (0);
    (*attr) = (*attr) | 0x0002;
  }
  if (!nexttoken(tbuf, buf, &i))
    return (0);
  created_by_filelist_function = !stricmp(tbuf, "999/999");
  if (!nexttoken(tbuf, buf, &i))
    return (0);
  if (!is_a_number(tbuf))
    return (0);
  (*size) = atof(tbuf);
  if (!nexttoken(tbuf, buf, &i))
    return (0);
  for (j = 0; j < 12; j++)
    if (!stricmp(tbuf, months[j]))
      break;
  if (j < 12) {
    (*month) = j + 1;
    if (!nexttoken(tbuf, buf, &i))
      return (0);
    (*day) = atoi(tbuf);
    if (!nexttoken(tbuf, buf, &i))
      return (0);
    if (tbuf[2] != ':')
      return (0);
    tbuf[2] = '\0';
    (*hour) = atoi(tbuf);
    (*minute) = atoi(&tbuf[3]);
    (*second) = 0;
    if (!nexttoken(tbuf, buf, &i))
      return (0);
    (*year) = atoi(tbuf);
  } else {
    if (strlen(tbuf) != 10 || tbuf[4] != '-' || tbuf[7] != '-')
      return (0);
    tbuf[4] = '\0';
    tbuf[7] = '\0';
    (*day) = atoi(&tbuf[8]);
    (*month) = atoi(&tbuf[5]);
    (*year) = atoi(tbuf);
    if (!nexttoken(tbuf, buf, &i))
      return (0);
    if (strlen(tbuf) != 8 || tbuf[2] != ':' || tbuf[5] != ':')
      return (0);
    tbuf[2] = '\0';
    tbuf[5] = '\0';
    (*hour) = atoi(tbuf);
    (*minute) = atoi(&tbuf[3]);
    (*second) = atoi(&tbuf[6]);
  }
  if (strlen(&buf[i]) <= 0)
    return (0);
  strcpy(filename, &buf[i]);
  if (!created_by_filelist_function)
    filelist_tar_filename_proc(filename, (*attr));
  wfile_noslash(filename, NULL);
  return (-1);
}
```