user: Translate the below assembly code into C programming language:

```asm
<fill_argv>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,0x18(%rsp)
  mov    %rsi,%rbx
  mov    %rsi,0x8(%rsp)
  mov    $0x7d0,%edi
  call   <malloc@plt>
  mov    %rax,%r13
  movb   $0x0,(%rax)
  mov    %rbx,%rdi
  call   <getc@plt>
  mov    %eax,%ebp
  mov    %eax,%r14d
  movl   $0x1,0x14(%rsp)
  mov    $0x0,%ebx
  mov    $0x7d0,%r12d
  mov    D18(%rip),%r15
  jmp    L307
L171:
  add    $0x7d0,%r12d
  mov    %r12d,%esi
  mov    %r13,%rdi
  call   <realloc@plt>
  mov    %rax,%r13
  jmp    L307
L336:
  movslq %ebx,%rbx
  movb   $0x0,0x0(%r13,%rbx,1)
  mov    $0x1,%r9d
L303:
  mov    0x18(%rsp),%r8
  mov    $0x0,%eax
  mov    $0x0,%edi
  lea    -0x1(%r12),%r10d
  jmp    L310
L39:
  test   %ebx,%ebx
  jle    L196
  movslq %ebx,%rax
  lea    -0x1(%r13,%rax,1),%rax
  cmpb   $0x5c,(%rax)
  je     L246
L196:
  cmp    $0x1,%ebx
  jle    L346
  movslq %ebx,%rax
  cmpb   $0xd,-0x1(%r13,%rax,1)
  je     L229
L346:
  movslq %ebx,%rbx
  movb   $0x0,0x0(%r13,%rbx,1)
  mov    $0x0,%r9d
  jmp    L303
L246:
  movb   $0x0,(%rax)
  sub    $0x2,%ebx
  jmp    L262
L229:
  lea    -0x2(%r13,%rax,1),%rax
  cmpb   $0x5c,(%rax)
  jne    L346
  movb   $0x0,(%rax)
  sub    $0x3,%ebx
  jmp    L262
L66:
  sub    $0x1,%ebx
  jmp    L262
L385:
  movslq %ebx,%rax
  mov    %r14b,0x0(%r13,%rax,1)
L262:
  add    $0x1,%ebx
  mov    0x8(%rsp),%rdi
  call   <getc@plt>
  mov    %eax,%ebp
  mov    %eax,%r14d
  cmp    %ebx,%r12d
  jle    L171
L307:
  cmp    %ebp,(%r15)
  je     L336
  cmp    $0xa,%r14b
  je     L39
  cmpl   $0x0,0x14(%rsp)
  je     L385
  cmp    $0x20,%r14b
  je     L66
  cmp    $0x9,%r14b
  je     L66
  movslq %ebx,%rax
  mov    %r14b,0x0(%r13,%rax,1)
  movl   $0x0,0x14(%rsp)
  jmp    L262
L191:
  lea    0x1(%rax),%ecx
  cmp    %r10d,%ecx
  jge    L291
  movslq %ecx,%rdx
  add    %r13,%rdx
  lea    -0x1(%r12),%eax
L272:
  movzbl (%rdx),%esi
  cmp    $0x22,%sil
  je     L371
  test   %sil,%sil
  je     L31
  add    $0x1,%ecx
  add    $0x1,%rdx
  cmp    %eax,%ecx
  jne    L272
  jmp    L325
L371:
  lea    0x1(%rcx),%eax
  movslq %eax,%rdx
  add    %r13,%rdx
  cmpb   $0x0,(%rdx)
  je     L31
  cmp    %eax,%r12d
  jle    L325
  movb   $0x0,(%rdx)
  jmp    L325
L138:
  movb   $0x0,(%rsi)
L325:
  add    $0x1,%eax
  add    $0x8,%r8
  movslq %eax,%rdx
  cmpb   $0x0,0x0(%r13,%rdx,1)
  je     L31
L310:
  movslq %eax,%rdx
  add    %r13,%rdx
  cmpb   $0x0,(%rdx)
  je     L31
  mov    %rdx,(%r8)
  add    $0x1,%edi
  cmpb   $0x22,(%rdx)
  je     L191
  add    $0x1,%eax
  cmp    %eax,%r12d
  jle    L325
  movslq %eax,%rdx
  add    %r13,%rdx
L306:
  mov    %rdx,%rsi
  movzbl (%rdx),%ecx
  cmp    $0x20,%cl
  je     L138
  cmp    $0x9,%cl
  je     L138
  test   %cl,%cl
  je     L31
  add    $0x1,%eax
  add    $0x1,%rdx
  cmp    %eax,%r12d
  jne    L306
  jmp    L325
L291:
  mov    %ecx,%eax
  jmp    L325
L31:
  test   %edi,%edi
  jne    L49
  test   %r9d,%r9d
  je     L49
  mov    D18(%rip),%rax
  mov    (%rax),%edi
L49:
  mov    %edi,%eax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
int fill_argv(char **argv, FILE *describe_file, int max_args) {
  int argc, t, stop, s, e, eof = 0, start;
  int command_len = 0;
  char *command, c;
  int retC;
  int NNMAX_LINE = 2000;
  command = (char *)malloc(NNMAX_LINE);
  command_len = NNMAX_LINE;
  command[0] = '\0';
  stop = 0;
  start = 1;
  t = 0;
  while (stop == 0) {
    retC = getc(describe_file);
    c = (char)retC;
    if (t >= command_len) {
      command = (char *)realloc(command, command_len + NNMAX_LINE);
      command_len += NNMAX_LINE;
    }
    if (retC == EOF) {
      command[t] = '\0';
      stop = 1;
      eof = 1;
    } else if (c == '\n') {
      if (t > 0 && command[t - 1] == '\\') {
        command[t - 1] = '\0';
        t -= 2;
      } else if (t > 1 && command[t - 1] == '\r' && command[t - 2] == '\\') {
        command[t - 2] = '\0';
        t -= 3;
      } else {
        command[t] = '\0';
        stop = 1;
      }
    } else {
      if (start) {
        if (c == ' ' || c == '\t')
          t--;
        else {
          start = 0;
          command[t] = c;
        }
      } else {
        command[t] = c;
      }
    }
    t++;
  }
  argc = 0;
  s = 0;
  while (1) {
    if (command[s] == '\0') {
      goto finished;
    }
    argv[argc] = &command[s];
    if (argv[argc++][0] == '\"') {
      for (e = s + 1; e < command_len - 1; e++) {
        if (command[e] == '\"') {
          e++;
          if (command[e] == '\0')
            goto finished;
          if (e < command_len)
            command[e] = '\0';
          break;
        } else if (command[e] == '\0') {
          goto finished;
        }
      }
    } else {
      for (e = s + 1; e < command_len; e++) {
        if (command[e] == ' ' || command[e] == '\t') {
          command[e] = '\0';
          break;
        } else if (command[e] == '\0')
          goto finished;
      }
    }
    s = e + 1;
    if (command[s] == '\0')
      break;
  }
finished:
  if (argc == 0 && eof)
    return EOF;
  else
    return argc;
}
```