user: What is the c source code of the assembly code below:

```asm
<split_path>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbx
  mov    %rsi,%r12
  test   %rsi,%rsi
  je     L256
  movl   $0x0,(%rsi)
L256:
  test   %rbx,%rbx
  je     L284
  movzbl (%rbx),%eax
  cmp    $0x2f,%al
  je     L295
  mov    $0x0,%esi
  mov    $0x0,%ebp
  test   %al,%al
  je     L234
L174:
  mov    %rbx,%rax
  jmp    L352
L186:
  mov    %rax,%rdx
  sub    %rcx,%rdx
  cmp    %ecx,%eax
  je     L234
  add    $0x1,%ebp
  lea    0x1(%rsi,%rdx,1),%esi
  cmpb   $0x0,(%rax)
  je     L234
L352:
  mov    %rax,%rcx
  cmpb   $0x2f,(%rax)
  jne    L111
L359:
  add    $0x1,%rax
  cmpb   $0x2f,(%rax)
  je     L359
  mov    %rax,%rcx
L111:
  movzbl (%rcx),%eax
  test   %al,%al
  je     L234
  cmp    $0x2f,%al
  je     L234
  mov    %rcx,%rax
L278:
  add    $0x1,%rax
  movzbl (%rax),%edx
  test   %dl,%dl
  je     L186
  cmp    $0x2f,%dl
  jne    L278
  jmp    L186
L295:
  mov    $0x2,%esi
  mov    $0x1,%ebp
  jmp    L174
L234:
  lea    0x1(%rbp),%eax
  movslq %eax,%r13
  lea    (%rsi,%rax,8),%edi
  call   <malloc@plt>
  test   %rax,%rax
  je     L92
  lea    (%rax,%r13,8),%r8
  mov    %rax,%r9
  cmpb   $0x2f,(%rbx)
  je     L193
L127:
  cmpb   $0x0,(%rbx)
  jne    L327
L95:
  movq   $0x0,(%r9)
  test   %r12,%r12
  je     L128
  mov    %ebp,(%r12)
L128:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L92:
  test   %r12,%r12
  je     L43
  movl   $0xffffffff,(%r12)
  jmp    L128
L193:
  lea    0x8(%rax),%r9
  mov    %r8,(%rax)
  movb   $0x2f,(%r8)
  movb   $0x0,0x1(%r8)
  lea    0x2(%r8),%r8
  jmp    L127
L171:
  cmp    %rsi,%rbx
  je     L95
  add    $0x8,%r9
  mov    %r8,-0x8(%r9)
  cmp    %rsi,%rbx
  jbe    L180
  mov    %rbx,%rdi
  sub    %rsi,%rdi
  mov    $0x0,%edx
L21:
  movzbl (%rsi,%rdx,1),%ecx
  mov    %cl,(%r8,%rdx,1)
  add    $0x1,%rdx
  cmp    %rdi,%rdx
  jne    L21
  add    %r8,%rdi
L204:
  lea    0x1(%rdi),%r8
  movb   $0x0,(%rdi)
  cmpb   $0x0,(%rbx)
  je     L95
L327:
  mov    %rbx,%rsi
  cmpb   $0x2f,(%rbx)
  jne    L286
L342:
  add    $0x1,%rbx
  cmpb   $0x2f,(%rbx)
  je     L342
  mov    %rbx,%rsi
L286:
  movzbl (%rsi),%edx
  test   %dl,%dl
  je     L95
  cmp    $0x2f,%dl
  je     L95
  mov    %rsi,%rbx
L228:
  add    $0x1,%rbx
  movzbl (%rbx),%edx
  test   %dl,%dl
  je     L171
  cmp    $0x2f,%dl
  jne    L228
  jmp    L171
L180:
  mov    %r8,%rdi
  jmp    L204
L284:
  mov    %rbx,%rax
  jmp    L128
L43:
  mov    %r12,%rax
  jmp    L128
```

assistant: ```c
char **split_path(const char *path, int *count) {
  int n_components, component_len, total_component_len, alloc_len;
  const char *start, *end;
  char *mem_block, **array_ptr, *component_ptr;
  if (count)
    *count = 0;
  if (!path)
    return NULL;
  if (*path == '/') {
    n_components = 1;
    total_component_len = 2;
  } else {
    n_components = 0;
    total_component_len = 0;
  }
  for (start = end = path; *start; start = end) {
    for (start = end; *start && *start == '/'; start++)
      ;
    for (end = start; *end && *end != '/'; end++)
      ;
    if ((component_len = end - start) == 0)
      break;
    n_components++;
    total_component_len += component_len + 1;
  }
  alloc_len = ((n_components + 1) * sizeof(char *)) + total_component_len;
  if ((mem_block = malloc(alloc_len)) == NULL) {
    if (count)
      *count = -1;
    return NULL;
  }
  array_ptr = (char **)mem_block;
  component_ptr = mem_block + ((n_components + 1) * sizeof(char *));
  if (*path == '/') {
    *array_ptr++ = component_ptr;
    *component_ptr++ = '/';
    *component_ptr++ = 0;
  }
  for (start = end = path; *start; start = end) {
    for (start = end; *start && *start == '/'; start++)
      ;
    for (end = start; *end && *end != '/'; end++)
      ;
    if ((end - start) == 0)
      break;
    *array_ptr++ = component_ptr;
    while (start < end)
      *component_ptr++ = *start++;
    *component_ptr++ = 0;
  }
  *array_ptr = NULL;
  if (count)
    *count = n_components;
  return (char **)mem_block;
}
```