lzmaSDK is an iOS port of the decoding logic from the LZMA SDK provided with 7zip
Switch branches/tags
Nothing to show
Clone or download
Permalink
Failed to load latest commit information.
Classes improve thread safety by removing calls to change directory, replace … Dec 22, 2015
lzmaSDK.xcodeproj improve thread safety by removing calls to change directory, replace … Dec 22, 2015
lzmaSDK add target for a dynamic Framework build for iOS 8 and newer build sy… Jul 9, 2015
lzmaSDKTests improve thread safety by removing calls to change directory, replace … Dec 22, 2015
.gitignore fixup easy clang analyzer warnings by commenting out code or explicit… Jan 18, 2013
LICENSE.txt add LICENSE.txt to indicate that code is public domain Jul 25, 2016
MainWindow.xib init with last working state from previous SDK release Jul 12, 2010
README.txt add LICENSE.txt to indicate that code is public domain Jul 25, 2016
files_dirs.7z add missing files_dirs.7z archive from last checkin Dec 22, 2015
halfgig.7z reimpl half gig decode test Jan 21, 2013
lzmaApp-Info.plist remove static lib target and rename app to lzmaApp Jul 9, 2015
lzmaApp_Prefix.pch remove static lib target and rename app to lzmaApp Jul 9, 2015
main.m remove static lib target and rename app to lzmaApp Jul 9, 2015
onegig.7z rework logic related to mapping of huge 1 gigabyte file so that test … Jan 21, 2013
sixfiftymeg_2blocks.7z decode a pair of 650 meg files in different blocks, add code to detec… Jan 22, 2013
test.7z fixed up removal of CRC logic, imported LZMAExtractor, added logic fo… Jul 12, 2010
update.tcl add README and update script Apr 20, 2011
writebig.tcl decode a pair of 650 meg files in different blocks, add code to detec… Jan 22, 2013

README.txt

This directory contains the LZMA SDK customized for an embedded system (iPhone/iOS)
Only the file extraction logic was included, all code related to creating
compressed streams was removed. CRC validation was removed to
improve performance. In addition, large file support was added so that iOS
is able to decompress files as large as 650 megs using memory mapped IO.
This code is based on lzma release 9.22 beta.

Note that when incorporating the code into a new project, copy only the
LZMASDK directory in the Classes subdir into your iOS project. All of the
other files in this example iOS app exist just to illustrate how to use
the SDK code in the LZMASDK directory.

The code was modified as follows:

Embedded version does not need exe branch predictors.

Bra.c
Bcj2.c
Bra86.c

File List:

7zBuf.c
7zCrc.c
7zFile.c
7zStream.c
LzHash.h
LzmaDec.h
7zBuf.h
7zCrc.h
7zFile.h
7zVersion.h
CpuArch.h
LzmaDec.c
Types.h

Removed:

(XZ file format support)
Xz.*

MtCoder.c

Ppmd7Enc.c

Sha256.*

lzma Search (encode) functions

rm LzFind*

rm Threads.*

rm Bra*

rm Bcj2.*

rm lzmaEnc* lzma2Enc.*

The 7z.h and 7zIn.c files were modified to support memory mapping the dictionary
cache file so that large files can be decompressed without having to break archives
up into blocks. While splitting into blocks makes it possible to create an archive
with lots of little files in different blocks, it makes compression much worse.
Large file support makes it possible to get maximum compression by putting all
the files into 1 block, but the downside is that the decode process is slower
due to the use of memory mapped IO writes. See the k7zUnpackMapDictionaryInMemoryMaxNumBytes
define in 7z.h if you want to change the size at which memory mapped IO kicks in,
currently archives larger than 1 meg will use memory mapped IO.

To update to a new version of the LZMA SDK, use the update.tcl to copy over those
files that were used in this version. Note that updating is not trivial since files
that have been modified would need to be merged.

The example iOS application shows how to decode a small file and how some very large
files can be decoded without using up all the memory in an iOS application. Previously,
an archive with a dictionary around 30 to 40 megs would crash an iOS device, with
the mmap logic files as large as 650 megs can be decoded without going over the
virtual memory limits on iOS. Note that this large file support depends on how large
a memory space a single process can map under iOS, so keeping a very large single
archive under 400 megs is likely to be a good idea.

See LICENSE.txt for license details.