+
Introduction
+
VPatch allows to create a patch file to update previous versions
+ of your software. The GenPat utitily generates the patch file. The
+ plug-in can use the patch to update a file. Using a patch, you can
+ reduce the download size of your updates, because only the differences
+ between the files are included in the patch file.
+
How to use
+
Generate the patch file
+
Make sure you have the source file (original version) and the target
+ file (version to update to). For example, DATA.DTA (currently on user
+ system) and DATA_20.DTA (version 2.0 of this data file). Now call
+ the command line tool GenPat.exe:
+
GENPAT data.dta data_20.dta data.pat
-
Now, the patch will be generated, this will take some time.
-
Using the /B=(BlockSize) parameter of the GenPat utility (put it after the filenames), you can
-use a different block size. A smaller block size may result in a smaller patch, but the generation
-will take more time (the default blocksize is 64).
-
Update the file during installation
-
Use the VPatch plug-in to update a file using a patch file:
-
+ Now, the patch will be generated, this will take some time.
+ Using the /B=(BlockSize) parameter of the GenPat utility (put it
+ after the filenames), you can use a different block size. A smaller
+ block size may result in a smaller patch, but the generation will
+ take more time (the default blocksize is 64).
+ Update the file during installation
+ Use the VPatch plug-in to update a file using a patch file:
+
vpatch::vpatchfile "pathfile.pat" "source.file" "new.file"
-The result of the patch operating will be added to the stack and can be one of the following
-texts:
-
-- OK
-- OK, new version already installed
-- An error occured while patching
-- Patch data is invalid or corrupt
-- No suitable patches were found
-
-
Check example.nsi for an example.
-
Multiple patches in one file
-
GenPat appends a patch to the file you specified. If there is already a patch for the same
-orginal file in the patch file, the patch will be replaced. For example, if you want to be able to
-upgrade version 1 and 2 to version 3, you can put a 1 > 3 and 2 > 3 patch in one file.
-
You can also put patches for different files in one patch file, for example, a patch from file A
-version 1 to file A version 2 and a patch from file B version 1 to file B version 2. Just call the
-plug-in multiple times with the same patch file. It will automatically select the right patch
-(based on the file CRC).
-
Source code
-
NSIS plug-in (C++)
-
The source of the NSIS plug-in that applies patches can be found in the Source\Plugin
-folder.
-
Patch Generator (Delphi)
-
The most interesting part of VPatch, the actual patch generation algoritm, can be found in
-Source\GenPat\PatchGenerator.pas. The header of that file contains a brief explanation of the
-algoritm as well.
-
User interface (Delphi)
-
A user interface is included as well, which you will have to build yourself because the GUI
-executable was too large to include. Besides Borland Delphi 6 or higher (you can use the freely
-available Personal edition), you will also need to install the The result of the patch operating will be added to the stack and
+ can be one of the following texts:
+
+ - OK
+ - OK, new version already installed
+ - An error occured while patching
+ - Patch data is invalid or corrupt
+ - No suitable patches were found
+
+
Check example.nsi for an example.
+
Multiple patches in one file
+
GenPat appends a patch to the file you specified. If there is already
+ a patch for the same orginal file in the patch file, the patch will
+ be replaced. For example, if you want to be able to upgrade version
+ 1 and 2 to version 3, you can put a 1 > 3 and 2 > 3 patch in
+ one file.
+
You can also put patches for different files in one patch file, for
+ example, a patch from file A version 1 to file A version 2 and a patch
+ from file B version 1 to file B version 2. Just call the plug-in multiple
+ times with the same patch file. It will automatically select the right
+ patch (based on the file CRC).
+
GenPat exit codes
+
In version 2.1 support was added for exit codes (known as error levels
+ in the DOS period) to GenPat. GenPat will return an exit code based
+ on succes of the patch generation. Here is a list of the possible
+ exit codes:
+
+
+ Exit code |
+ Description |
+
+
+ 0 |
+ Success |
+
+
+ 1 |
+ Arguments missing |
+
+
+ 2 |
+ Source file not found |
+
+
+ 3 |
+ Target file not found |
+
+
+ 4 |
+ Unknown error while reading existing patch file |
+
+
+ 5 |
+ Unknown error while generating patch |
+
+
+ 6 |
+ Unknown error while writing patch file to disk |
+
+
+ 10 |
+ CRC of source and target file are equal |
+
+
+ 11 |
+ Not enough memory for source file |
+
+
+ 12 |
+ Not enough memory for target file |
+
+
+
These exit codes can be useful when you generate patch files through
+ a script.
+
+
+
Source code
+
NSIS plug-in (C++)
+
The source of the NSIS plug-in that applies patches can be found
+ in the Source\Plugin folder.
+
Patch Generator (Delphi)
+
The most interesting part of VPatch, the actual patch generation
+ algoritm, can be found in Source\GenPat\PatchGenerator.pas. The header
+ of that file contains a brief explanation of the algoritm as well.
+
User interface (Delphi)
+
A user interface is included as well, which you will have to build
+ yourself because the GUI executable was too large to include. Besides
+ Borland Delphi 6 or higher (you can use the freely available Personal
+ edition), you will also need to install the VirtualTreeView component by Mike Lischke.
-
Version history
-
-- 2.0 final
-
-- Cleaned up source code for the patch generator, which is now included (this code is written in
-Borland Delphi 6 and compiles with the freely available Personal edition).
-
-
-- 2.0 beta 2
-
-- All new algorithm used in the patch generator: much faster (up to 90%) while using smaller
-block sizes (higher compression)
-- Created a NSIS 2 plugin
-- Works with small files
-- Replaces existing patch in file if original file CRC is identical
-
-
-
-
Credits
-
Written by Koen van de Sande
-C plug-in by Edgewize
-New documentation and example by Joost Verburg
-
License
-
+ Version history
+
+ - 2.1
+
+ - Added argument checking and error handling to GenPat. Now
+ returns exit codes as well to indicate success/failure (and
+ the reason for failure). Only GenPat has changed in this version
+ compared to 2.0 final.
+ - Bug Fix: GenPat no longer gives an Access Violation when attempting
+ to patch a file smaller than 64 bytes into a file larger than
+ 64 bytes.
+
+
+ - 2.0 final
+
+ - Cleaned up source code for the patch generator, which is now
+ included (this code is written in Borland Delphi 6 and compiles
+ with the freely available Personal edition).
+
+
+ - 2.0 beta 2
+
+ - All new algorithm used in the patch generator: much faster
+ (up to 90%) while using smaller block sizes (higher compression)
+ - Created a NSIS 2 plugin
+ - Works with small files
+ - Replaces existing patch in file if original file CRC is identical
+
+
+
+
Credits
+
Written by Koen van de Sande
+ C plug-in by Edgewize
+ New documentation and example by Joost Verburg
+
License
+
Copyright (C) 2001-2003 Koen van de Sande
This software is provided 'as-is', without any express or implied
@@ -196,8 +270,9 @@ it freely, subject to the following restrictions:
2. Altered versions must be plainly marked as such,
and must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any distribution.
-
-