// File: /workspace/github_c_makefile_star2_O0/lengjingzju[P]json/json.c
// Function: get_file_parse_ptr
static int _get_file_parse_ptr(json_parse_t *parse_ptr, int read_offset, size_t read_size, char **sstr)
{
    size_t offset = 0;
    ssize_t size = 0, rsize = 0;

    offset = parse_ptr->offset + read_offset;
    size = (ssize_t)(parse_ptr->readed - offset);

    if (likely(offset + read_size <= parse_ptr->readed)) {
        *sstr = parse_ptr->str + offset;
    } else if (parse_ptr->read_size == 0) {
        if (size >= 0) {
            *sstr = parse_ptr->str + offset;
        } else {
            *sstr = JSON_PARSE_ERROR_STR; /* Reduce the judgment pointer is NULL. */
            size = 0;
        }
    } else {
        size = (ssize_t)(parse_ptr->readed - parse_ptr->offset);
        if (size && parse_ptr->offset)
            memmove(parse_ptr->str, parse_ptr->str + parse_ptr->offset, size);
        parse_ptr->offset = 0;
        parse_ptr->readed = size;

        if (read_size > parse_ptr->size) {
            while (read_size > parse_ptr->size)
                parse_ptr->size += parse_ptr->read_size;

            char *new_str = (char *)json_realloc(parse_ptr->str, parse_ptr->size + 1);
            if (new_str) {
                parse_ptr->str = new_str;
            } else {
                JsonErr("malloc failed!\n");
                json_free(parse_ptr->str);
                parse_ptr->str = NULL;
                *sstr = JSON_PARSE_ERROR_STR; /* Reduce the judgment pointer is NULL. */
                return 0;
            }
        }

        size = (ssize_t)(parse_ptr->size - parse_ptr->readed);
        if ((rsize = read(parse_ptr->fd, parse_ptr->str + parse_ptr->readed, size)) != size)
            parse_ptr->read_size = 0; /* finish readding file */
        parse_ptr->readed += rsize < 0 ? 0 : rsize;
        parse_ptr->str[parse_ptr->readed] = '\0';

        *sstr = parse_ptr->str + read_offset;
        size = (ssize_t)(parse_ptr->readed - read_offset);
    }

    return size;
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x48(%rsp)
movl %esi, 0x44(%rsp)
movq %rdx, 0x38(%rsp)
movq %rcx, 0x30(%rsp)
movq $0x0, 0x28(%rsp)
movq $0x0, 0x20(%rsp)
movq $0x0, 0x18(%rsp)
movq 0x48(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x44(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0x28(%rsp)
movq 0x48(%rsp), %rax
movq 0x18(%rax), %rax
subq 0x28(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x28(%rsp), %rax
addq 0x38(%rsp), %rax
movq 0x48(%rsp), %rcx
cmpq 0x18(%rcx), %rax
setbe %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0xacbd
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rcx
addq 0x28(%rsp), %rcx
movq 0x30(%rsp), %rax
movq %rcx, (%rax)
jmp 0xaf11
movq 0x48(%rsp), %rax
cmpq $0x0, 0x20(%rax)
jne 0xad06
cmpq $0x0, 0x20(%rsp)
jl 0xace9
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rcx
addq 0x28(%rsp), %rcx
movq 0x30(%rsp), %rax
movq %rcx, (%rax)
jmp 0xad01
movq 0x30(%rsp), %rax
leaq 0x603a(%rip), %rcx      # 0x10d2f
movq %rcx, (%rax)
movq $0x0, 0x20(%rsp)
jmp 0xaf0f
movq 0x48(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x48(%rsp), %rcx
subq 0x10(%rcx), %rax
movq %rax, 0x20(%rsp)
cmpq $0x0, 0x20(%rsp)
je 0xad56
movq 0x48(%rsp), %rax
cmpq $0x0, 0x10(%rax)
je 0xad56
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rdi
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rsi
movq 0x48(%rsp), %rax
addq 0x10(%rax), %rsi
movq 0x20(%rsp), %rdx
callq 0x1190
movq 0x48(%rsp), %rax
movq $0x0, 0x10(%rax)
movq 0x20(%rsp), %rcx
movq 0x48(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x38(%rsp), %rax
movq 0x48(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jbe 0xae4a
jmp 0xad87
movq 0x38(%rsp), %rax
movq 0x48(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jbe 0xadaf
movq 0x48(%rsp), %rax
movq 0x20(%rax), %rcx
movq 0x48(%rsp), %rax
addq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
jmp 0xad87
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rdi
movq 0x48(%rsp), %rax
movq 0x8(%rax), %rsi
addq $0x1, %rsi
callq 0x1180
movq %rax, 0x10(%rsp)
cmpq $0x0, 0x10(%rsp)
je 0xade7
movq 0x10(%rsp), %rcx
movq 0x48(%rsp), %rax
movq %rcx, 0x30(%rax)
jmp 0xae48
jmp 0xade9
leaq 0x5c04(%rip), %rdi      # 0x109f4
leaq 0x5f3a(%rip), %rsi      # 0x10d31
movl $0x884, %edx            # imm = 0x884
movb $0x0, %al
callq 0x10c0
leaq 0x5bfc(%rip), %rdi      # 0x10a06
movb $0x0, %al
callq 0x10c0
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x1030
movq 0x48(%rsp), %rax
movq $0x0, 0x30(%rax)
movq 0x30(%rsp), %rax
leaq 0x5ef7(%rip), %rcx      # 0x10d2f
movq %rcx, (%rax)
movl $0x0, 0x54(%rsp)
jmp 0xaf1a
jmp 0xae4a
movq 0x48(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x48(%rsp), %rcx
subq 0x18(%rcx), %rax
movq %rax, 0x20(%rsp)
movq 0x48(%rsp), %rax
movl (%rax), %edi
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rsi
movq 0x48(%rsp), %rax
addq 0x18(%rax), %rsi
movq 0x20(%rsp), %rdx
callq 0x1110
movq %rax, 0x18(%rsp)
cmpq 0x20(%rsp), %rax
je 0xae9d
movq 0x48(%rsp), %rax
movq $0x0, 0x20(%rax)
cmpq $0x0, 0x18(%rsp)
jge 0xaeae
xorl %eax, %eax
movq %rax, 0x8(%rsp)
jmp 0xaeb8
movq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rcx
movq 0x48(%rsp), %rax
addq 0x18(%rax), %rcx
movq %rcx, 0x18(%rax)
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rax
movq 0x48(%rsp), %rcx
movq 0x18(%rcx), %rcx
movb $0x0, (%rax,%rcx)
movq 0x48(%rsp), %rax
movq 0x30(%rax), %rcx
movslq 0x44(%rsp), %rax
addq %rax, %rcx
movq 0x30(%rsp), %rax
movq %rcx, (%rax)
movq 0x48(%rsp), %rax
movq 0x18(%rax), %rax
movslq 0x44(%rsp), %rcx
subq %rcx, %rax
movq %rax, 0x20(%rsp)
jmp 0xaf11
movq 0x20(%rsp), %rax
movl %eax, 0x54(%rsp)
movl 0x54(%rsp), %eax
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)