There's an embarrassing typo in includes/dmg/dmg.h that prevents libdmg from reading large dmgs: the return value of readUInt64 should be uint64_t, not uint32_t.
A more cosmetic issue is that there's a line in hfs/hfslib.c that prints the total filesystem size, and it has some 32-bit values that need to be cast to 64-bit before multiplying.
After fixing those issues, libdmg seems to work fine at listing and extracting files from a 7 GB dmg.
There's an embarrassing typo in includes/dmg/dmg.h that prevents libdmg from reading large dmgs: the return value of readUInt64 should be uint64_t, not uint32_t.
A more cosmetic issue is that there's a line in hfs/hfslib.c that prints the total filesystem size, and it has some 32-bit values that need to be cast to 64-bit before multiplying.
After fixing those issues, libdmg seems to work fine at listing and extracting files from a 7 GB dmg.