dmg2img: create recipe with patch for gcc2.

This commit is contained in:
fbrosson
2016-03-02 22:28:30 +00:00
parent e3bc44d5f2
commit 74c6c338e6
2 changed files with 213 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
SUMMARY="Converts Apple DMG files to standard HFS+ images"
DESCRIPTION="dmg2img is an command-line tool for converting .dmg files, \
popular on Mac OS X systems, to HFS+ disk images.
A companion command-line tool, vfdecrypt, allows to decrypt encrypted Mac OS X \
disk image files (also known as filevault disk)."
HOMEPAGE="http://vu1tur.eu.org/tools/"
COPYRIGHT="2007-2008 Jean-Pierre Demailly (dmg2img)
2009-2013 vu1tur (dmg2img)
2006 Ralf-Philipp Weinmann, Jacob Appelbaum, Christian Fromme \
(vfdecrypt)"
LICENSE="GNU GPL v2"
REVISION="1"
SOURCE_URI="http://vu1tur.eu.org/tools/dmg2img-$portVersion.tar.gz"
CHECKSUM_SHA256="400a16cbe5cb2bf8a9eec4a43ef3546e0329f248bbd2a79f6d9a1ebc0b503308"
PATCHES="dmg2img-$portVersion.patch"
ARCHITECTURES="x86_gcc2 x86 x86_64"
PROVIDES="
dmg2img = $portVersion
cmd:dmg2img = $portVersion
cmd:vfdecrypt = $portVersion
"
REQUIRES="
haiku
lib:libz
lib:libbz2
lib:libcrypto
"
BUILD_REQUIRES="
haiku_devel
devel:libz
devel:libbz2
devel:libcrypto
"
BUILD_PREREQUIRES="
cmd:gcc
cmd:ld
cmd:make
"
BUILD()
{
make $jobArgs
}
INSTALL()
{
mkdir -p $binDir
cp dmg2img vfdecrypt $binDir
mkdir -p $manDir/man1
cp vfdecrypt.1 $manDir/man1
mkdir -p $docDir
cp README $docDir
}

View File

