Rather than comparing an old file with a new file to generate a set of patching
instructions, and then compressing the patching instructions to generate a compact
patch file for transmission to a user, a patch file is generated in a single operation.
A compressor is pre-initialized in accordance with the old version of the file
(e.g. in an LZ77 compressor, the history window is pre-loaded with the file). The
pre-initialized compressor then compresses the new file, producing a patch file
from which the new file can be generated. At the user's computer, a parallel process
is performed, with the user's copy of the old file being used to pre-initialize
a decompressor to which the patch file is then input. The output of the decompressor
is the new file. The patch files generated and used in these processes are of significantly
reduced size when compared to the prior art. Variations between copies of the old
file as installed on different computers are also addressed, so that a single patch
file can be applied irrespective of such variations. By so doing, the need for
a multi-version patch file to handle such installation differences is eliminated,
further reducing the size of the patch file when compared with prior art techniques.
Such variations are addressed by "normalizing" the old file prior to application
of the patch file. A temporary copy of the old file is typically made, and locations
within the file at which the data may be unpredictable due to idiosyncrasies of
the file's installation are changed to known or predictable values.