user: Please show me the C implementation that matches the assembly code listed below:

```asm
<get_config_files>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  movl   $0x0,-0xc(%rbp)
  mov    $0x4,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  cmpl   $0x1,-0x14(%rbp)
  jg     L83
  lea    D47(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <debug@plt>
  mov    $0xffffffff,%eax
  jmp    L115
L83:
  movl   $0x1,-0x10(%rbp)
  jmp    L96
L75:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D2(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L39
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L101
L39:
  mov    $0x0,%eax
  call   <help@plt>
  jmp    L115
L101:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L123
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <parse_short@plt>
  test   %rax,%rax
  je     L61
  mov    $0x0,%eax
  call   <help@plt>
  jmp    L115
L123:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stat@plt>
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jns    L62
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdx
  lea    D21(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <debug@plt>
  jmp    L20
L62:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <parse_file@plt>
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jns    L20
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    -0xc(%rbp),%edx
  mov    %edx,%ecx
  mov    %rax,%rdx
  lea    D22(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <debug@plt>
  jmp    L20
L61:
  nop
L20:
  addl   $0x1,-0x10(%rbp)
L96:
  mov    -0x10(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L75
  mov    -0xc(%rbp),%eax
L115:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D47
datatype: string
name: retrieve_data
arguments: data_tag: D2
datatype: string
name: retrieve_data
arguments: data_tag: D1
datatype: string
name: retrieve_data
arguments: data_tag: D21
datatype: string
name: retrieve_data
arguments: data_tag: D22
datatype: string

tool: D47: [conf]: Please supply one or more config files

tool: D2: --help

tool: D1: -h

tool: D21: [conf]: File does not exist %s

tool: D22: [conf]: Could not parse file %s (ret = %d)

assistant: ```c
int get_config_files(int argc, char **argv) {
  int i;
  int ret = 0;
  struct stat *file_stats = malloc(sizeof(struct stat));
  if (argc < 2) {
    debug(0, "[conf]: "
             "Please supply one or more config files");
    return -1;
  }
  for (i = 1; i < argc; i++) {
    if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h"))
      return help();
    if (argv[i][0] == '-') {
      if (parse_short(argv[i]))
        return help();
      else
        continue;
    }
    if ((ret = stat(argv[i], file_stats)) < 0) {
      debug(0,
            "[conf]: "
            "File does not exist %s",
            argv[i]);
      continue;
    }
    if ((ret = parse_file(argv[i])) < 0) {
      debug(0,
            "[conf]: "
            "Could not parse file %s (ret = %d)",
            argv[i], ret);
      continue;
    }
  }
  return ret;
}
```