123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- //patch.h
- //
- /*
- The MIT License (MIT)
- Copyright (c) 2012-2017 HouSisong
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
- */
- #ifndef HPatch_patch_h
- #define HPatch_patch_h
- #ifdef __cplusplus
- extern "C"
- {
- #endif
-
- #define hpatch_BOOL int
- #define hpatch_FALSE 0
- #define TByte unsigned char
- #define TUInt int
- //if patch false return hpatch_FALSE
- hpatch_BOOL patch(unsigned char* out_newData,unsigned char* out_newData_end,
- const unsigned char* oldData,const unsigned char* oldData_end,
- const unsigned char* serializedDiff,const unsigned char* serializedDiff_end);
- #ifdef __cplusplus
- }
- #endif
-
- //patch_stream() patch by stream , recommended use in limited memory systems
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- //hpatch_StreamPos_t for support large file
- #ifdef _MSC_VER
- typedef unsigned __int32 hpatch_StreamPos_t;
- #else
- typedef unsigned int hpatch_StreamPos_t;
- #endif
- typedef void* hpatch_TStreamInputHandle;
- typedef struct hpatch_TStreamInput{
- hpatch_TStreamInputHandle streamHandle;
- hpatch_StreamPos_t streamSize;
- int (*read) (hpatch_TStreamInputHandle streamHandle,
- const hpatch_StreamPos_t readFromPos,
- unsigned char* out_data,unsigned char* out_data_end);
- //read() must return (out_data_end-out_data), otherwise read error
- } hpatch_TStreamInput;
-
- typedef struct hpatch_TStreamOutput{
- hpatch_TStreamInputHandle streamHandle;
- hpatch_StreamPos_t streamSize;
- int (*write)(hpatch_TStreamInputHandle streamHandle,
- const hpatch_StreamPos_t writeToPos,
- const unsigned char* data,const unsigned char* data_end);
- //write() must return (out_data_end-out_data), otherwise write error
- //first writeToPos==0; the next writeToPos+=(data_end-data)
- } hpatch_TStreamOutput;
-
- //once I/O (read/write) max byte size
- #define kStreamCacheSize (512)
- //patch by stream , only used 7*kStreamCacheSize stack memory for I/O cache
- hpatch_BOOL patch_stream(const struct hpatch_TStreamOutput* out_newData,
- const struct hpatch_TStreamInput* oldData,
- const struct hpatch_TStreamInput* serializedDiff);
- #ifdef __cplusplus
- }
- #endif
- #endif
|