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

```asm
<gg_message_text_to_html_110_buff>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  movslq %edx,%rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  cmp    $0xffffffff,%ebx
  je     L228
L80:
  lea    0x10(%rsp),%r14
  mov    $0x6,%ecx
  mov    %r13,%rdi
  movq   $0x0,0x10(%rsp)
  lea    D74(%rip),%rdx
  mov    %r14,%rsi
  lea    D7(%rip),%r12
  call   <gg_append@plt>
  xor    %r8d,%r8d
  test   %rbx,%rbx
  je     L144
  nopl   0x0(%rax,%rax,1)
L182:
  movzbl 0x0(%rbp,%r8,1),%eax
  lea    0x1(%r8),%r15
  cmp    $0x3c,%al
  je     L192
  cmp    $0x27,%al
  jg     L127
  cmp    $0x9,%al
  jle    L2
  lea    -0xa(%rax),%edx
  cmp    $0x1d,%dl
  ja     L138
  movzbl %dl,%edx
  movslq (%r12,%rdx,4),%rdx
  add    %r12,%rdx
  notrack jmp *%rdx
  nopl   0x0(%rax,%rax,1)
L2:
  cmp    $0xc2,%al
  jne    L138
  cmpb   $0xa0,0x0(%rbp,%r15,1)
  je     L171
  nopl   0x0(%rax,%rax,1)
L138:
  mov    0x10(%rsp),%rdx
  test   %r13,%r13
  je     L208
  mov    %al,0x0(%r13,%rdx,1)
L208:
  add    $0x1,%rdx
  mov    %r15,%r8
  mov    %rdx,0x10(%rsp)
  nopl   0x0(%rax,%rax,1)
L72:
  cmp    %r8,%rbx
  ja     L182
L144:
  mov    $0x7,%ecx
  lea    D68(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  test   %r13,%r13
  je     L107
  mov    0x10(%rsp),%rax
  movb   $0x0,0x0(%r13,%rax,1)
L134:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L93
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
  mov    $0x6,%ecx
  lea    D28(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L72
  nopl   0x0(%rax)
  mov    $0x5,%ecx
  lea    D62(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L72
  nopw   0x0(%rax,%rax,1)
  mov    $0x6,%ecx
  lea    D55(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L72
  nop
  mov    $0x4,%ecx
  lea    D24(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L72
  nop
L127:
  cmp    $0x3e,%al
  jne    L138
  mov    $0x4,%ecx
  lea    D96(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L72
  nopw   0x0(%rax,%rax,1)
L192:
  mov    $0x4,%ecx
  lea    D23(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L72
  nop
  mov    %r15,%r8
  jmp    L72
  nopl   0x0(%rax,%rax,1)
L107:
  mov    0x10(%rsp),%rax
  jmp    L134
  nopw   0x0(%rax,%rax,1)
L228:
  mov    %rsi,%rdi
  call   <strlen@plt>
  movslq %eax,%rbx
  jmp    L80
L171:
  mov    $0x6,%ecx
  mov    %r14,%rsi
  mov    %r13,%rdi
  mov    %r8,0x8(%rsp)
  lea    D71(%rip),%rdx
  call   <gg_append@plt>
  mov    0x8(%rsp),%r8
  add    $0x2,%r8
  jmp    L72
L93:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D74
type: string
name: parse_data
arguments: data_tag: D68
type: string
name: parse_data
arguments: data_tag: D28
type: string
name: parse_data
arguments: data_tag: D62
type: string
name: parse_data
arguments: data_tag: D55
type: string
name: parse_data
arguments: data_tag: D24
type: string
name: parse_data
arguments: data_tag: D96
type: string
name: parse_data
arguments: data_tag: D23
type: string
name: parse_data
arguments: data_tag: D71
type: string

tool: D74: <span>

tool: D68: </span>

tool: D28: &apos;

tool: D62: &amp;

tool: D55: &quot;

tool: D24: <br>

tool: D96: &gt;

tool: D23: &lt;

tool: D71: &nbsp;

assistant: ```c
size_t gg_message_text_to_html_110_buff(char *dst, const char *text, ssize_t text_len) {
  size_t i, dst_len;
  if (text_len == -1)
    text_len = strlen(text);
  dst_len = 0;
  gg_append(dst, &dst_len, "<span>", 6);
  for (i = 0; i < (size_t)text_len; i++) {
    char c = text[i];
    if (c == '<')
      gg_append(dst, &dst_len, "&lt;", 4);
    else if (c == '>')
      gg_append(dst, &dst_len, "&gt;", 4);
    else if (c == '&')
      gg_append(dst, &dst_len, "&amp;", 5);
    else if (c == '"')
      gg_append(dst, &dst_len, "&quot;", 6);
    else if (c == '\'')
      gg_append(dst, &dst_len, "&apos;", 6);
    else if (c == '\n')
      gg_append(dst, &dst_len, "<br>", 4);
    else if (c == '\r')
      continue;
    else if (c == '\xc2' && text[i + 1] == '\xa0') {
      gg_append(dst, &dst_len, "&nbsp;", 6);
      i++;
    } else {
      if (dst)
        dst[dst_len] = c;
      dst_len++;
    }
  }
  gg_append(dst, &dst_len, "</span>", 7);
  if (dst)
    dst[dst_len] = '\0';
  return dst_len;
}
```