// File: /workspace/github_c_makefile_star2_O0/rouming[P]io/io.c
// Function: buf_check
static int buf_check(struct io_buf *buf)
{
	int i;
	struct iovec *iov;

	if (buf->iov_num == 0)
		return -EINVAL;
	if (buf->iov_num >= ARRAY_SIZE(buf->iov))
		return -EINVAL;
	for (i = 0; i < buf->iov_num - 1; i++) {
		/* Only last vari length element can be zero */
		if (!buf->iov[i].iov_len)
			return -EINVAL;
	}
	iov = &buf->iov[buf->iov_num - 1];
	/* Last, not vari length iov must be with valid length */
	if (!buf_vari_len(buf) && !iov->iov_len)
		return -EINVAL;
	/* Last, vari length iov must be fully zeroed or fully alloc'ed */
	if (buf_vari_len(buf) && (!!iov->iov_len ^ !!iov->iov_base))
		return -EINVAL;
	if (buf->pos.iov_ind > buf->iov_num)
		return -EINVAL;
	iov = &buf->iov[buf->pos.iov_ind];
	if (iov->iov_base == NULL && buf->pos.iov_off)
		return -EINVAL;
	if (iov->iov_len && buf->pos.iov_off > iov->iov_len) {
		assert(0);
		return -EINVAL;
	}

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x120(%rax)
jne 0x3ad6
movl $0xffffffea, -0x4(%rbp) # imm = 0xFFFFFFEA
jmp 0x3c73
movq -0x10(%rbp), %rax
cmpq $0x10, 0x120(%rax)
jb 0x3af0
movl $0xffffffea, -0x4(%rbp) # imm = 0xFFFFFFEA
jmp 0x3c73
movl $0x0, -0x14(%rbp)
movslq -0x14(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x120(%rcx), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x3b3e
movq -0x10(%rbp), %rax
movslq -0x14(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
cmpq $0x0, 0x8(%rax)
jne 0x3b31
movl $0xffffffea, -0x4(%rbp) # imm = 0xFFFFFFEA
jmp 0x3c73
jmp 0x3b33
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x3af7
movq -0x10(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x120(%rcx), %rcx
subq $0x1, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rdi
callq 0x3810
testb $0x1, %al
jne 0x3b80
movq -0x20(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x3b80
movl $0xffffffea, -0x4(%rbp) # imm = 0xFFFFFFEA
jmp 0x3c73
movq -0x10(%rbp), %rdi
callq 0x3810
testb $0x1, %al
jne 0x3b8f
jmp 0x3bce
movq -0x20(%rbp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movq -0x20(%rbp), %rcx
cmpq $0x0, (%rcx)
setne %cl
xorb $-0x1, %cl
xorb $-0x1, %cl
andb $0x1, %cl
movzbl %cl, %ecx
xorl %ecx, %eax
cmpl $0x0, %eax
je 0x3bce
movl $0xffffffea, -0x4(%rbp) # imm = 0xFFFFFFEA
jmp 0x3c73
movq -0x10(%rbp), %rax
movq 0x100(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x120(%rcx), %rax
jbe 0x3bf2
movl $0xffffffea, -0x4(%rbp) # imm = 0xFFFFFFEA
jmp 0x3c73
movq -0x10(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x100(%rcx), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x3c2d
movq -0x10(%rbp), %rax
cmpq $0x0, 0x108(%rax)
je 0x3c2d
movl $0xffffffea, -0x4(%rbp) # imm = 0xFFFFFFEA
jmp 0x3c73
movq -0x20(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x3c6c
movq -0x10(%rbp), %rax
movq 0x108(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jbe 0x3c6c
leaq 0x3a35(%rip), %rdi      # 0x7689
leaq 0x3875(%rip), %rsi      # 0x74d0
movl $0x114, %edx            # imm = 0x114
leaq 0x3998(%rip), %rcx      # 0x75ff
callq 0x10d0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)