user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  sub    $0x58,%rsp
  lea    D86(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rsi
  call   <statvfs@plt>
  cmp    $0xffffffff,%eax
  je     L12
  mov    (%rsp),%esi
  lea    D19(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%esi
  lea    D77(%rip),%rdi
  call   <printf@plt>
  mov    0x40(%rsp),%esi
  lea    D20(%rip),%rdi
  call   <printf@plt>
  mov    0x38(%rsp),%esi
  lea    D114(%rip),%rdi
  call   <printf@plt>
  mov    0x30(%rsp),%esi
  lea    D71(%rip),%rdi
  call   <printf@plt>
  mov    0x28(%rsp),%esi
  lea    D78(%rip),%rdi
  call   <printf@plt>
  mov    0x20(%rsp),%esi
  lea    D35(%rip),%rdi
  call   <printf@plt>
  mov    0x18(%rsp),%esi
  lea    D72(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%esi
  lea    D21(%rip),%rdi
  call   <printf@plt>
  mov    0xc(%rsp),%esi
  lea    D112(%rip),%rdi
  call   <printf@plt>
  mov    0x10(%rsp),%esi
  lea    D104(%rip),%rdi
  call   <printf@plt>
L12:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L15
  xor    %eax,%eax
  add    $0x58,%rsp
  ret
L15:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D86
type: string
name: parse_data
arguments: data_label: D19
type: string
name: parse_data
arguments: data_label: D77
type: string
name: parse_data
arguments: data_label: D20
type: string
name: parse_data
arguments: data_label: D114
type: string
name: parse_data
arguments: data_label: D71
type: string
name: parse_data
arguments: data_label: D78
type: string
name: parse_data
arguments: data_label: D35
type: string
name: parse_data
arguments: data_label: D72
type: string
name: parse_data
arguments: data_label: D21
type: string
name: parse_data
arguments: data_label: D112
type: string
name: parse_data
arguments: data_label: D104
type: string

tool: D86: /

tool: D19: File system block size: %lu bytes


tool: D77: File system fundamental block size: %lu bytes


tool: D20: Total number of blocks in file system: %u


tool: D114: Total number of available blocks: %u


tool: D71: Total number of free blocks: %u


tool: D78: Total number of i-nodes: %u


tool: D35: Total number of free i-nodes: %u


tool: D72: i-nodes available to unprivileged process: %u


tool: D21: File system id: %lu


tool: D112: Mount flags: %lu


tool: D104: Maximum length of file names on this file system : %lu


assistant: ```c
int main(int argc, char *argv[]) {
  struct statvfs statvfsbuf;
  if (statvfs("/", &statvfsbuf) != -1) {
    printf("File system block size: %lu bytes\n", statvfsbuf.f_bsize);
    printf("File system fundamental block size: %lu bytes\n", statvfsbuf.f_frsize);
    printf("Total number of blocks in file system: %u\n", (unsigned int)statvfsbuf.f_blocks);
    printf("Total number of available blocks: %u\n", (unsigned int)statvfsbuf.f_bavail);
    printf("Total number of free blocks: %u\n", (unsigned int)statvfsbuf.f_bfree);
    printf("Total number of i-nodes: %u\n", (unsigned int)statvfsbuf.f_files);
    printf("Total number of free i-nodes: %u\n", (unsigned int)statvfsbuf.f_ffree);
    printf("i-nodes available to unprivileged process: %u\n", (unsigned int)statvfsbuf.f_favail);
    printf("File system id: %lu\n", statvfsbuf.f_fsid);
    printf("Mount flags: %lu\n", statvfsbuf.f_flag);
    printf("Maximum length of file names on this file system : %lu\n", statvfsbuf.f_namemax);
  }
  return 0;
}
```