ShaneMcC.co.uk :: libdmg

 
Note: This page and its contents are outdated. Some or all parts of this may no longer be functional.
About
This page contains my slightly modified version of libdmg
It has been patched so as not to include a master checksum (which in my tests on leopard were invalid)
License
The original code is licensed under GPLv3, so my version is also.
License Text
Download
Build your own
This binary was built using the following script:
#!/bin/sh
# Script copyright (c) 2008 Shane Mc Cormack
# libDMG from: http://github.com/planetbeing/libdmg-hfsplus
#
# This script will:
#  - Download libdmg from the git repo
#  - Patch it not to include a master checksum (otherwise OSX complains)
#  - Compiles dmg
#  - Copies the resulting dmg binary to the current directory
THISDIR=${PWD}
THISFILE=${THISDIR}/${0}

GIT=`which git`

if [ "" = "${GIT}" ]; then
	echo "You need to have git installed to use this script"
	exit 1;
fi;

if [ -e "libdmg-hfsplus/.git" ]; then
	echo "git repo checkout already exists"
	cd libdmg-hfsplus
	echo "Removing previously patched version"
	rm dmg/dmglib.c nomasterchecksum.patch dmg/dmglib.c.rej
	git checkout dmg/dmglib.c
	echo "Updating git repo"
	git fetch
	git rebase origin
else
	echo "git repo checkout does not exist"
	if [ -e "libdmg-hfsplus" ]; then
		echo "non-git version found, deleteing"
		rm -Rf libdmg-hfsplus
	fi;
	echo "Checking out git repo"
	git clone git://github.com/planetbeing/libdmg-hfsplus.git
	cd libdmg-hfsplus
fi;
echo "Extracting Patch"
STARTLINE=`grep -n "^#### PATCH FILE BELOW ####$" ${THISFILE}`
STARTLINE=$((${STARTLINE%%:*} + 1))
tail -n +${STARTLINE} ${THISFILE} > nomasterchecksum.patch
echo "Patching"
patch -f -p0 < nomasterchecksum.patch
if [ -e dmg/dmglib.c.rej -o ${?} -ne 0 ]; then
	echo "Patching failed"
	exit 1;
fi;
echo "Building"
cd dmg
make
echo "Copying"
cp -Rfv dmg ${THISDIR}/dmg
echo "Done."
exit 1;
#### PATCH FILE BELOW ####
diff -Pur dmg/dmglib.orig dmg/dmglib.c
--- dmg/dmglib.orig	2008-06-09 09:29:11.000000000 +0100
+++ dmg/dmglib.c	2008-06-09 09:30:01.000000000 +0100
@@ -232,10 +232,10 @@
 	koly.fUDIFXMLLength = plistSize;
 	memset(&(koly.reserved1), 0, 0x78);
 	
-	koly.fUDIFMasterChecksum.type = CHECKSUM_CRC32;
+	koly.fUDIFMasterChecksum.type = CHECKSUM_NONE;
 	koly.fUDIFMasterChecksum.size = 0x20;
 	koly.fUDIFMasterChecksum.data[0] = calculateMasterChecksum(resources);
-	printf("Master checksum: %x\n", koly.fUDIFMasterChecksum.data[0]); fflush(stdout); 
+	printf("Master checksum: Disabled\n"); fflush(stdout); 
 	
 	koly.fUDIFImageVariant = kUDIFDeviceImageType;
 	koly.fUDIFSectorCount = EXTRA_SIZE + (volumeHeader->totalBlocks * volumeHeader->blockSize)/SECTOR_SIZE;
@@ -447,10 +447,10 @@
 	koly.fUDIFXMLLength = plistSize;
 	memset(&(koly.reserved1), 0, 0x78);
 	
-	koly.fUDIFMasterChecksum.type = CHECKSUM_CRC32;
+	koly.fUDIFMasterChecksum.type = CHECKSUM_NONE;
 	koly.fUDIFMasterChecksum.size = 0x20;
 	koly.fUDIFMasterChecksum.data[0] = calculateMasterChecksum(resources);
-	printf("Master checksum: %x\n", koly.fUDIFMasterChecksum.data[0]); fflush(stdout); 
+	printf("Master checksum: Disabled\n"); fflush(stdout); 
 	
 	koly.fUDIFSectorCount = numSectors;
 	koly.reserved2 = 0;