Commit Graph

6 Commits

Author SHA1 Message Date
Jeff Hamilton
d85472a746 Fix the build. imgdiff.c needed #include <sys/types.h>.
Change-Id: I82169a926e7df2aa92bac2c4f427bc64f4811362
2009-09-25 21:47:52 -05:00
Doug Zongker
d98e087042 integrate bsdiff into imgdiff, instead of using subprocess
Integrate the bsdiff code into imgdiff so we can just call it rather
than writing temp files and invoking bsdiff as a subprocess.  When
computing multiple patches from the same source file, we can also save
time by doing some bsdiff preprocessing on the source file only once.

(Note this renames the existing 'bsdiff.c' -- which actually does
patching in applypatch -- to 'bspatch.c', and introduces a new
bsdiff.c linked into imgdiff.)
2009-09-25 11:52:00 -07:00
Doug Zongker
d7d7ab00f5 do a pass of normal-chunk-merging before comparing src and tgt files
Merge the gzip footer and header together with any adjacent normal
chunks before comparing chunk structures; this should make the
recovery-from-boot diff not fail due to differences in the footer
after the ramdisk part of the image.
2009-09-02 11:10:51 -07:00
Doug Zongker
6b2bb3d96d better patching for zip files
Adds a zip mode ("-z") to imgdiff to construct efficient patches for
zip files (including jars and apks).  We identify the regions within
the zip file containing deflated data, and when a corresponding file
can be found in the source zip, a patch is generated for the
uncompressed version of the data.

The GZIP chunk type is replaced with a DEFLATE chunk type that handles
a raw deflated data stream.  This new DEFLATE chunk can be used for
both gzipped pieces (as found within boot and recovery images) and zip
files (apks, etc.)  The gzip header and footer are handled by NORMAL
chunks on either side of the main DEFLATE chunks.  (Typically these
tiny NORMAL chunks will get merged with adjacent chunks, so the number
of output chunks is unaffected.)

Add a test script that tests the generate-apply cycle on all the zips
and images within a pair of full OTA packages.
2009-07-20 14:45:29 -07:00
Doug Zongker
3b72436dbe handle identical gzip chunks better
Improve the speed of incremental OTA install by treating unchanging
gzip chunks as normal chunks, avoiding a decompress/recompress cycle.
This reduces the time needed to apply a patch to a boot image where
the kernel has not changed from ~30 seconds to ~2 seconds, on an opal.
2009-07-15 17:54:30 -07:00
Doug Zongker
02d444b07e new image diffing tool and support for image patches in applypatch
Images (like boot and recovery) consist of large sections of gzipped
data interspersed with other data.  To do effective binary patching of
these files, we need to apply patches to the gzipped parts in
'uncompressed space', that is, we decompress, apply a patch, then
recompress to obtain the desired output.

This change defines a new format with these patches, which is
basically a description of how the source and target files are to be
divided up into chunks and a bsdiff patch for each chunk.  We add a
new host executable, "imgdiff", for generating these patches from
source and target images, and add support in applypatch for
recognizing this format and applying it on the device.
2009-05-28 21:18:46 -07:00