user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<scan_text>:
  endbr64
  push   %r12
  mov    %rdi,%rax
  push   %rbp
  sub    $0x118,%rsp
  mov    %fs:0x28,%rcx
  mov    %rcx,0x108(%rsp)
  xor    %ecx,%ecx
  movzbl (%rdi),%ecx
  cmp    $0x9,%cl
  je     L162
  cmp    $0x20,%cl
  jne    L64
  nopl   0x0(%rax)
L162:
  movzbl 0x1(%rax),%ecx
  add    $0x1,%rax
  cmp    $0x20,%cl
  je     L162
  cmp    $0x9,%cl
  je     L162
L64:
  cmp    $0x28,%cl
  je     L47
  movzbl (%rax),%ecx
  cmp    $0xa,%cl
  je     L248
  test   %cl,%cl
  mov    %rsp,%rbp
  setne  %r8b
  mov    %rbp,%rdi
  test   %r8b,%r8b
  jne    L151
  jmp    L248
  nopl   (%rax)
L348:
  cmp    $0xa,%cl
  je     L76
L151:
  test   %edx,%edx
  jne    L316
  cmp    $0x20,%cl
  je     L76
  cmp    $0x9,%cl
  je     L76
L316:
  add    $0x1,%rax
  mov    %cl,(%rdi)
  add    $0x1,%rdi
  movzbl (%rax),%ecx
  test   %cl,%cl
  jne    L348
L76:
  cmp    %rbp,%rdi
  je     L248
L0:
  movb   $0x0,(%rdi)
  test   %rsi,%rsi
  je     L201
  mov    %rax,(%rsi)
L201:
  sub    %rbp,%rdi
  add    $0x1,%edi
  call   <dsc_malloc@plt>
  mov    %rbp,%rsi
  mov    %rax,%rdi
  mov    %rax,%r12
  call   <strcpy@plt>
L20:
  mov    0x108(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L98
  add    $0x118,%rsp
  mov    %r12,%rax
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L47:
  mov    %rsp,%rbp
  lea    0x1(%rax),%rcx
  mov    $0x1,%r9d
  mov    %rbp,%rdi
  lea    D8(%rip),%r10
L347:
  movzbl (%rcx),%edx
  lea    0x1(%rdi),%r8
  lea    0x1(%rcx),%rax
  mov    %dl,-0x1(%r8)
  cmp    $0x29,%dl
  je     L299
  jg     L171
  test   %dl,%dl
  je     L0
  cmp    $0x28,%dl
  jne    L188
  add    $0x1,%r9d
L188:
  mov    %r8,%rdi
  mov    %rax,%rcx
  jmp    L347
  cs nopw 0x0(%rax,%rax,1)
L171:
  cmp    $0x5c,%dl
  jne    L188
  movzbl 0x1(%rcx),%edx
  lea    0x2(%rcx),%r11
  cmp    $0x74,%dl
  jg     L38
  cmp    $0x61,%dl
  jle    L73
  lea    -0x62(%rdx),%eax
  cmp    $0x12,%al
  ja     L38
  movzbl %al,%eax
  movslq (%r10,%rax,4),%rax
  add    %r10,%rax
  notrack jmp *%rax
  nop
L73:
  test   %dl,%dl
  je     L0
  lea    -0x30(%rdx),%eax
  cmp    $0x7,%al
  ja     L38
  movsbl 0x2(%rcx),%edx
  movsbl %al,%eax
  lea    -0x30(%rdx),%edi
  cmp    $0x7,%edi
  ja     L197
  lea    -0x30(%rdx,%rax,8),%eax
  movsbl 0x3(%rcx),%edx
  lea    0x3(%rcx),%r11
  lea    -0x30(%rdx),%edi
  cmp    $0x7,%edi
  ja     L197
  lea    -0x30(%rdx,%rax,8),%eax
  lea    0x4(%rcx),%r11
  nopw   0x0(%rax,%rax,1)
L197:
  mov    %al,-0x1(%r8)
  mov    %r11,%rax
  jmp    L188
  nopl   0x0(%rax)
L299:
  sub    $0x1,%r9d
  jne    L188
  jmp    L0
L248:
  xor    %r12d,%r12d
  jmp    L20
  nopw   0x0(%rax,%rax,1)
L38:
  mov    %dl,-0x1(%r8)
  mov    %r11,%rax
  jmp    L188
  movb   $0x8,-0x1(%r8)
  mov    %r11,%rax
  jmp    L188
  movb   $0x9,-0x1(%r8)
  mov    %r11,%rax
  jmp    L188
  movb   $0xd,-0x1(%r8)
  mov    %r11,%rax
  jmp    L188
  movb   $0xa,-0x1(%r8)
  mov    %r11,%rax
  jmp    L188
  movb   $0xc,-0x1(%r8)
  mov    %r11,%rax
  jmp    L188
L98:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
const char *scan_text(const char *line, const char **endp, int rest) {
  char buf[258];
  const char *lp = line;
  char *bp = buf;
  char *arg;
  while (*lp == ' ' || *lp == '\t')
    lp++;
  if (*lp == '(') {
    int level = 1;
    lp++;
    for (;;)
      switch (*bp++ = *lp++) {
      case '\\':
        switch (*lp++) {
        case 'n':
          bp[-1] = '\n';
          break;
        case 'r':
          bp[-1] = '\r';
          break;
        case 't':
          bp[-1] = '\t';
          break;
        case 'b':
          bp[-1] = '\b';
          break;
        case 'f':
          bp[-1] = '\f';
          break;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7': {
          int c = lp[-1] - '0';
          int d = *lp;
          if (d >= '0' && d <= '7') {
            c = (c << 3) + d - '0';
            d = *++lp;
            if (d >= '0' && d <= '7') {
              c = (c << 3) + d - '0';
              lp++;
            }
          }
          bp[-1] = c;
          break;
        }
        case 0:
          lp--;
          goto out;
        default:
          bp[-1] = lp[-1];
        }
        break;
      case '(':
        ++level;
        break;
      case ')':
        if (--level)
          break;
      case 0:
        goto out;
      default:;
      }
  out:
    --bp;
  } else {
    while (!(*lp == 0 || *lp == '\n' || (!rest && (*lp == ' ' || *lp == '\t'))))
      *bp++ = *lp++;
    if (bp == buf)
      return NULL;
  }
  *bp = 0;
  if (endp)
    *endp = lp;
  arg = dsc_malloc(bp - buf + 1);
  strcpy(arg, buf);
  return arg;
}
```