// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/mscompress.c
// Function: do_ibt_member
static void do_ibt_member(deark *c, struct ibt_ctx *d, i64 pos1)
{
	struct ibt_member_ctx *md = NULL;
	i64 pos = pos1;

	d->last_member_size = 0;

	md = de_malloc(c, sizeof(struct ibt_member_ctx));
	md->tmpstr = ucstring_create(c);
	md->cmpr_fn = ucstring_create(c);
	md->orig_fn = ucstring_create(c);

	if(!read_sz_p(c->infile, 80, md->cmpr_fn, d->input_encoding, &pos)) {
		d->need_errmsg = 1;
		goto done;
	}
	de_dbg(c, "cmpr name: \"%s\"", ucstring_getpsz_d(md->cmpr_fn));

	if(!read_sz_p(c->infile, 80, md->orig_fn, d->input_encoding, &pos)) {
		d->need_errmsg = 1;
		goto done;
	}
	de_dbg(c, "orig name: \"%s\"", ucstring_getpsz_d(md->orig_fn));

	if(!read_sz_p(c->infile, 80, md->tmpstr, DE_ENCODING_ASCII, &pos)) {
		d->need_errmsg = 1;
		goto done;
	}
	de_dbg(c, "file version: \"%s\"", ucstring_getpsz_d(md->tmpstr));

	ucstring_empty(md->tmpstr);
	if(!read_sz_p(c->infile, 80, md->tmpstr, DE_ENCODING_ASCII, &pos)) {
		d->need_errmsg = 1;
		goto done;
	}
	md->cmpr_pos = pos;
	md->cmpr_len = de_atoi64(ucstring_getpsz(md->tmpstr));
	de_dbg(c, "cmpr len: %"I64_FMT, md->cmpr_len);
	if(md->cmpr_len<8 || md->cmpr_pos+md->cmpr_len>c->infile->len) {
		d->need_errmsg = 1;
		goto done;
	}

	d->last_member_size = md->cmpr_pos + md->cmpr_len - pos1;

	// TODO? An option to extract without decompressing.
	// But we'd lose the original filename, and it's overkill for such an
	// unimportant format.

	ibt_decompress_and_extract(c, d, md);

done:
	if(md) {
		ucstring_destroy(md->tmpstr);
		ucstring_destroy(md->cmpr_fn);
		ucstring_destroy(md->orig_fn);
		de_free(c, md);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x8(%rbp), %rdi
movl $0x28, %esi
callq 0x15b780
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
callq 0x1711d0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
callq 0x1711d0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rdi
callq 0x1711d0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rdx
movq -0x10(%rbp), %rax
movl (%rax), %ecx
movl $0x50, %esi
leaq -0x28(%rbp), %r8
callq 0xe3910
cmpl $0x0, %eax
jne 0xe36f4
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
jmp 0xe38c2
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x172650
movq -0x30(%rbp), %rdi
movq %rax, %rdx
leaq 0xd973a(%rip), %rsi     # 0x1bce51
movb $0x0, %al
callq 0x15b0d0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rdx
movq -0x10(%rbp), %rax
movl (%rax), %ecx
movl $0x50, %esi
leaq -0x28(%rbp), %r8
callq 0xe3910
cmpl $0x0, %eax
jne 0xe3754
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
jmp 0xe38c2
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x172650
movq -0x38(%rbp), %rdi
movq %rax, %rdx
leaq 0xcc28e(%rip), %rsi     # 0x1afa05
movb $0x0, %al
callq 0x15b0d0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdx
movl $0x50, %esi
movl $0x1, %ecx
leaq -0x28(%rbp), %r8
callq 0xe3910
cmpl $0x0, %eax
jne 0xe37b3
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
jmp 0xe38c2
movq -0x8(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x172650
movq -0x40(%rbp), %rdi
movq %rax, %rdx
leaq 0xd968b(%rip), %rsi     # 0x1bce61
movb $0x0, %al
callq 0x15b0d0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x171210
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdx
movl $0x50, %esi
movl $0x1, %ecx
leaq -0x28(%rbp), %r8
callq 0xe3910
cmpl $0x0, %eax
jne 0xe381f
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
jmp 0xe38c2
movq -0x28(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x172500
movq %rax, %rdi
callq 0x15ccc0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
leaq 0xf2e04(%rip), %rsi     # 0x1d6661
movb $0x0, %al
callq 0x15b0d0
movq -0x20(%rbp), %rax
cmpq $0x8, 0x8(%rax)
jl 0xe388c
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq -0x20(%rbp), %rcx
addq 0x8(%rcx), %rax
movq -0x8(%rbp), %rcx
movq 0x18(%rcx), %rcx
cmpq 0x18(%rcx), %rax
jle 0xe3896
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
jmp 0xe38c2
movq -0x20(%rbp), %rax
movq (%rax), %rcx
movq -0x20(%rbp), %rax
addq 0x8(%rax), %rcx
subq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0xe39b0
cmpq $0x0, -0x20(%rbp)
je 0xe38fd
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x171750
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x171750
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x171750
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x15b820
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)