user: 请将以下的汇编代码转换成C语言代码:

```asm
<quotaStrglob>:
  endbr64
  mov    %rdi,%rax
  mov    %rsi,%r9
  movzbl (%rdi),%esi
  movsbl %sil,%edx
  test   %edx,%edx
  je     L291
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  lea    0x1(%rdi),%rdi
  lea    0x1(%r9),%rcx
  mov    $0x0,%r12d
  mov    $0x1,%ebp
  jmp    L363
L100:
  lea    0x1(%rdi),%r12
  movsbl (%rdi),%ebp
  cmp    $0x3f,%ebp
  je     L224
  cmp    $0x2a,%ebp
  je     L224
  mov    %r12,%r13
  mov    %rdi,%r12
  jmp    L78
L375:
  mov    %r13,%r12
L224:
  cmp    $0x3f,%ebp
  je     L516
L479:
  lea    0x1(%r12),%r13
  movsbl (%r12),%ebp
  cmp    $0x3f,%ebp
  je     L375
  cmp    $0x2a,%ebp
  je     L375
L78:
  mov    $0x1,%r8d
  test   %ebp,%ebp
  je     L104
  cmp    $0x5b,%ebp
  je     L193
L86:
  lea    0x1(%rbx),%r12
  movsbl (%rbx),%r8d
  test   %r8d,%r8d
  je     L104
L127:
  cmp    %ebp,%r8d
  je     L159
  add    $0x1,%r12
  movsbl -0x1(%r12),%r8d
  test   %r8d,%r8d
  jne    L127
  jmp    L104
L516:
  lea    0x1(%rbx),%rax
  cmpb   $0x0,(%rbx)
  je     L388
  mov    %rax,%rbx
  jmp    L479
L193:
  movzbl (%rbx),%ebp
  test   %bpl,%bpl
  je     L271
L401:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <quotaStrglob>
  test   %eax,%eax
  jne    L271
  add    $0x1,%rbx
  movzbl (%rbx),%ebp
  test   %bpl,%bpl
  jne    L401
L271:
  test   %bpl,%bpl
  setne  %r8b
  movzbl %r8b,%r8d
  jmp    L104
L159:
  mov    %r12,%rsi
  mov    %r13,%rdi
  call   <quotaStrglob>
  test   %eax,%eax
  jne    L208
  mov    %r12,%rbx
  jmp    L86
L33:
  mov    %rcx,%r9
  cmpb   $0x0,-0x1(%rcx)
  je     L134
  mov    %rdi,%rax
L335:
  lea    0x1(%rax),%rdi
  movzbl (%rax),%esi
  movsbl %sil,%edx
  add    $0x1,%rcx
  test   %edx,%edx
  je     L155
L363:
  lea    -0x1(%rcx),%rbx
  cmp    $0x2a,%edx
  je     L100
  cmp    $0x3f,%edx
  je     L33
  cmp    $0x5b,%edx
  je     L446
  mov    %rcx,%r9
  cmp    %sil,-0x1(%rcx)
  jne    L489
  mov    %rdi,%rax
  jmp    L335
L446:
  mov    %rcx,%r9
  movsbl -0x1(%rcx),%r8d
  test   %r8d,%r8d
  je     L104
  movsbl 0x1(%rax),%edx
  cmp    $0x5e,%edx
  je     L64
  add    $0x2,%rax
  mov    %r12d,%r13d
L182:
  mov    $0x0,%edi
  cmp    $0x5d,%edx
  je     L60
L137:
  test   %edx,%edx
  je     L297
  mov    %r12d,%r10d
  cmp    $0x5d,%edx
  jne    L374
L297:
  test   %edx,%edx
  je     L199
  cmp    %edi,%r13d
  jne    L335
L199:
  mov    $0x0,%r8d
  jmp    L104
L64:
  movsbl 0x2(%rax),%edx
  lea    0x3(%rax),%rax
  mov    %ebp,%r13d
  jmp    L182
L60:
  cmp    $0x5d,%r8d
  sete   %dil
  movzbl %dil,%edi
  movsbl (%rax),%edx
  lea    0x1(%rax),%rax
  jmp    L137
L61:
  mov    %edx,%r10d
  mov    %rax,%rsi
  cmp    %edx,%r8d
  cmove  %ebp,%edi
L103:
  lea    0x1(%rsi),%rax
  movsbl (%rsi),%edx
  test   %edx,%edx
  je     L297
  cmp    $0x5d,%edx
  je     L297
L374:
  cmp    $0x2d,%edx
  jne    L61
  movzbl (%rax),%r11d
  test   %r11b,%r11b
  setne  %bl
  cmp    $0x5d,%r11b
  setne  %sil
  test   %sil,%bl
  je     L61
  test   %r10d,%r10d
  jle    L61
  lea    0x1(%rax),%rsi
  cmp    %r10d,%r8d
  jl     L226
  movsbl %r11b,%r11d
  cmp    %r11d,%r8d
  jg     L226
  mov    %r12d,%r10d
  mov    $0x1,%edi
  jmp    L103
L226:
  mov    %r12d,%r10d
  jmp    L103
L155:
  cmpb   $0x0,(%r9)
  sete   %r8b
  movzbl %r8b,%r8d
L104:
  mov    %r8d,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L388:
  mov    $0x0,%r8d
  jmp    L104
L208:
  mov    $0x1,%r8d
  jmp    L104
L134:
  mov    $0x0,%r8d
  jmp    L104
L489:
  mov    $0x0,%r8d
  jmp    L104
L291:
  cmpb   $0x0,(%r9)
  sete   %r8b
  movzbl %r8b,%r8d
  mov    %r8d,%eax
  ret
```

assistant: ```c
int quotaStrglob(const char *zGlob, const char *z) {
  int c, c2;
  int invert;
  int seen;
  while ((c = (*(zGlob++))) != 0) {
    if (c == '*') {
      while ((c = (*(zGlob++))) == '*' || c == '?') {
        if (c == '?' && (*(z++)) == 0)
          return 0;
      }
      if (c == 0) {
        return 1;
      } else if (c == '[') {
        while (*z && quotaStrglob(zGlob - 1, z) == 0) {
          z++;
        }
        return (*z) != 0;
      }
      while ((c2 = (*(z++))) != 0) {
        while (c2 != c) {
          c2 = *(z++);
          if (c2 == 0)
            return 0;
        }
        if (quotaStrglob(zGlob, z))
          return 1;
      }
      return 0;
    } else if (c == '?') {
      if ((*(z++)) == 0)
        return 0;
    } else if (c == '[') {
      int prior_c = 0;
      seen = 0;
      invert = 0;
      c = *(z++);
      if (c == 0)
        return 0;
      c2 = *(zGlob++);
      if (c2 == '^') {
        invert = 1;
        c2 = *(zGlob++);
      }
      if (c2 == ']') {
        if (c == ']')
          seen = 1;
        c2 = *(zGlob++);
      }
      while (c2 && c2 != ']') {
        if (c2 == '-' && zGlob[0] != ']' && zGlob[0] != 0 && prior_c > 0) {
          c2 = *(zGlob++);
          if (c >= prior_c && c <= c2)
            seen = 1;
          prior_c = 0;
        } else {
          if (c == c2) {
            seen = 1;
          }
          prior_c = c2;
        }
        c2 = *(zGlob++);
      }
      if (c2 == 0 || (seen ^ invert) == 0)
        return 0;
    } else {
      if (c != (*(z++)))
        return 0;
    }
  }
  return *z == 0;
}
```