// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/stuffit.c
// Function: de_run_stuffit
static void de_run_stuffit(deark *c, de_module_params *mparams)
{
	lctx *d = NULL;

	d = de_malloc(c, sizeof(lctx));

	if(!dbuf_memcmp(c->infile, 0, "SIT!", 4)) {
		d->file_fmt = 1;
	}
	else if(!dbuf_memcmp(c->infile, 0, "StuffIt ", 8)) {
		d->file_fmt = 2;
	}
	else {
		de_err(c, "Not a StuffIt file, or unknown version.");
		goto done;
	}

	if(d->file_fmt==2) {
		d->input_encoding = de_get_input_encoding(c, NULL, DE_ENCODING_UTF8);
	}
	else {
		d->input_encoding = de_get_input_encoding(c, NULL, DE_ENCODING_MACROMAN);
	}

	d->curpath = de_strarray_create(c, MAX_NESTING_LEVEL+10);
	d->crco_rfork = de_crcobj_create(c, DE_CRCOBJ_CRC16_ARC);
	d->crco_dfork = de_crcobj_create(c, DE_CRCOBJ_CRC16_ARC);
	d->crco_hdr = de_crcobj_create(c, DE_CRCOBJ_CRC16_ARC);

	if(d->file_fmt==1) {
		de_declare_fmt(c, "StuffIt, old format");
		do_oldfmt(c, d);
	}
	else if(d->file_fmt==2) {
		de_declare_fmt(c, "StuffIt, v5 format");
		do_v5(c, d);
	}
	else {
		de_err(c, "This version of StuffIt format is not supported.");
	}

done:
	if(d) {
		de_crcobj_destroy(d->crco_rfork);
		de_crcobj_destroy(d->crco_dfork);
		de_crcobj_destroy(d->crco_hdr);
		de_strarray_destroy(d->curpath);
		if(d->v5_offsets_seen) de_inthashtable_destroy(c, d->v5_offsets_seen);
		de_free(c, d);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movl $0x58, %esi
callq 0x15b780
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
leaq 0x8eb54(%rip), %rdx     # 0x1cdc71
movl $0x4, %ecx
callq 0x166ab0
cmpl $0x0, %eax
jne 0x13f138
movq -0x18(%rbp), %rax
movl $0x1, (%rax)
jmp 0x13f17f
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
leaq 0x8eb2b(%rip), %rdx     # 0x1cdc76
movl $0x8, %ecx
callq 0x166ab0
cmpl $0x0, %eax
jne 0x13f166
movq -0x18(%rbp), %rax
movl $0x2, (%rax)
jmp 0x13f17d
movq -0x8(%rbp), %rdi
leaq 0x8eb0e(%rip), %rsi     # 0x1cdc7f
movb $0x0, %al
callq 0x15bfb0
jmp 0x13f28a
jmp 0x13f17f
movq -0x18(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x13f1a5
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x2, %edx
callq 0x15e4a0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x4(%rax)
jmp 0x13f1c0
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x11, %edx
callq 0x15e4a0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rdi
movl $0x2a, %esi
callq 0x1727a0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rdi
movl $0x21, %esi
callq 0x15eac0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rdi
movl $0x21, %esi
callq 0x15eac0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x8(%rbp), %rdi
movl $0x21, %esi
callq 0x15eac0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x18(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x13f24c
movq -0x8(%rbp), %rdi
leaq 0x8ea6f(%rip), %rsi     # 0x1cdca7
callq 0x15e380
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x13f3a0
jmp 0x13f288
movq -0x18(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x13f274
movq -0x8(%rbp), %rdi
leaq 0x8ea5b(%rip), %rsi     # 0x1cdcbb
callq 0x15e380
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x13f400
jmp 0x13f286
movq -0x8(%rbp), %rdi
leaq 0x8ea4f(%rip), %rsi     # 0x1cdcce
movb $0x0, %al
callq 0x15bfb0
jmp 0x13f288
jmp 0x13f28a
cmpq $0x0, -0x18(%rbp)
je 0x13f2ee
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x15f2e0
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x15f2e0
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x15f2e0
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x1727f0
movq -0x18(%rbp), %rax
cmpq $0x0, 0x50(%rax)
je 0x13f2e1
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x50(%rax), %rsi
callq 0x15e630
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x15b820
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)