user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<nis_destroygroup>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r12
  push   %rbx
  sub    $0xc0,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x28(%rbp)
  xor    %eax,%eax
  cmpq   $0x0,-0x88(%rbp)
  je     L88
  mov    -0x88(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L88
  mov    %rsp,%rax
  mov    %rax,%r12
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %rax,-0x78(%rbp)
  mov    -0x78(%rbp),%rax
  lea    0x32(%rax),%rdx
  mov    %rdx,%rax
  sub    $0x1,%rax
  mov    %rax,-0x70(%rbp)
  mov    %rdx,-0xa0(%rbp)
  movq   $0x0,-0x98(%rbp)
  mov    %rdx,-0xb0(%rbp)
  movq   $0x0,-0xa8(%rbp)
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%ebx
  mov    $0x0,%edx
  div    %rbx
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L7:
  cmp    %rdx,%rsp
  je     L72
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L7
L72:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L100
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L100:
  mov    %rsp,%rax
  add    $0x0,%rax
  mov    %rax,-0x68(%rbp)
  mov    -0x78(%rbp),%rax
  lea    0x3(%rax),%rcx
  mov    %rcx,%rax
  sub    $0x1,%rax
  mov    %rax,-0x60(%rbp)
  mov    %rcx,-0xc0(%rbp)
  movq   $0x0,-0xb8(%rbp)
  mov    %rcx,-0xd0(%rbp)
  movq   $0x0,-0xc8(%rbp)
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rcx,%rax
  mov    $0x10,%ebx
  mov    $0x0,%edx
  div    %rbx
  imul   $0x10,%rax,%rax
  mov    %rax,%rsi
  and    $0xfffffffffffff000,%rsi
  mov    %rsp,%rdx
  sub    %rsi,%rdx
L12:
  cmp    %rdx,%rsp
  je     L133
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L12
L133:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L89
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L89:
  mov    %rsp,%rax
  add    $0x0,%rax
  mov    %rax,-0x58(%rbp)
  mov    -0x78(%rbp),%rax
  lea    0x3(%rax),%rbx
  mov    %rbx,%rax
  sub    $0x1,%rax
  mov    %rax,-0x50(%rbp)
  mov    %rbx,-0xe0(%rbp)
  movq   $0x0,-0xd8(%rbp)
  mov    %rbx,%r14
  mov    $0x0,%r15d
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rbx,%rax
  mov    $0x10,%edi
  mov    $0x0,%edx
  div    %rdi
  imul   $0x10,%rax,%rax
  mov    %rax,%rsi
  and    $0xfffffffffffff000,%rsi
  mov    %rsp,%rdx
  sub    %rsi,%rdx
L29:
  cmp    %rdx,%rsp
  je     L28
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L29
L28:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L52
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L52:
  mov    %rsp,%rax
  add    $0x0,%rax
  mov    %rax,-0x48(%rbp)
  mov    %ecx,%eax
  sub    $0x1,%eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%rcx
  mov    -0x88(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nis_leaf_of_r@plt>
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stpcpy@plt>
  mov    %rax,-0x40(%rbp)
  mov    -0x40(%rbp),%rax
  movabs $0x5f7370756f72672e,%rdi
  mov    %rdi,(%rax)
  movl   $0x726964,0x8(%rax)
  addq   $0xb,-0x40(%rbp)
  mov    %ebx,%eax
  sub    $0x1,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rcx
  mov    -0x88(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <nis_domain_of_r@plt>
  mov    %rax,-0x38(%rbp)
  cmpq   $0x0,-0x38(%rbp)
  je     L63
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L63
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  movb   $0x2e,(%rax)
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L63:
  mov    -0x68(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <nis_remove@plt>
  mov    %rax,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <NIS_RES_STATUS@plt>
  mov    %eax,-0x7c(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <nis_freeresult@plt>
  mov    -0x7c(%rbp),%eax
  mov    %r12,%rsp
  jmp    L144
L88:
  mov    D5(%rip),%rax
  mov    (%rax),%eax
L144:
  mov    -0x28(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L99
  call   <__stack_chk_fail@plt>
L99:
  lea    -0x20(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

assistant: ```c
nis_error nis_destroygroup(const_nis_name group) {
  if (group != NULL && group[0] != '\0') {
    size_t grouplen = strlen(group);
    char buf[grouplen + 50];
    char leafbuf[grouplen + 3];
    char domainbuf[grouplen + 3];
    nis_error status;
    nis_result *res;
    char *cp, *cp2;
    cp = stpcpy(buf, nis_leaf_of_r(group, leafbuf, sizeof(leafbuf) - 1));
    cp = stpcpy(cp, ".groups_dir");
    cp2 = nis_domain_of_r(group, domainbuf, sizeof(domainbuf) - 1);
    if (cp2 != NULL && cp2[0] != '\0') {
      *cp++ = '.';
      stpcpy(cp, cp2);
    }
    res = nis_remove(buf, NULL);
    status = NIS_RES_STATUS(res);
    nis_freeresult(res);
    return status;
  } else
    return NIS_FAIL;
}
```