From 74c6c338e6d52ebdc09b96be8ed0e97aa96e48fa Mon Sep 17 00:00:00 2001 From: fbrosson Date: Wed, 2 Mar 2016 22:28:30 +0000 Subject: [PATCH] dmg2img: create recipe with patch for gcc2. --- sys-fs/dmg2img/dmg2img-1.6.5.recipe | 56 ++++++++ sys-fs/dmg2img/patches/dmg2img-1.6.5.patch | 157 +++++++++++++++++++++ 2 files changed, 213 insertions(+) create mode 100644 sys-fs/dmg2img/dmg2img-1.6.5.recipe create mode 100644 sys-fs/dmg2img/patches/dmg2img-1.6.5.patch diff --git a/sys-fs/dmg2img/dmg2img-1.6.5.recipe b/sys-fs/dmg2img/dmg2img-1.6.5.recipe new file mode 100644 index 000000000..d2c8f4abc --- /dev/null +++ b/sys-fs/dmg2img/dmg2img-1.6.5.recipe @@ -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 +} diff --git a/sys-fs/dmg2img/patches/dmg2img-1.6.5.patch b/sys-fs/dmg2img/patches/dmg2img-1.6.5.patch new file mode 100644 index 000000000..8d246b1f2 --- /dev/null +++ b/sys-fs/dmg2img/patches/dmg2img-1.6.5.patch @@ -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); +