user: 这段汇编代码用C语言表示是什么样的？

```asm
<isstrstr>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x110,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x1108(%rsp)
  xor    %eax,%eax
  test   %rdi,%rdi
  je     L183
  mov    %rsi,%rbp
  mov    %edx,%r12d
  test   %rsi,%rsi
  je     L183
  cmpb   $0x0,(%rdi)
  je     L80
  cmpb   $0x0,(%rsi)
  je     L80
  movb   $0x0,0x100(%rsp)
  lea    0x100(%rsp),%rax
  mov    $0xfe0,%edx
  mov    %rdi,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  movb   $0x0,0x10e0(%rsp)
  test   %r12d,%r12d
  jne    L108
  movzbl 0x100(%rsp),%edi
  test   %dil,%dil
  je     L108
  lea    0x100(%rsp),%rbx
  jmp    L74
L90:
  add    $0x1,%rbx
  movzbl (%rbx),%edi
  test   %dil,%dil
  je     L108
L74:
  movsbl %dil,%edi
  call   <isupper@plt>
  test   %rax,%rax
  je     L90
  movsbl (%rbx),%edi
  call   <tolower@plt>
  mov    %al,(%rbx)
  jmp    L90
L125:
  movb   $0x0,(%rsp)
  mov    $0xff,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncpy@plt>
  movb   $0x0,0xff(%rsp)
  mov    %rbx,%rbp
L124:
  test   %r12d,%r12d
  je     L139
L143:
  lea    0x100(%rsp),%rdi
  mov    %r13,%rsi
  call   <strstr@plt>
  test   %rax,%rax
  jne    L198
  test   %rbp,%rbp
  je     L218
L81:
  mov    $0x2c,%esi
  mov    %rbp,%rdi
  call   <strchr@plt>
  mov    %rax,%rbx
  test   %rax,%rax
  je     L125
  mov    %rax,%r14
  sub    %rbp,%r14
  sub    $0x1,%r14d
  mov    %r14d,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <memcpy@plt>
  movslq %r14d,%r14
  movb   $0x0,(%rsp,%r14,1)
  lea    0x1(%rbx),%rbp
  jmp    L124
L139:
  movzbl (%rsp),%edi
  test   %dil,%dil
  je     L143
  mov    %rsp,%rbx
  jmp    L113
L19:
  add    $0x1,%rbx
  movzbl (%rbx),%edi
  test   %dil,%dil
  je     L143
L113:
  movsbl %dil,%edi
  call   <isupper@plt>
  test   %rax,%rax
  je     L19
  movsbl (%rbx),%edi
  call   <tolower@plt>
  mov    %al,(%rbx)
  jmp    L19
L108:
  mov    %rsp,%r13
  jmp    L81
L218:
  mov    $0x0,%eax
  jmp    L80
L183:
  mov    $0x0,%eax
L80:
  mov    0x1108(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L228
  add    $0x1110,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L198:
  mov    $0x1,%eax
  jmp    L80
L228:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int isstrstr(char *string, char *snippets, int iscase) {
  int status = 0;
  char snip[256], *snipptr = snippets, delim = ',', *delimptr = NULL;
  char stringcp[4096], *cp = stringcp;
  if (string == NULL || snippets == NULL)
    goto end_of_job;
  if (*string == '\000' || *snippets == '\000')
    goto end_of_job;
  if ((stringcp) != NULL && (4064) >= 0) {
    char *thissource = (string);
    (stringcp)[0] = '\000';
    if ((4064) > 0 && thissource != NULL) {
      strncpy((stringcp), thissource, (4064));
      (stringcp)[(4064)] = '\000';
    }
  };
  if (!iscase)
    for (cp = stringcp; *cp != '\000'; cp++)
      if (isupper(*cp))
        *cp = tolower(*cp);
  while (snipptr != NULL) {
    if ((delimptr = strchr(snipptr, delim)) == NULL) {
      if ((snip) != NULL && (255) >= 0) {
        char *thissource = (snipptr);
        (snip)[0] = '\000';
        if ((255) > 0 && thissource != NULL) {
          strncpy((snip), thissource, (255));
          (snip)[(255)] = '\000';
        }
      };
      snipptr = NULL;
    } else {
      int sniplen = (int)(delimptr - snipptr) - 1;
      memcpy(snip, snipptr, sniplen);
      snip[sniplen] = '\000';
      snipptr = delimptr + 1;
    }
    if (!iscase)
      for (cp = snip; *cp != '\000'; cp++)
        if (isupper(*cp))
          *cp = tolower(*cp);
    if (strstr(stringcp, snip) != NULL) {
      status = 1;
      break;
    }
  }
end_of_job:
  return (status);
}
```