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

```asm
<makespace>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  test   %rax,%rax
  jne    L53
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  lea    D52(%rip),%rdx
  mov    %rdx,%rcx
  mov    $0x6b,%edx
  lea    D93(%rip),%rsi
  mov    %eax,%edi
  call   <slurm_xmalloc@plt>
  mov    -0x28(%rbp),%rdx
  mov    %rax,(%rdx)
  jmp    L42
L53:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  add    $0x1,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  lea    D52(%rip),%rdx
  mov    %rdx,%rcx
  mov    $0x70,%edx
  lea    D93(%rip),%rsi
  mov    %rax,%rdi
  call   <slurm_xsize@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jle    L42
  mov    -0xc(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x8(%rbp),%eax
  add    $0x3f,%eax
  cmp    %eax,-0x14(%rbp)
  jg     L29
  mov    -0x8(%rbp),%eax
  add    $0x40,%eax
  mov    %eax,-0x14(%rbp)
L29:
  mov    -0x8(%rbp),%eax
  add    %eax,%eax
  cmp    %eax,-0x14(%rbp)
  jge    L25
  mov    -0x8(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x14(%rbp)
L25:
  mov    -0x14(%rbp),%esi
  mov    -0x28(%rbp),%rax
  lea    D52(%rip),%r8
  mov    $0x78,%ecx
  lea    D93(%rip),%rdx
  mov    %rax,%rdi
  call   <slurm_xrealloc@plt>
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  lea    D52(%rip),%rdx
  mov    %rdx,%rcx
  mov    $0x79,%edx
  lea    D93(%rip),%rsi
  mov    %rax,%rdi
  call   <slurm_xsize@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  je     L42
  lea    D52(%rip),%rax
  mov    %rax,%rcx
  mov    $0x7a,%edx
  lea    D93(%rip),%rax
  mov    %rax,%rsi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  call   <__xassert_failed@plt>
L42:
  nop
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D52
type_infered: string
name: retrieve_data
arguments: data_label: D93
type_infered: string
name: retrieve_data
arguments: data_label: D86
type_infered: string

tool: 

tool: D93: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/Q-Leap-Networks/debian-slurm/refs/heads/master/src/common/xstring.c

tool: D86: actual_size == new_size

assistant: ```c
void makespace(char **str, int needed) {
  if (*str == NULL)
    *str = slurm_xmalloc(needed + 1, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/Q-Leap-Networks/debian-slurm/refs/heads/master/src/common/xstring.c", 107, "");
  else {
    int actual_size;
    int used = strlen(*str) + 1;
    int min_new_size = used + needed;
    int cur_size = slurm_xsize((void *)*str, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/Q-Leap-Networks/debian-slurm/refs/heads/master/src/common/xstring.c", 112, "");
    if (min_new_size > cur_size) {
      int new_size = min_new_size;
      if (new_size < (cur_size + 64))
        new_size = cur_size + 64;
      if (new_size < (cur_size * 2))
        new_size = cur_size * 2;
      slurm_xrealloc((void **)&(*str), new_size, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/Q-Leap-Networks/debian-slurm/refs/heads/master/src/common/xstring.c", 120, "");
      actual_size = slurm_xsize((void *)*str, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/Q-Leap-Networks/debian-slurm/refs/heads/master/src/common/xstring.c", 121, "");
      (void)({ (actual_size == new_size) ? ((void)0) : __xassert_failed("actual_size == new_size", "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/Q-Leap-Networks/debian-slurm/refs/heads/master/src/common/xstring.c", 122, ""); });
    }
  }
}
```