user: What would the C source look like for the assembly code provided here?

```asm
<parse_args_from_file>:
  endbr64
  push   %r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rcx,%rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  movl   $0x0,(%rsi)
  lea    0x4(%rsp),%rdx
  mov    %rcx,%rsi
  movl   $0x0,0x4(%rsp)
  call   <parse_line_from_file@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  jne    L216
  movslq 0x4(%rsp),%rdx
  mov    0x0(%rbp),%edi
  test   %edx,%edx
  jle    L156
  mov    (%rbx),%rcx
  xor    %eax,%eax
  jmp    L4
L229:
  cmpb   $0x20,-0x1(%rcx,%rax,1)
  je     L220
L138:
  add    $0x1,%rax
  cmp    %rdx,%rax
  je     L156
L4:
  test   %rax,%rax
  jne    L229
L220:
  cmpb   $0x20,(%rcx,%rax,1)
  je     L138
  add    $0x1,%edi
  add    $0x1,%rax
  mov    %edi,0x0(%rbp)
  cmp    %rdx,%rax
  jne    L4
L156:
  mov    $0x8,%esi
  call   <calloc@plt>
  mov    %rax,(%r12)
  test   %rax,%rax
  je     L141
  mov    0x4(%rsp),%eax
  test   %eax,%eax
  js     L216
  xor    %r9d,%r9d
  mov    $0xfffffffffffffffe,%rdi
  mov    $0xffffffffffffffff,%rsi
  xor    %edx,%edx
  jmp    L183
  nopw   0x0(%rax,%rax,1)
L151:
  cmp    %ecx,%r9d
  jge    L67
  mov    (%r12),%rcx
  movslq %r9d,%r8
  add    $0x1,%r9d
  mov    %rax,(%rcx,%r8,8)
L67:
  test   %rdx,%rdx
  jne    L32
L33:
  add    $0x1,%rdx
  add    $0x1,%rsi
  add    $0x1,%rdi
  cmp    %edx,0x4(%rsp)
  jl     L216
L183:
  mov    (%rbx),%rax
  test   %rdx,%rdx
  je     L130
  testb  $0xdf,(%rax,%rsi,1)
  jne    L33
L130:
  add    %rdx,%rax
  mov    0x0(%rbp),%ecx
  cmpb   $0x20,(%rax)
  jne    L151
  cmp    %ecx,%r9d
  jne    L33
  jmp    L67
L141:
  mov    (%rbx),%rdi
  mov    $0x4,%r13d
  call   <free@plt>
  nopl   0x0(%rax)
L216:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L166
  add    $0x18,%rsp
  mov    %r13d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  xchg   %ax,%ax
L32:
  mov    (%rbx),%rax
  movb   $0x0,(%rax,%rsi,1)
  test   %edi,%edi
  jle    L33
  lea    -0x3(%rdx),%eax
  lea    -0x3(%rdx),%r8
  sub    %rax,%r8
  mov    %rdi,%rax
  jmp    L0
  nopw   0x0(%rax,%rax,1)
L186:
  sub    $0x1,%rax
  movb   $0x0,(%rcx)
  cmp    %rax,%r8
  je     L33
L0:
  mov    (%rbx),%rcx
  add    %rax,%rcx
  cmpb   $0x20,(%rcx)
  je     L186
  jmp    L33
L166:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int parse_args_from_file(char *path, int *argcp, char ***argvp, char **linep) {
  int i = *argcp = 0, k = 0, size = 0, l;
  if ((i = parse_line_from_file(path, linep, &size)) != 0)
    return i;
  for (i = 0; i < size; i++)
    if ((i == 0 || (*linep)[i - 1] == ' ') && (*linep)[i] != ' ')
      (*argcp)++;
  (*argvp) = calloc((*argcp), sizeof(char *));
  if ((*argvp) == NULL) {
    free((*linep));
    return 4;
  }
  for (i = 0; i <= size; i++) {
    if ((i == 0 || !(*linep)[i - 1] || (*linep)[i - 1] == ' ') && ((*linep)[i] != ' ' || k == *argcp)) {
      if (k < *argcp)
        (*argvp)[k++] = (*linep) + i;
      if (i > 0) {
        (*linep)[i - 1] = 0;
        for (l = i - 2; l > 0; l--) {
          if ((*linep)[l] != ' ')
            break;
          else
            (*linep)[l] = 0;
        }
      }
    }
  }
  return 0;
}
```