// File: /workspace/github_c_makefile_star2_O0/TurkeyMcMac[P]ts3d/src/read-lines.c
// Function: read_lines
struct string *read_lines(FILE *file, size_t *nlines)
{
	int errnum;
	size_t lines_cap;
	struct string *lines;
	*nlines = 0;
	lines_cap = 16;
	lines = xmalloc(lines_cap * sizeof(*lines));
	char buf[BUFSIZ];
	size_t nread = sizeof(buf);
	char *head = buf + nread;
	errno = 0;
	do {
		size_t line_cap = 16;
		struct string *line = GROWE(lines, *nlines, lines_cap);
		line->len = 0;
		line->text = xmalloc(line_cap);
		for (bool last_one = false; !last_one;) {
			if (head >= buf + nread) {
				nread = fread(buf, 1, sizeof(buf), file);
				last_one = nread < sizeof(buf);
				head = buf;
			}
			char *nl = memchr(head, '\n', nread + buf - head);
			if (nl) {
				last_one = true;
			} else if (head == buf + nread
			        && line->len == 0
				&& feof(file))
			{
				--*nlines;
				free(line->text);
				goto done;
			} else {
				nl = buf + nread;
			}
			char *added = string_grow(line, &line_cap, nl - head);
			memcpy(added, head, nl - head);
			head = nl + 1;
		}
		if (line->len != 0) string_shrink_to_fit(line);
	} while (!errno && !(feof(file) && head >= buf + nread));
done:
	if (errno) {
		for (size_t i = 0; i < *nlines; ++i) {
			free(lines[i].text);
		}
		free(lines);
		lines = NULL;
	}
	errnum = errno;
	fclose(file);
	errno = errnum;
	return lines;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2080, %rsp           # imm = 0x2080
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq $0x0, (%rax)
movq $0x10, -0x20(%rbp)
movq -0x20(%rbp), %rdi
shlq $0x4, %rdi
callq 0x10b80
movq %rax, -0x28(%rbp)
movq $0x2000, -0x2038(%rbp) # imm = 0x2000
leaq -0x2030(%rbp), %rax
addq -0x2038(%rbp), %rax
movq %rax, -0x2040(%rbp)
callq 0x2320
movl $0x0, (%rax)
movq $0x10, -0x2048(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x28(%rbp), %rdi
leaq -0x20(%rbp), %rdx
movl $0x10, %ecx
callq 0x6700
movq %rax, -0x2050(%rbp)
movq -0x2050(%rbp), %rax
movq $0x0, (%rax)
movq -0x2048(%rbp), %rdi
callq 0x10b80
movq %rax, %rcx
movq -0x2050(%rbp), %rax
movq %rcx, 0x8(%rax)
movb $0x0, -0x2051(%rbp)
movb -0x2051(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xf03a
jmp 0xf1b4
movq -0x2040(%rbp), %rax
leaq -0x2030(%rbp), %rcx
addq -0x2038(%rbp), %rcx
cmpq %rcx, %rax
jb 0xf099
leaq -0x2030(%rbp), %rdi
movq -0x8(%rbp), %rcx
movl $0x1, %esi
movl $0x2000, %edx           # imm = 0x2000
callq 0x22e0
movq %rax, -0x2038(%rbp)
cmpq $0x2000, -0x2038(%rbp) # imm = 0x2000
setb %al
andb $0x1, %al
movb %al, -0x2051(%rbp)
leaq -0x2030(%rbp), %rax
movq %rax, -0x2040(%rbp)
movq -0x2040(%rbp), %rdi
movq -0x2038(%rbp), %rax
leaq -0x2030(%rbp), %rdx
addq %rax, %rdx
movq -0x2040(%rbp), %rax
subq %rax, %rdx
movl $0xa, %esi
callq 0x20d0
movq %rax, -0x2060(%rbp)
cmpq $0x0, -0x2060(%rbp)
je 0xf0df
movb $0x1, -0x2051(%rbp)
jmp 0xf14e
movq -0x2040(%rbp), %rax
leaq -0x2030(%rbp), %rcx
addq -0x2038(%rbp), %rcx
cmpq %rcx, %rax
jne 0xf137
movq -0x2050(%rbp), %rax
cmpq $0x0, (%rax)
jne 0xf137
movq -0x8(%rbp), %rdi
callq 0x23e0
cmpl $0x0, %eax
je 0xf137
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $-0x1, %rcx
movq %rcx, (%rax)
movq -0x2050(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x2580
jmp 0xf23b
leaq -0x2030(%rbp), %rax
addq -0x2038(%rbp), %rax
movq %rax, -0x2060(%rbp)
jmp 0xf14e
movq -0x2050(%rbp), %rdi
movq -0x2060(%rbp), %rdx
movq -0x2040(%rbp), %rax
subq %rax, %rdx
leaq -0x2048(%rbp), %rsi
callq 0xf830
movq %rax, -0x2068(%rbp)
movq -0x2068(%rbp), %rdi
movq -0x2040(%rbp), %rsi
movq -0x2060(%rbp), %rdx
movq -0x2040(%rbp), %rax
subq %rax, %rdx
callq 0x2510
movq -0x2060(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x2040(%rbp)
jmp 0xf029
movq -0x2050(%rbp), %rax
cmpq $0x0, (%rax)
je 0xf1cd
movq -0x2050(%rbp), %rdi
callq 0xf870
jmp 0xf1cf
callq 0x2320
movq %rax, %rcx
xorl %eax, %eax
cmpl $0x0, (%rcx)
movb %al, -0x2071(%rbp)
jne 0xf22b
movq -0x8(%rbp), %rdi
callq 0x23e0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x2072(%rbp)
je 0xf21d
movq -0x2040(%rbp), %rax
leaq -0x2030(%rbp), %rcx
addq -0x2038(%rbp), %rcx
cmpq %rcx, %rax
setae %al
movb %al, -0x2072(%rbp)
movb -0x2072(%rbp), %al
xorb $-0x1, %al
movb %al, -0x2071(%rbp)
movb -0x2071(%rbp), %al
testb $0x1, %al
jne 0xefd2
jmp 0xf23b
callq 0x2320
cmpl $0x0, (%rax)
je 0xf2a0
movq $0x0, -0x2070(%rbp)
movq -0x2070(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq (%rcx), %rax
jae 0xf28f
movq -0x28(%rbp), %rax
movq -0x2070(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rdi
callq 0x2580
movq -0x2070(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x2070(%rbp)
jmp 0xf250
movq -0x28(%rbp), %rdi
callq 0x2580
movq $0x0, -0x28(%rbp)
callq 0x2320
movl (%rax), %eax
movl %eax, -0x14(%rbp)
movq -0x8(%rbp), %rdi
callq 0x23f0
movl -0x14(%rbp), %eax
movl %eax, -0x2078(%rbp)
callq 0x2320
movl -0x2078(%rbp), %ecx
movl %ecx, (%rax)
movq -0x28(%rbp), %rax
addq $0x2080, %rsp           # imm = 0x2080
popq %rbp
retq
nopw %cs:(%rax,%rax)