// File: /workspace/github_c_makefile_star2_O0/desion[P]terminal/src/hdict.c
// Function: hdb_reopen
int hdb_reopen(hdb_t *hdb, const char *hdict_path)
{
    hdict_t *hd, *next;
    uint32_t hash;
    char rpath[1024];
    realpath(hdict_path, rpath);

    int hdict_errno = 0;
    hdict_t *hdict = hdict_open(rpath, &hdict_errno);
    if (hdict == NULL) return hdict_errno;
    uint64_t hdid = bkdr_hash(hdict->hdict_meta->label);

    LOCK(hdb);
    for (hd = TAILQ_FIRST(&hdb->open_list); hd; hd = next) {
        next = TAILQ_NEXT(hd, link);
        if (hd->hdid == hdid && strcmp(hd->hdict_meta->label, hdict->hdict_meta->label) == 0) {
            LIST_REMOVE(hd, h_link);
            TAILQ_REMOVE(&hdb->open_list, hd, link);
            hdb->num_open--;
            TAILQ_INSERT_TAIL(&hdb->close_list, hd, link);
            hdb->num_close++;
            break;
        }
    }
    hdict->hdid = hdid;
    TAILQ_INSERT_TAIL(&hdb->open_list, hdict, link);
    /* put the hdb ptr to simple hash table */
    hash = HASH(hdict->hdid);
    LIST_INSERT_HEAD(&hdb->htab[hash], hdict, h_link);
    hdb->num_open++;
    UNLK(hdb);

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x450, %rsp            # imm = 0x450
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x2290
movl $0x0, -0x434(%rbp)
leaq -0x430(%rbp), %rdi
leaq -0x434(%rbp), %rsi
callq 0x2650
movq %rax, -0x440(%rbp)
cmpq $0x0, -0x440(%rbp)
jne 0x34ef
movl -0x434(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x3738
movq -0x440(%rbp), %rax
movq 0x58(%rax), %rdi
addq $0x5, %rdi
callq 0x5170
movq %rax, -0x448(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2490
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x364b
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq 0x50(%rax), %rax
cmpq -0x448(%rbp), %rax
jne 0x363c
movq -0x20(%rbp), %rax
movq 0x58(%rax), %rdi
addq $0x5, %rdi
movq -0x440(%rbp), %rax
movq 0x58(%rax), %rsi
addq $0x5, %rsi
callq 0x2240
cmpl $0x0, %eax
jne 0x363c
jmp 0x3575
movq -0x20(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x3594
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq %rcx, (%rax)
jmp 0x35a9
movq -0x20(%rbp), %rax
cmpq $0x0, (%rax)
je 0x35c8
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rcx, 0x8(%rax)
jmp 0x35d8
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movl 0x48(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x48(%rax)
movq -0x20(%rbp), %rax
movq $0x0, (%rax)
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
movl 0x4c(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x4c(%rax)
jmp 0x364b
jmp 0x363e
movq -0x28(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0x351f
movq -0x448(%rbp), %rcx
movq -0x440(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x440(%rbp), %rax
movq $0x0, (%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x440(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x440(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq %rcx, (%rax)
movq -0x440(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x440(%rbp), %rax
movq 0x50(%rax), %rax
andq $0x3ff, %rax            # imm = 0x3FF
movl %eax, -0x2c(%rbp)
movq -0x10(%rbp), %rax
movl -0x2c(%rbp), %ecx
movq 0x50(%rax,%rcx,8), %rax
movq -0x440(%rbp), %rcx
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x36eb
movq -0x440(%rbp), %rcx
addq $0x10, %rcx
movq -0x10(%rbp), %rax
movl -0x2c(%rbp), %edx
movq 0x50(%rax,%rdx,8), %rax
movq %rcx, 0x18(%rax)
movq -0x440(%rbp), %rdx
movq -0x10(%rbp), %rax
movl -0x2c(%rbp), %ecx
movq %rdx, 0x50(%rax,%rcx,8)
movq -0x10(%rbp), %rcx
addq $0x50, %rcx
movl -0x2c(%rbp), %eax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x440(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movl 0x48(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x48(%rax)
movq -0x10(%rbp), %rdi
callq 0x22d0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x450, %rsp            # imm = 0x450
popq %rbp
retq
nopw %cs:(%rax,%rax)