@@ -0,0 +1,157 @@
diff -upr dmg2img-1.6.5/adc.c dmg2img-1.6.5-haiku/adc.c
--- dmg2img-1.6.5/adc.c 2010-03-24 17:52:45.000000000 +0000
+++ dmg2img-1.6.5-haiku/adc.c
@@ -6,8 +6,6 @@
int adc_decompress(int in_size, unsigned char *input, int avail_size, unsigned char *output, int *bytes_written)
{
- if (in_size == 0)
- return 0;
bool output_full = false;
unsigned char *inp = input;
unsigned char *outp = output;
@@ -16,6 +14,9 @@ int adc_decompress(int in_size, unsigned
int offset;
int i;
+ if (in_size == 0)
+ return 0;
+
while (inp - input < in_size) {
chunk_type = adc_chunk_type(*inp);
switch (chunk_type) {
diff -upr dmg2img-1.6.5/dmg2img.c dmg2img-1.6.5-haiku/dmg2img.c
--- dmg2img-1.6.5/dmg2img.c 2013-07-23 11:04:39.000000000 +0000
+++ dmg2img-1.6.5-haiku/dmg2img.c
@@ -112,6 +112,8 @@ int main(int argc, char *argv[])
char reserved[5] = " ";
char sztype[64] = "";
unsigned int block_type, dw_reserved;
+ char szSignature[5];
+ int rSignature;
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-s"))
@@ -181,9 +183,8 @@ int main(int argc, char *argv[])
fseeko(FIN, 0, SEEK_SET);
read_kolyblk(FIN, &kolyblk);
}
- char szSignature[5];
szSignature[4] = '\0';
- int rSignature = convert_int(kolyblk.Signature);
+ rSignature = convert_int(kolyblk.Signature);
memcpy(szSignature, &rSignature, 4);
if (debug) {
@@ -221,6 +222,7 @@ int main(int argc, char *argv[])
printf("Debug info will be written to dmg2img.log\n\n");
if (kolyblk.XMLOffset != 0 && kolyblk.XMLLength != 0) {
+ char *_blkx_begin;
//We have a plist to parse
if (verbose > 1)
printf("reading property list, %llu bytes from address %llu ...\n", (unsigned long long)kolyblk.XMLLength, (unsigned long long)kolyblk.XMLOffset);
@@ -237,7 +239,7 @@ int main(int argc, char *argv[])
if (debug && verbose >= 3) {
fprintf(FDBG, "%s\n", plist);
}
- char *_blkx_begin = strstr(plist, blkx_begin);
+ _blkx_begin = strstr(plist, blkx_begin);
blkx_size = strstr(_blkx_begin, list_end) - _blkx_begin;
blkx = (char *)malloc(blkx_size + 1);
memcpy(blkx, _blkx_begin, blkx_size);
@@ -253,6 +255,7 @@ int main(int argc, char *argv[])
scb = strlen(chunk_begin);
while (1) {
unsigned int tmplen;
+ char *base64data;
data_begin = strstr(data_begin, chunk_begin);
if (!data_begin)
break;
@@ -267,7 +270,7 @@ int main(int argc, char *argv[])
if (!parts)
mem_overflow();
- char *base64data = (char *)malloc(data_size + 1);
+ base64data = (char *)malloc(data_size + 1);
if (!base64data)
mem_overflow();
base64data[data_size] = '\0';
@@ -300,6 +303,8 @@ int main(int argc, char *argv[])
printf("partition %d: %s\n", i, partname);
}
} else if (kolyblk.RsrcForkOffset != 0 && kolyblk.RsrcForkLength != 0) {
+ struct _mishblk mishblk;
+ int next_mishblk;
//We have a binary resource fork to parse
plist = (char *)malloc(kolyblk.RsrcForkLength);
if (!plist)
@@ -307,8 +312,7 @@ int main(int argc, char *argv[])
fseeko(FIN, kolyblk.RsrcForkOffset, SEEK_SET);
fread(plist, kolyblk.RsrcForkLength, 1, FIN);
partnum = 0;
- struct _mishblk mishblk;
- int next_mishblk = 0;
+ next_mishblk = 0;
mish_begin = plist + 0x104;
while (1) {
mish_begin += next_mishblk;
@@ -372,6 +376,7 @@ int main(int argc, char *argv[])
in_offs = add_offs = in_offs_add = kolyblk.DataForkOffset;
for (i = extractpart==-1?0:extractpart; i < (extractpart==-1?partnum:extractpart+1) && in_offs < kolyblk.DataForkLength - kolyblk.DataForkOffset; i++) {
+ unsigned long bi;
if (verbose)
printf("opening partition %d ... ", i);
if (verbose >= 3)
@@ -385,7 +390,7 @@ int main(int argc, char *argv[])
if (debug) {
fprintf(FDBG, "\n run..... ..type.... ..reserved ..sectorStart..... ..sectorCount..... ..compOffset...... ..compLength......\n");
}
- unsigned long bi = 0;
+ bi = 0;
while (block_type != BT_TERM && offset < parts[i].BlocksRunCount * 0x28) {
block_type = convert_char4((unsigned char *)parts[i].Data + offset);
dw_reserved = convert_char4((unsigned char *)parts[i].Data + offset + 4);
@@ -547,14 +552,14 @@ int main(int argc, char *argv[])
fseeko(FIN, in_offs + add_offs, SEEK_SET);
to_read = in_size;
while (to_read > 0) {
+ int bytes_written, read_from_input;
chunk = to_read > CHUNKSIZE ? CHUNKSIZE : to_read;
to_write = fread(tmp, 1, chunk, FIN);
if (ferror(FIN) || to_write < chunk) {
printf("ERROR: reading file %s\n", input_file);
return 0;
}
- int bytes_written;
- int read_from_input = adc_decompress(to_write, tmp, DECODEDSIZE, dtmp, &bytes_written);
+ read_from_input = adc_decompress(to_write, tmp, DECODEDSIZE, dtmp, &bytes_written);
fwrite(dtmp, 1, bytes_written, FOUT);
to_read -= read_from_input;
}
diff -upr dmg2img-1.6.5/mntcmd.h dmg2img-1.6.5-haiku/mntcmd.h
--- dmg2img-1.6.5/mntcmd.h 2010-03-24 17:52:45.000000000 +0000
+++ dmg2img-1.6.5-haiku/mntcmd.h
@@ -19,16 +19,17 @@ void read_gpt_entry(FILE * F, struct _gp
int print_mountcmd(char *filename)
{
- if (!filename)
- return (-1);
-
unsigned int i, pn = 0;
char tmp[128];
struct _gpt_header gpt_header;
struct _gpt_entry gpt_entry;
struct _gpt_entry *gpt_ent_array;
+ FILE *F;
+
+ if (!filename)
+ return (-1);
- FILE *F = fopen(filename, "rb");
+ F = fopen(filename, "rb");
fseeko(F, 0x200, SEEK_SET);
read_gpt_header(F, &gpt_header);