user: 请将以下的汇编代码转换成C语言代码:

```asm
<get_data_for_user>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L129
L78:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L0
  cmpl   $0x0,-0x14(%rbp)
  je     L115
  movl   $0x0,-0x14(%rbp)
  jmp    L10
L115:
  mov    -0x28(%rbp),%rax
  lea    D36(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L10:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x47,%eax
  cmp    $0xe,%eax
  ja     L84
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D29(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D29(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L84
  mov    -0x30(%rbp),%rax
  mov    0x8(%rax),%edx
  lea    -0xc(%rbp),%rax
  lea    D48(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0xc(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L84
  mov    -0x30(%rbp),%rax
  mov    0xc(%rax),%edx
  lea    -0xc(%rbp),%rax
  lea    D48(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0xc(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L84
  mov    -0x30(%rbp),%rax
  mov    0x10(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L84
  mov    -0x30(%rbp),%rax
  mov    0x18(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L84
  mov    -0x30(%rbp),%rax
  mov    0x20(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L84:
  addl   $0x1,-0x10(%rbp)
L129:
  cmpl   $0x5,-0x10(%rbp)
  jle    L78
  jmp    L19
L0:
  nop
L19:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L47
  call   <__stack_chk_fail@plt>
L47:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D36
datatype: string
name: extract_symbolic_data
arguments: data_label: D48
datatype: string

tool: D36:  

tool: D48: %d

assistant: ```c
void get_data_for_user(char *dst, struct passwd *pw, char *options) {
  bool c = true;
  char integer[sizeof(int)];
  for (int i = 0; i < 6; i++) {
    if (options[i] == '\0')
      break;
    if (c)
      c = false;
    else
      strcat(dst, " ");
    switch (options[i]) {
    case 'L':
      strcat(dst, pw->pw_name);
      break;
    case 'U':
      sprintf(integer, "%d", pw->pw_uid);
      strcat(dst, integer);
      break;
    case 'G':
      sprintf(integer, "%d", pw->pw_gid);
      strcat(dst, integer);
      break;
    case 'N':
      strcat(dst, pw->pw_gecos);
      break;
    case 'H':
      strcat(dst, pw->pw_dir);
      break;
    case 'S':
      strcat(dst, pw->pw_shell);
      break;
    }
  }
  return;
}
```