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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  cmpl   $0x2,-0x14(%rbp)
  je     L15
  lea    D44(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xffffffff,%eax
  jmp    L5
L15:
  mov    -0x20(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <getpwnam@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L4
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D82(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xffffffff,%eax
  jmp    L5
L4:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,%rsi
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    0x10(%rax),%eax
  mov    %eax,%esi
  lea    D73(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    0x14(%rax),%eax
  mov    %eax,%esi
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    0x18(%rax),%rax
  mov    %rax,%rsi
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    0x20(%rax),%rax
  mov    %rax,%rsi
  lea    D62(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    0x28(%rax),%rax
  mov    %rax,%rsi
  lea    D83(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
L5:
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D44
type_infered: string
name: read_data
arguments: label: D82
type_infered: string
name: read_data
arguments: label: D43
type_infered: string
name: read_data
arguments: label: D71
type_infered: string
name: read_data
arguments: label: D73
type_infered: string
name: read_data
arguments: label: D79
type_infered: string
name: read_data
arguments: label: D52
type_infered: string
name: read_data
arguments: label: D62
type_infered: string
name: read_data
arguments: label: D83
type_infered: string

tool: D44: Usage: test-user <name>

tool: D82: User %s not found.


tool: D43: Name      : %s


tool: D71: Password  : %s


tool: D73: UID       : %d


tool: D79: GID       : %d


tool: D52: Gecos     : %s


tool: D62: Directory : %s


tool: D83: Shell     : %s


assistant: ```c
int main(int argc, char **argv) {
  if (argc != 2) {
    printf("Usage: test-user <name>\n");
    return -1;
  }
  char *name = argv[1];
  struct passwd *result = getpwnam(name);
  if (!result) {
    printf("User %s not found.\n", name);
    return -1;
  }
  printf("Name      : %s\n", result->pw_name);
  printf("Password  : %s\n", result->pw_passwd);
  printf("UID       : %d\n", result->pw_uid);
  printf("GID       : %d\n", result->pw_gid);
  printf("Gecos     : %s\n", result->pw_gecos);
  printf("Directory : %s\n", result->pw_dir);
  printf("Shell     : %s\n", result->pw_shell);
  printf("\n");
  return 0;
}
```