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

```asm
<checkFileContent>:
  endbr64
  push   %r15
  lea    D90(%rip),%r15
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %rdi,%r12
  mov    $0x5f5e100,%edi
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x18,%rsp
  call   <allocMemory@plt>
  movq   $0x0,(%rsp)
  mov    %rax,%rbp
  cs nopw 0x0(%rax,%rax,1)
L158:
  mov    %r12,%rdx
  mov    $0x5f5e100,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L159
  movzbl 0x0(%rbp),%eax
  add    $0x1,%rbx
  xor    %r14d,%r14d
  test   %al,%al
  jne    L21
  jmp    L115
  nopl   (%rax)
L220:
  movzbl 0x1(%rbp,%r14,1),%eax
  lea    0x1(%r14),%rdx
  test   %al,%al
  je     L19
L186:
  mov    %rdx,%r14
L21:
  mov    %eax,%edx
  and    $0xffffffdf,%edx
  cmp    $0xa,%dl
  je     L220
  cmp    $0x2d,%al
  je     L220
  mov    %r13,%rsi
  mov    %r15,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  movsbl 0x0(%rbp,%r14,1),%edx
  test   %dl,%dl
  je     L239
L122:
  mov    %r14,%rcx
  mov    %rbx,%rsi
  lea    D128(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rsi
  lea    D23(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <fclose@plt>
  xor    %edi,%edi
  call   <exit@plt>
  movzbl 0x1(%rbp,%r14,1),%eax
  lea    0x1(%r14),%rdx
  test   %al,%al
  jne    L186
L19:
  cmpb   $0xa,0x0(%rbp,%r14,1)
  je     L71
  mov    %rdx,%rsi
  lea    D122(%rip),%rdi
  xor    %eax,%eax
  mov    %rdx,0x8(%rsp)
  call   <printf@plt>
  mov    0x8(%rsp),%rdx
  cmp    $0xa,%rdx
  ja     L190
L104:
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L164
  cmp    %rdx,%rax
  je     L158
L11:
  mov    %r13,%rsi
  lea    D81(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbx,%rsi
  lea    D63(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <fclose@plt>
  xor    %edi,%edi
  call   <exit@plt>
  jmp    L158
  nopl   0x0(%rax)
L239:
  lea    D31(%rip),%rdi
  call   <puts@plt>
  movsbl 0x0(%rbp,%r14,1),%edx
  jmp    L122
  nop
L164:
  mov    %rdx,(%rsp)
  jmp    L158
L181:
  mov    %r14,%rdx
  nopl   0x0(%rax)
L190:
  mov    %r13,%rsi
  lea    D124(%rip),%rdi
  xor    %eax,%eax
  mov    %rdx,0x8(%rsp)
  call   <printf@plt>
  mov    $0xa,%esi
  lea    D84(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbx,%rsi
  lea    D87(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x8(%rsp),%rsi
  lea    D132(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <fclose@plt>
  xor    %edi,%edi
  call   <exit@plt>
  mov    0x8(%rsp),%rdx
  jmp    L104
  xchg   %ax,%ax
L71:
  mov    %r14,%rsi
  lea    D122(%rip),%rdi
  call   <printf@plt>
  cmp    $0xa,%r14
  ja     L181
  test   %r14,%r14
  jne    L78
L41:
  mov    %r13,%rsi
  lea    D64(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <fclose@plt>
  xor    %edi,%edi
  call   <exit@plt>
  cmpq   $0x0,(%rsp)
  je     L158
  jmp    L11
  nopw   0x0(%rax,%rax,1)
L159:
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <rewind@plt>
  mov    (%rsp),%rax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L115:
  cmpb   $0xa,-0x1(%rbp)
  je     L86
  xor    %esi,%esi
  lea    D122(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L41
L86:
  mov    $0xffffffffffffffff,%rsi
  lea    D122(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0xffffffffffffffff,%rdx
  jmp    L190
L78:
  mov    %r14,%rdx
  jmp    L104
```

tool_calls: name: disassemble_data
arguments: label: D90
data_type: string
name: disassemble_data
arguments: label: D128
data_type: string
name: disassemble_data
arguments: label: D23
data_type: string
name: disassemble_data
arguments: label: D122
data_type: string
name: disassemble_data
arguments: label: D81
data_type: string
name: disassemble_data
arguments: label: D63
data_type: string
name: disassemble_data
arguments: label: D31
data_type: string
name: disassemble_data
arguments: label: D124
data_type: string
name: disassemble_data
arguments: label: D84
data_type: string
name: disassemble_data
arguments: label: D87
data_type: string
name: disassemble_data
arguments: label: D132
data_type: string
name: disassemble_data
arguments: label: D64
data_type: string

tool: D90: 
Error: Processed file %s has character(s) other than "*" or "-"

tool: D128: 
(row #%d has character(%d) 

tool: D23: @ column %d)



tool: D122: 
checkIndex == %d after while



tool: D81: 
Error: Processed file %s has rows with different lengths


tool: D63: (row #%d)


tool: D31: 
[DEBUG] '\0' == row[checkIndex] =(

tool: D124: 
Error: Processed file %s has too long row of characters


tool: D84: Maximum allowed amount of characters per row is: %d


tool: D87: (row #%d had 

tool: D132: %d characters)



tool: D64: 
Error: Processed file %s has an empty row


assistant: ```c
unsigned long long checkFileContent(FILE *gridFile, char *fileName) {
  char *row;
  unsigned long long rowLen = 0;
  unsigned long long checkIndex = 0;
  unsigned long long rowCounter = 0;
  row = allocMemory(100000000);
  while (NULL != fgets(row, 100000000, gridFile)) {
    while ('\0' != row[checkIndex]) {
      if (row[checkIndex] != '-' && row[checkIndex] != '*' && row[checkIndex] != '\n') {
        printf("\nError: Processed file %s has character(s) other than \"*\" or \"-\"", fileName);
        if ('\0' == row[checkIndex]) {
          printf("\n[DEBUG] \'\\0\' == row[checkIndex] =(\n");
        }
        printf("\n(row #%d has character(%d) ", rowCounter + 1, row[checkIndex], checkIndex);
        printf("@ column %d)\n\n", checkIndex);
        free(row);
        fclose(gridFile);
        exit(0);
      }
      checkIndex++;
    }
    if ('\n' == row[checkIndex - 1]) {
      checkIndex--;
    }
    printf("\ncheckIndex == %d after while\n\n", checkIndex);
    if (checkIndex > 10) {
      printf("\nError: Processed file %s has too long row of characters\n", fileName);
      printf("Maximum allowed amount of characters per row is: %d\n", 10);
      printf("(row #%d had ", rowCounter + 1);
      printf("%d characters)\n\n", checkIndex);
      free(row);
      fclose(gridFile);
      exit(0);
    }
    if (0 == checkIndex) {
      printf("\nError: Processed file %s has an empty row\n", fileName);
      free(row);
      fclose(gridFile);
      exit(0);
    }
    if (0 == rowLen) {
      rowLen = checkIndex;
    }
    if (checkIndex != rowLen) {
      printf("\nError: Processed file %s has rows with different lengths\n", fileName);
      printf("(row #%d)\n", rowCounter + 1);
      free(row);
      fclose(gridFile);
      exit(0);
    }
    rowCounter++;
    checkIndex = 0;
  }
  free(row);
  rewind(gridFile);
  return rowLen;
}
```