// File: /workspace/github_c_makefile_star2_O0/jech[P]dht/dht.c
// Function: dht_get_nodes
int
dht_get_nodes(struct sockaddr_in *sin, int *num,
              struct sockaddr_in6 *sin6, int *num6)
{
    int i, j;
    struct bucket *b;
    struct node *n;

    i = 0;

    /* For restoring to work without discarding too many nodes, the list
       must start with the contents of our bucket. */
    b = find_bucket(myid, AF_INET);
    if(b == NULL)
        goto no_ipv4;

    n = b->nodes;
    while(n && i < *num) {
        if(node_good(n)) {
            sin[i] = *(struct sockaddr_in*)&n->ss;
            i++;
        }
        n = n->next;
    }

    b = buckets;
    while(b && i < *num) {
        if(!in_bucket(myid, b)) {
            n = b->nodes;
            while(n && i < *num) {
                if(node_good(n)) {
                    sin[i] = *(struct sockaddr_in*)&n->ss;
                    i++;
                }
                n = n->next;
            }
        }
        b = b->next;
    }

 no_ipv4:

    j = 0;

    b = find_bucket(myid, AF_INET6);
    if(b == NULL)
        goto no_ipv6;

    n = b->nodes;
    while(n && j < *num6) {
        if(node_good(n)) {
            sin6[j] = *(struct sockaddr_in6*)&n->ss;
            j++;
        }
        n = n->next;
    }

    b = buckets6;
    while(b && j < *num6) {
        if(!in_bucket(myid, b)) {
            n = b->nodes;
            while(n && j < *num6) {
                if(node_good(n)) {
                    sin6[j] = *(struct sockaddr_in6*)&n->ss;
                    j++;
                }
                n = n->next;
            }
        }
        b = b->next;
    }

 no_ipv6:

    *num = i;
    *num6 = j;
    return i + j;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movl $0x0, -0x24(%rbp)
leaq 0x771a(%rip), %rdi      # 0x10c30
movl $0x2, %esi
callq 0x39a0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x9530
jmp 0x9683
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x38(%rbp)
movb %al, -0x39(%rbp)
je 0x9557
movl -0x24(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl (%rcx), %eax
setl %al
movb %al, -0x39(%rbp)
movb -0x39(%rbp), %al
testb $0x1, %al
jne 0x9560
jmp 0x95aa
movq -0x38(%rbp), %rdi
callq 0x4330
cmpl $0x0, %eax
je 0x9599
movq -0x8(%rbp), %rax
movslq -0x24(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq 0x18(%rcx), %rdx
movq %rdx, (%rax)
movq 0x20(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x38(%rbp), %rax
movq 0xc0(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x953c
movq 0x769f(%rip), %rax      # 0x10c50
movq %rax, -0x30(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x30(%rbp)
movb %al, -0x3a(%rbp)
je 0x95d0
movl -0x24(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl (%rcx), %eax
setl %al
movb %al, -0x3a(%rbp)
movb -0x3a(%rbp), %al
testb $0x1, %al
jne 0x95dc
jmp 0x9681
movq -0x30(%rbp), %rsi
leaq 0x7649(%rip), %rdi      # 0x10c30
callq 0x9840
cmpl $0x0, %eax
jne 0x966d
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x38(%rbp)
movb %al, -0x3b(%rbp)
je 0x9618
movl -0x24(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl (%rcx), %eax
setl %al
movb %al, -0x3b(%rbp)
movb -0x3b(%rbp), %al
testb $0x1, %al
jne 0x9621
jmp 0x966b
movq -0x38(%rbp), %rdi
callq 0x4330
cmpl $0x0, %eax
je 0x965a
movq -0x8(%rbp), %rax
movslq -0x24(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq 0x18(%rcx), %rdx
movq %rdx, (%rax)
movq 0x20(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x38(%rbp), %rax
movq 0xc0(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x95fd
jmp 0x966d
movq -0x30(%rbp), %rax
movq 0xb8(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x95b5
jmp 0x9683
movl $0x0, -0x28(%rbp)
leaq 0x759f(%rip), %rdi      # 0x10c30
movl $0xa, %esi
callq 0x39a0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x96ab
jmp 0x981e
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x38(%rbp)
movb %al, -0x3c(%rbp)
je 0x96d2
movl -0x28(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl (%rcx), %eax
setl %al
movb %al, -0x3c(%rbp)
movb -0x3c(%rbp), %al
testb $0x1, %al
jne 0x96db
jmp 0x9733
movq -0x38(%rbp), %rdi
callq 0x4330
cmpl $0x0, %eax
je 0x9722
movq -0x18(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq 0x18(%rcx), %rdx
movq %rdx, (%rax)
movq 0x20(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x28(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x30(%rcx), %ecx
movl %ecx, 0x18(%rax)
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
movq -0x38(%rbp), %rax
movq 0xc0(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x96b7
movq 0x751e(%rip), %rax      # 0x10c58
movq %rax, -0x30(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x30(%rbp)
movb %al, -0x3d(%rbp)
je 0x9759
movl -0x28(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl (%rcx), %eax
setl %al
movb %al, -0x3d(%rbp)
movb -0x3d(%rbp), %al
testb $0x1, %al
jne 0x9765
jmp 0x981c
movq -0x30(%rbp), %rsi
leaq 0x74c0(%rip), %rdi      # 0x10c30
callq 0x9840
cmpl $0x0, %eax
jne 0x9808
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x38(%rbp)
movb %al, -0x3e(%rbp)
je 0x97a5
movl -0x28(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl (%rcx), %eax
setl %al
movb %al, -0x3e(%rbp)
movb -0x3e(%rbp), %al
testb $0x1, %al
jne 0x97ae
jmp 0x9806
movq -0x38(%rbp), %rdi
callq 0x4330
cmpl $0x0, %eax
je 0x97f5
movq -0x18(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq 0x18(%rcx), %rdx
movq %rdx, (%rax)
movq 0x20(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x28(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x30(%rcx), %ecx
movl %ecx, 0x18(%rax)
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
movq -0x38(%rbp), %rax
movq 0xc0(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x978a
jmp 0x9808
movq -0x30(%rbp), %rax
movq 0xb8(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x973e
jmp 0x981e
movl -0x24(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, (%rax)
movl -0x28(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movl -0x24(%rbp), %eax
addl -0x28(%rbp), %eax
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)