// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/zip.c
// Function: do_process_member
static int do_process_member(deark *c, lctx *d, struct member_data *md)
{
	int retval = 0;

	// If for some reason we have a central-dir filename but not a local-dir
	// filename, use the central-dir filename.
	if(ucstring_isempty(md->local_dir_entry_data.fname) &&
		ucstring_isnonempty(md->central_dir_entry_data.fname))
	{
		ucstring_append_ucstring(md->local_dir_entry_data.fname,
			md->central_dir_entry_data.fname);
	}

	// Set the final file size and crc fields.
	if(md->local_dir_entry_data.bit_flags & 0x0008) {
		if(d->using_scanmode) {
			de_err(c, "File is incompatible with scan mode");
			goto done;
		}

		// Indicates that certain fields are not present in the local file header,
		// and are instead in a "data descriptor" after the file data.
		// Let's hope they are also in the central file header.
		md->cmpr_size = md->central_dir_entry_data.cmpr_size;
		md->uncmpr_size = md->central_dir_entry_data.uncmpr_size;
		md->crc_reported = md->central_dir_entry_data.crc_reported;
	}
	else {
		md->cmpr_size = md->local_dir_entry_data.cmpr_size;
		md->uncmpr_size = md->local_dir_entry_data.uncmpr_size;
		md->crc_reported = md->local_dir_entry_data.crc_reported;
	}

	process_ext_attr(c, d, md);

	// In some cases, detect directories by checking whether the filename ends
	// with a slash.
	if(!md->is_dir && md->uncmpr_size==0 &&
		(d->using_scanmode || (md->ver_made_by_lo<20)))
	{
		if(ucstring_lastchar(md->local_dir_entry_data.fname) == '/') {
			de_dbg(c, "[assuming this is a subdirectory]");
			md->is_dir = 1;
		}
	}

	do_extract_file(c, d, md);
	retval = 1;

done:
	return retval;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl $0x0, -0x1c(%rbp)
movq -0x18(%rbp), %rax
movq 0x190(%rax), %rdi
callq 0x1717b0
cmpl $0x0, %eax
je 0x14a040
movq -0x18(%rbp), %rax
movq 0x140(%rax), %rdi
callq 0x1717f0
cmpl $0x0, %eax
je 0x14a040
movq -0x18(%rbp), %rax
movq 0x190(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x140(%rax), %rsi
callq 0x171460
movq -0x18(%rbp), %rax
movl 0x178(%rax), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x14a0b8
movq -0x10(%rbp), %rax
cmpl $0x0, 0xb0(%rax)
je 0x14a076
movq -0x8(%rbp), %rdi
leaq 0x85e86(%rip), %rsi     # 0x1cfef0
movb $0x0, %al
callq 0x15bfb0
jmp 0x14a184
movq -0x18(%rbp), %rax
movq 0x108(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x198(%rax)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x1a0(%rax)
movq -0x18(%rbp), %rax
movl 0x12c(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x1a8(%rax)
jmp 0x14a0f8
movq -0x18(%rbp), %rax
movq 0x158(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x198(%rax)
movq -0x18(%rbp), %rax
movq 0x160(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x1a0(%rax)
movq -0x18(%rbp), %rax
movl 0x17c(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x1a8(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x14ca20
movq -0x18(%rbp), %rax
cmpl $0x0, 0x38(%rax)
jne 0x14a16c
movq -0x18(%rbp), %rax
cmpq $0x0, 0x1a0(%rax)
jne 0x14a16c
movq -0x10(%rbp), %rax
cmpl $0x0, 0xb0(%rax)
jne 0x14a138
movq -0x18(%rbp), %rax
cmpl $0x14, 0x8(%rax)
jae 0x14a16c
movq -0x18(%rbp), %rax
movq 0x190(%rax), %rdi
callq 0x14cb40
cmpl $0x2f, %eax
jne 0x14a16a
movq -0x8(%rbp), %rdi
leaq 0x85dbc(%rip), %rsi     # 0x1cff14
movb $0x0, %al
callq 0x15b0d0
movq -0x18(%rbp), %rax
movl $0x1, 0x38(%rax)
jmp 0x14a16c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x14cb90
movl $0x1, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)