// File: /workspace/github_c_makefile_star2_O0/smilingthax[P]libfontembed/cff.c
// Function: cff_read_dict
struct _CFF_DICT *cff_read_dict(const char *start,int length) // {{ {
{
  assert(start);
  const char *end=start+length;

  struct _CFF_DICT *ret=malloc(sizeof(struct _CFF_DICT)+20*sizeof(struct _CFF_VALUE));
  if (!ret) {
    fprintf(stderr,"Bad alloc: %s\n", strerror(errno));
    return NULL;
  }
  ret->alloc=20;
  ret->len=0;
  while (start<end) {
    if (ret->len>=ret->alloc) {
      ret->alloc+=20;
      struct _CFF_DICT *tmp=realloc(ret,sizeof(struct _CFF_DICT)+ret->alloc*sizeof(struct _CFF_VALUE));
      if (!tmp) {
        fprintf(stderr,"Bad realloc: %s\n", strerror(errno));
        free(ret);
        return NULL;
      }
      ret=tmp;
    }
// FIXME:  length check
    ret->data[ret->len]=cff_read_dict_token(&start);
    if (ret->data[ret->len].type==CFF_VAL_ERROR) {
      fprintf(stderr,"Bad DICT token\n");
      free(ret);
      return NULL;
    }
    ret->len++;
  }
  return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x8148
jmp 0x8167
leaq 0x27ca(%rip), %rdi      # 0xa919
leaq 0x1f67(%rip), %rsi      # 0xa0bd
movl $0x106, %edx            # imm = 0x106
leaq 0x27bd(%rip), %rcx      # 0xa91f
callq 0x40d0
movq -0x10(%rbp), %rax
movslq -0x14(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movl $0x148, %edi            # imm = 0x148
callq 0x4170
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x81c7
movq 0x6e4e(%rip), %rax      # 0xefe0
movq (%rax), %rax
movq %rax, -0x48(%rbp)
callq 0x4030
movl (%rax), %edi
callq 0x4070
movq -0x48(%rbp), %rdi
movq %rax, %rdx
leaq 0x20ba(%rip), %rsi      # 0xa26d
movb $0x0, %al
callq 0x4190
movq $0x0, -0x8(%rbp)
jmp 0x8314
movq -0x28(%rbp), %rax
movl $0x14, 0x4(%rax)
movq -0x28(%rbp), %rax
movl $0x0, (%rax)
movq -0x10(%rbp), %rax
cmpq -0x20(%rbp), %rax
jae 0x830c
movq -0x28(%rbp), %rax
movl (%rax), %eax
movq -0x28(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jl 0x8277
movq -0x28(%rbp), %rax
movl 0x4(%rax), %ecx
addl $0x14, %ecx
movl %ecx, 0x4(%rax)
movq -0x28(%rbp), %rdi
movq -0x28(%rbp), %rax
movslq 0x4(%rax), %rsi
shlq $0x4, %rsi
addq $0x8, %rsi
callq 0x41d0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x826f
movq 0x6daf(%rip), %rax      # 0xefe0
movq (%rax), %rax
movq %rax, -0x50(%rbp)
callq 0x4030
movl (%rax), %edi
callq 0x4070
movq -0x50(%rbp), %rdi
movq %rax, %rdx
leaq 0x2700(%rip), %rsi      # 0xa952
movb $0x0, %al
callq 0x4190
movq -0x28(%rbp), %rdi
callq 0x4150
movq $0x0, -0x8(%rbp)
jmp 0x8314
movq -0x30(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
addq $0x8, %rax
movq -0x28(%rbp), %rcx
movslq (%rcx), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
leaq -0x10(%rbp), %rdi
callq 0x7d20
movl %eax, %ecx
movq -0x58(%rbp), %rax
movl %ecx, -0x40(%rbp)
movq %rdx, -0x38(%rbp)
movq -0x40(%rbp), %rcx
movq %rcx, (%rax)
movq -0x38(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
addq $0x8, %rax
movq -0x28(%rbp), %rcx
movslq (%rcx), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
cmpl $0x0, (%rax)
jne 0x82fc
movq 0x6d08(%rip), %rax      # 0xefe0
movq (%rax), %rdi
leaq 0x2681(%rip), %rsi      # 0xa963
movb $0x0, %al
callq 0x4190
movq -0x28(%rbp), %rdi
callq 0x4150
movq $0x0, -0x8(%rbp)
jmp 0x8314
movq -0x28(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x81dc
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nop