This is an automated email from the ASF dual-hosted git repository. szaszm pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 7a377c72b828c50c98a1b0729d58fb9023d1bda1 Author: Gabor Gyimesi <[email protected]> AuthorDate: Wed Sep 22 16:08:47 2021 +0200 MINIFICPP-1647 Remove unused bsdiff lib Closes #1176 Signed-off-by: Marton Szasz <[email protected]> --- LICENSE | 27 -- cmake/BuildTests.cmake | 4 - libminifi/include/utils/file/DiffUtils.h | 79 ----- libminifi/src/c2/C2Agent.cpp | 1 - thirdparty/bsdiff/CMakeLists.txt | 27 -- thirdparty/bsdiff/LICENSE | 24 -- thirdparty/bsdiff/bsdiff.c | 477 ------------------------------- thirdparty/bsdiff/bsdiff.h | 47 --- thirdparty/bsdiff/bspatch.c | 200 ------------- thirdparty/bsdiff/bspatch.h | 47 --- 10 files changed, 933 deletions(-) diff --git a/LICENSE b/LICENSE index 848e135..4416258 100644 --- a/LICENSE +++ b/LICENSE @@ -1535,33 +1535,6 @@ This product bundles a portion of batchfunctionlibrary, under a MIT license: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -This product bundles 'bsdiff' which is available under a "2-clause BSD" license. - - Copyright 2003-2005 Colin Percival - Copyright 2012 Matthew Endsley - All rights reserved - - Redistribution and use in source and binary forms, with or without - modification, are permitted providing that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - This project bundles jemalloc, which is available under a "2-clause BSD" License: Unless otherwise specified, files in the jemalloc source distribution are diff --git a/cmake/BuildTests.cmake b/cmake/BuildTests.cmake index 33b93b6..c8bc3be 100644 --- a/cmake/BuildTests.cmake +++ b/cmake/BuildTests.cmake @@ -67,10 +67,6 @@ function(createTests testName) message(DEBUG "-- Adding test: ${testName}") appendIncludes("${testName}") - if (ENABLE_BINARY_DIFF) - target_include_directories(${testName} SYSTEM BEFORE PRIVATE "${CMAKE_SOURCE_DIR}/thirdparty/bsdiff/") - endif(ENABLE_BINARY_DIFF) - if (Boost_FOUND) target_include_directories(${testName} BEFORE PRIVATE "${Boost_INCLUDE_DIRS}") endif() diff --git a/libminifi/include/utils/file/DiffUtils.h b/libminifi/include/utils/file/DiffUtils.h deleted file mode 100644 index 2d5f728..0000000 --- a/libminifi/include/utils/file/DiffUtils.h +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef LIBMINIFI_INCLUDE_UTILS_FILE_DIFFUTILS_H_ -#define LIBMINIFI_INCLUDE_UTILS_FILE_DIFFUTILS_H_ - -#include <fstream> -#include <sstream> - -#ifdef USE_BOOST -#include <boost/filesystem.hpp> - -#else -#include <cstdlib> - -#endif -#include <fcntl.h> - -#include <cstdio> - -#ifdef BDIFF - -extern "C" { -#include "bsdiff.h" -#include "bspatch.h" - -} -#else -int apply_bsdiff_patch(const char* /*oldfile*/, const char* /*newfile*/, const char* /*patch*/) { - return -1; -} - -#endif - -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace utils { -namespace file { - -/** - * Simple implementation of some file system utilities. - * - */ -class DiffUtils { - public: - DiffUtils() = delete; - - static int apply_binary_diff(const char *file_original, const char *file_new, const char *result_file) { - return apply_bsdiff_patch(file_original, file_new, result_file); - } - - static int binary_diff(const char* /*file_original*/, const char* /*file_other*/, const char* /*patchfile*/) { - return -1; - } -}; - -} // namespace file -} // namespace utils -} // namespace minifi -} // namespace nifi -} // namespace apache -} // namespace org - -#endif // LIBMINIFI_INCLUDE_UTILS_FILE_DIFFUTILS_H_ diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp index 738ac4d..78b3663 100644 --- a/libminifi/src/c2/C2Agent.cpp +++ b/libminifi/src/c2/C2Agent.cpp @@ -35,7 +35,6 @@ #include "core/state/UpdateController.h" #include "core/logging/Logger.h" #include "core/logging/LoggerConfiguration.h" -#include "utils/file/DiffUtils.h" #include "utils/file/FileUtils.h" #include "utils/file/FileManager.h" #include "utils/file/FileSystem.h" diff --git a/thirdparty/bsdiff/CMakeLists.txt b/thirdparty/bsdiff/CMakeLists.txt deleted file mode 100644 index 4975f5b..0000000 --- a/thirdparty/bsdiff/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -project(libbsdiff) - -set(CMAKE_C_STANDARD 99) - -set(SOURCES bsdiff.c bspatch.c) -add_library(bsdiff STATIC ${SOURCES}) - -target_link_libraries(bsdiff bz2) \ No newline at end of file diff --git a/thirdparty/bsdiff/LICENSE b/thirdparty/bsdiff/LICENSE deleted file mode 100644 index 5d40665..0000000 --- a/thirdparty/bsdiff/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ - Copyright 2003-2005 Colin Percival - Copyright 2012 Matthew Endsley - All rights reserved - - Redistribution and use in source and binary forms, with or without - modification, are permitted providing that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. diff --git a/thirdparty/bsdiff/bsdiff.c b/thirdparty/bsdiff/bsdiff.c deleted file mode 100644 index 1c8f367..0000000 --- a/thirdparty/bsdiff/bsdiff.c +++ /dev/null @@ -1,477 +0,0 @@ -/*- - * Copyright 2003-2005 Colin Percival - * Copyright 2012 Matthew Endsley - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted providing that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "bsdiff.h" - -#include <limits.h> -#include <string.h> - -#define MIN(x,y) (((x)<(y)) ? (x) : (y)) -#define MEDIAN3(a,b,c) (((a)<(b)) ? \ - ((b)<(c) ? (b) : ((a)<(c) ? (c) : (a))) : \ - ((b)>(c) ? (b) : ((a)>(c) ? (c) : (a)))) - -static void split(int64_t *I,int64_t *V,int64_t start,int64_t len,int64_t h) -{ - int64_t i,j,k,x,y,z,tmp,jj,kk; - - if(len<16) { - for(k=start;k<start+len;k+=j) { - j=1;x=V[I[k]+h]; - for(i=1;k+i<start+len;i++) { - if(V[I[k+i]+h]<x) { - x=V[I[k+i]+h]; - j=0; - }; - if(V[I[k+i]+h]==x) { - tmp=I[k+j];I[k+j]=I[k+i];I[k+i]=tmp; - j++; - }; - }; - for(i=0;i<j;i++) V[I[k+i]]=k+j-1; - if(j==1) I[k]=-1; - }; - return; - }; - - /* Select pivot, algorithm by Bentley & McIlroy */ - j=start+len/2; - k=start+len-1; - x=V[I[j]+h]; - y=V[I[start]+h]; - z=V[I[k]+h]; - if(len>40) { /* Big array: Pseudomedian of 9 */ - tmp=len/8; - x=MEDIAN3(x,V[I[j-tmp]+h],V[I[j+tmp]+h]); - y=MEDIAN3(y,V[I[start+tmp]+h],V[I[start+tmp+tmp]+h]); - z=MEDIAN3(z,V[I[k-tmp]+h],V[I[k-tmp-tmp]+h]); - }; /* Else medium array: Pseudomedian of 3 */ - x=MEDIAN3(x,y,z); - - jj=0;kk=0; - for(i=start;i<start+len;i++) { - if(V[I[i]+h]<x) jj++; - if(V[I[i]+h]==x) kk++; - }; - jj+=start;kk+=jj; - - i=start;j=0;k=0; - while(i<jj) { - if(V[I[i]+h]<x) { - i++; - } else if(V[I[i]+h]==x) { - tmp=I[i];I[i]=I[jj+j];I[jj+j]=tmp; - j++; - } else { - tmp=I[i];I[i]=I[kk+k];I[kk+k]=tmp; - k++; - }; - }; - - while(jj+j<kk) { - if(V[I[jj+j]+h]==x) { - j++; - } else { - tmp=I[jj+j];I[jj+j]=I[kk+k];I[kk+k]=tmp; - k++; - }; - }; - - if(jj>start) split(I,V,start,jj-start,h); - - for(i=0;i<kk-jj;i++) V[I[jj+i]]=kk-1; - if(jj==kk-1) I[jj]=-1; - - if(start+len>kk) split(I,V,kk,start+len-kk,h); -} - -static void qsufsort(int64_t *I,int64_t *V,const uint8_t *old,int64_t oldsize) -{ - int64_t buckets[256]; - int64_t i,h,len; - - for(i=0;i<256;i++) buckets[i]=0; - for(i=0;i<oldsize;i++) buckets[old[i]]++; - for(i=1;i<256;i++) buckets[i]+=buckets[i-1]; - for(i=255;i>0;i--) buckets[i]=buckets[i-1]; - buckets[0]=0; - - for(i=0;i<oldsize;i++) I[++buckets[old[i]]]=i; - I[0]=oldsize; - for(i=0;i<oldsize;i++) V[i]=buckets[old[i]]; - V[oldsize]=0; - for(i=1;i<256;i++) if(buckets[i]==buckets[i-1]+1) I[buckets[i]]=-1; - I[0]=-1; - - for(h=1;I[0]!=-(oldsize+1);h+=h) { - len=0; - for(i=0;i<oldsize+1;) { - if(I[i]<0) { - len-=I[i]; - i-=I[i]; - } else { - if(len) I[i-len]=-len; - len=V[I[i]]+1-i; - split(I,V,i,len,h); - i+=len; - len=0; - }; - }; - if(len) I[i-len]=-len; - }; - - for(i=0;i<oldsize+1;i++) I[V[i]]=i; -} - -static int64_t matchlen(const uint8_t *old,int64_t oldsize,const uint8_t *new,int64_t newsize) -{ - int64_t i; - - for(i=0;(i<oldsize)&&(i<newsize);i++) - if(old[i]!=new[i]) break; - - return i; -} - -static int64_t search(const int64_t *I,const uint8_t *old,int64_t oldsize, - const uint8_t *new,int64_t newsize,int64_t st,int64_t en,int64_t *pos) -{ - int64_t x,y; - - if(en-st<2) { - x=matchlen(old+I[st],oldsize-I[st],new,newsize); - y=matchlen(old+I[en],oldsize-I[en],new,newsize); - - if(x>y) { - *pos=I[st]; - return x; - } else { - *pos=I[en]; - return y; - } - }; - - x=st+(en-st)/2; - if(memcmp(old+I[x],new,MIN(oldsize-I[x],newsize))<0) { - return search(I,old,oldsize,new,newsize,x,en,pos); - } else { - return search(I,old,oldsize,new,newsize,st,x,pos); - }; -} - -static void offtout(int64_t x,uint8_t *buf) -{ - int64_t y; - - if(x<0) y=-x; else y=x; - - buf[0]=y%256;y-=buf[0]; - y=y/256;buf[1]=y%256;y-=buf[1]; - y=y/256;buf[2]=y%256;y-=buf[2]; - y=y/256;buf[3]=y%256;y-=buf[3]; - y=y/256;buf[4]=y%256;y-=buf[4]; - y=y/256;buf[5]=y%256;y-=buf[5]; - y=y/256;buf[6]=y%256;y-=buf[6]; - y=y/256;buf[7]=y%256; - - if(x<0) buf[7]|=0x80; -} - -static int64_t writedata(struct bsdiff_stream* stream, const void* buffer, int64_t length) -{ - int64_t result = 0; - - while (length > 0) - { - const int smallsize = (int)MIN(length, INT_MAX); - const int writeresult = stream->write(stream, buffer, smallsize); - if (writeresult == -1) - { - return -1; - } - - result += writeresult; - length -= smallsize; - buffer = (uint8_t*)buffer + smallsize; - } - - return result; -} - -struct bsdiff_request -{ - const uint8_t* old; - int64_t oldsize; - const uint8_t* new; - int64_t newsize; - struct bsdiff_stream* stream; - int64_t *I; - uint8_t *buffer; -}; - -static int bsdiff_internal(const struct bsdiff_request req) -{ - int64_t *I,*V; - int64_t scan,pos,len; - int64_t lastscan,lastpos,lastoffset; - int64_t oldscore,scsc; - int64_t s,Sf,lenf,Sb,lenb; - int64_t overlap,Ss,lens; - int64_t i; - uint8_t *buffer; - uint8_t buf[8 * 3]; - - if((V=req.stream->malloc((req.oldsize+1)*sizeof(int64_t)))==NULL) return -1; - I = req.I; - - qsufsort(I,V,req.old,req.oldsize); - req.stream->free(V); - - buffer = req.buffer; - - /* Compute the differences, writing ctrl as we go */ - scan=0;len=0;pos=0; - lastscan=0;lastpos=0;lastoffset=0; - while(scan<req.newsize) { - oldscore=0; - - for(scsc=scan+=len;scan<req.newsize;scan++) { - len=search(I,req.old,req.oldsize,req.new+scan,req.newsize-scan, - 0,req.oldsize,&pos); - - for(;scsc<scan+len;scsc++) - if((scsc+lastoffset<req.oldsize) && - (req.old[scsc+lastoffset] == req.new[scsc])) - oldscore++; - - if(((len==oldscore) && (len!=0)) || - (len>oldscore+8)) break; - - if((scan+lastoffset<req.oldsize) && - (req.old[scan+lastoffset] == req.new[scan])) - oldscore--; - }; - - if((len!=oldscore) || (scan==req.newsize)) { - s=0;Sf=0;lenf=0; - for(i=0;(lastscan+i<scan)&&(lastpos+i<req.oldsize);) { - if(req.old[lastpos+i]==req.new[lastscan+i]) s++; - i++; - if(s*2-i>Sf*2-lenf) { Sf=s; lenf=i; }; - }; - - lenb=0; - if(scan<req.newsize) { - s=0;Sb=0; - for(i=1;(scan>=lastscan+i)&&(pos>=i);i++) { - if(req.old[pos-i]==req.new[scan-i]) s++; - if(s*2-i>Sb*2-lenb) { Sb=s; lenb=i; }; - }; - }; - - if(lastscan+lenf>scan-lenb) { - overlap=(lastscan+lenf)-(scan-lenb); - s=0;Ss=0;lens=0; - for(i=0;i<overlap;i++) { - if(req.new[lastscan+lenf-overlap+i]== - req.old[lastpos+lenf-overlap+i]) s++; - if(req.new[scan-lenb+i]== - req.old[pos-lenb+i]) s--; - if(s>Ss) { Ss=s; lens=i+1; }; - }; - - lenf+=lens-overlap; - lenb-=lens; - }; - - offtout(lenf,buf); - offtout((scan-lenb)-(lastscan+lenf),buf+8); - offtout((pos-lenb)-(lastpos+lenf),buf+16); - - /* Write control data */ - if (writedata(req.stream, buf, sizeof(buf))) - return -1; - - /* Write diff data */ - for(i=0;i<lenf;i++) - buffer[i]=req.new[lastscan+i]-req.old[lastpos+i]; - if (writedata(req.stream, buffer, lenf)) - return -1; - - /* Write extra data */ - for(i=0;i<(scan-lenb)-(lastscan+lenf);i++) - buffer[i]=req.new[lastscan+lenf+i]; - if (writedata(req.stream, buffer, (scan-lenb)-(lastscan+lenf))) - return -1; - - lastscan=scan-lenb; - lastpos=pos-lenb; - lastoffset=pos-scan; - }; - }; - - return 0; -} - -int bsdiff(const uint8_t* old, int64_t oldsize, const uint8_t* newff, int64_t newsize, struct bsdiff_stream* stream) -{ - int result; - struct bsdiff_request req; - - if((req.I=stream->malloc((oldsize+1)*sizeof(int64_t)))==NULL) - return -1; - - if((req.buffer=stream->malloc(newsize+1))==NULL) - { - stream->free(req.I); - return -1; - } - - req.old = old; - req.oldsize = oldsize; - req.new = newff; - req.newsize = newsize; - req.stream = stream; - - result = bsdiff_internal(req); - - stream->free(req.buffer); - stream->free(req.I); - - return result; -} - -#include <sys/types.h> - -#include <bzlib.h> -#include <err.h> -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - -static int bz2_write(struct bsdiff_stream* stream, const void* buffer, int size) -{ - int bz2err; - BZFILE* bz2; - - bz2 = (BZFILE*)stream->opaque; - BZ2_bzWrite(&bz2err, bz2, (void*)buffer, size); - if (bz2err != BZ_STREAM_END && bz2err != BZ_OK) - return -1; - - return 0; -} - -int bs_diff(const char *oldfile, const char *newfile, const char *patchfile) -{ - int fd; - int bz2err; - uint8_t *old,*new; - off_t oldsize,newsize; - uint8_t buf[8]; - FILE * pf; - struct bsdiff_stream stream; - BZFILE* bz2; - - memset(&bz2, 0, sizeof(bz2)); - stream.malloc = malloc; - stream.free = free; - stream.write = bz2_write; - - //if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]); - - /* Allocate oldsize+1 bytes instead of oldsize bytes to ensure - that we never try to malloc(0) and get a NULL pointer */ - if(((fd=open(oldfile,O_RDONLY,0))<0) || - ((oldsize=lseek(fd,0,SEEK_END))==-1) || - ((old=malloc(oldsize+1))==NULL) || - (lseek(fd,0,SEEK_SET)!=0) || - (read(fd,old,oldsize)!=oldsize) || - (close(fd)==-1)) { - return -1; - //err(1,"%s",argv[1]); - } - - - /* Allocate newsize+1 bytes instead of newsize bytes to ensure - that we never try to malloc(0) and get a NULL pointer */ - if(((fd=open(newfile,O_RDONLY,0))<0) || - ((newsize=lseek(fd,0,SEEK_END))==-1) || - ((new=malloc(newsize+1))==NULL) || - (lseek(fd,0,SEEK_SET)!=0) || - (read(fd,new,newsize)!=newsize) || - (close(fd)==-1)){ - return -2; - //err(1,"%s",argv[2]); - } - - /* Create the patch file */ - if ((pf = fopen(patchfile, "w")) == NULL){ - return -3; - //err(1, "%s", argv[3]); - } - - - /* Write header (signature+newsize) */ - offtout(newsize, buf); - if (fwrite("ENDSLEY/BSDIFF43", 16, 1, pf) != 1 || - fwrite(buf, sizeof(buf), 1, pf) != 1){ - return -4; - //err(1, "Failed to write header"); - } - - - if (NULL == (bz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0))) - { - return -5; - //errx(1, "BZ2_bzWriteOpen, bz2err=%d", bz2err); - } - - stream.opaque = bz2; - if (bsdiff(old, oldsize, new, newsize, &stream)){ - return -6; - //err(1, "bsdiff"); - } - - BZ2_bzWriteClose(&bz2err, bz2, 0, NULL, NULL); - if (bz2err != BZ_OK){ - return -7; - //err(1, "BZ2_bzWriteClose, bz2err=%d", bz2err); - } - - if (fclose(pf)){ - return -8; - //err(1, "fclose"); - } - - /* Free the memory we used */ - free(old); - free(new); - - return 0; -} diff --git a/thirdparty/bsdiff/bsdiff.h b/thirdparty/bsdiff/bsdiff.h deleted file mode 100644 index 9d15e06..0000000 --- a/thirdparty/bsdiff/bsdiff.h +++ /dev/null @@ -1,47 +0,0 @@ -/*- - * Copyright 2003-2005 Colin Percival - * Copyright 2012 Matthew Endsley - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted providing that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef BSDIFF_H -# define BSDIFF_H - -# include <stddef.h> -# include <stdint.h> - -struct bsdiff_stream -{ - void* opaque; - - void* (*malloc)(size_t size); - void (*free)(void* ptr); - int (*write)(struct bsdiff_stream* stream, const void* buffer, int size); -}; - -int bsdiff(const uint8_t* old, int64_t oldsize, const uint8_t* newff, int64_t newsize, struct bsdiff_stream* stream); - -int bs_diff(const char *oldfile, const char *newfile, const char *patchfile); - -#endif diff --git a/thirdparty/bsdiff/bspatch.c b/thirdparty/bsdiff/bspatch.c deleted file mode 100644 index b283323..0000000 --- a/thirdparty/bsdiff/bspatch.c +++ /dev/null @@ -1,200 +0,0 @@ -/*- - * Copyright 2003-2005 Colin Percival - * Copyright 2012 Matthew Endsley - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted providing that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "bspatch.h" - -static int64_t offtin(uint8_t *buf) -{ - int64_t y; - - y=buf[7]&0x7F; - y=y*256;y+=buf[6]; - y=y*256;y+=buf[5]; - y=y*256;y+=buf[4]; - y=y*256;y+=buf[3]; - y=y*256;y+=buf[2]; - y=y*256;y+=buf[1]; - y=y*256;y+=buf[0]; - - if(buf[7]&0x80) y=-y; - - return y; -} - -int bspatch(const uint8_t* old, int64_t oldsize, uint8_t* newff, int64_t newsize, struct bspatch_stream* stream) -{ - uint8_t buf[8]; - int64_t oldpos,newpos; - int64_t ctrl[3]; - int64_t i; - - oldpos=0;newpos=0; - while(newpos<newsize) { - /* Read control data */ - for(i=0;i<=2;i++) { - if (stream->read(stream, buf, 8)) - return -1; - ctrl[i]=offtin(buf); - }; - - /* Sanity-check */ - if(newpos+ctrl[0]>newsize) - return -1; - - /* Read diff string */ - if (stream->read(stream, newff + newpos, ctrl[0])) - return -1; - - /* Add old data to diff string */ - for(i=0;i<ctrl[0];i++) - if((oldpos+i>=0) && (oldpos+i<oldsize)) - newff[newpos+i]+=old[oldpos+i]; - - /* Adjust pointers */ - newpos+=ctrl[0]; - oldpos+=ctrl[0]; - - /* Sanity-check */ - if(newpos+ctrl[1]>newsize) - return -1; - - /* Read extra string */ - if (stream->read(stream, newff + newpos, ctrl[1])) - return -1; - - /* Adjust pointers */ - newpos+=ctrl[1]; - oldpos+=ctrl[2]; - }; - - return 0; -} - - -#include <bzlib.h> -#include <stdlib.h> -#include <stdint.h> -#include <stdio.h> -#include <string.h> -#include <err.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <fcntl.h> - -int bz2_read(const struct bspatch_stream* stream, void* buffer, int length) -{ - int n; - int bz2err; - BZFILE* bz2; - - bz2 = (BZFILE*)stream->opaque; - n = BZ2_bzRead(&bz2err, bz2, buffer, length); - if (n != length) - return -1; - - return 0; -} - -int apply_bsdiff_patch(const char *oldfile, const char *newfile, const char *patch) -{ - FILE * f; - int fd; - int bz2err; - uint8_t header[24]; - uint8_t *old, *newff; - int64_t oldsize, newsize; - BZFILE* bz2; - struct bspatch_stream stream; - struct stat sb; - - //if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]); - - /* Open patch file */ - if ((f = fopen(patch, "r")) == NULL){ - //err(1, "fopen(%s)", patch); - return -1; - } - - /* Read header */ - if (fread(header, 1, 24, f) != 24) { - return -1; - /* - if (feof(f)) - errx(1, "Corrupt patch\n"); - err(1, "fread(%s)", argv[3]); - */ - } - - /* Check for appropriate magic */ - if (memcmp(header, "ENDSLEY/BSDIFF43", 16) != 0) - errx(1, "Corrupt patch\n"); - - /* Read lengths from header */ - newsize=offtin(header+16); - if(newsize<0) - errx(1,"Corrupt patch\n"); - - /* Close patch file and re-open it via libbzip2 at the right places */ - if(((fd=open(oldfile,O_RDONLY,0))<0) || - ((oldsize=lseek(fd,0,SEEK_END))==-1) || - ((old=malloc(oldsize+1))==NULL) || - (lseek(fd,0,SEEK_SET)!=0) || - (read(fd,old,oldsize)!=oldsize) || - (fstat(fd, &sb)) || - (close(fd)==-1)) { - return -2; - // err(1,"%s",argv[1]); - } - if((newff=malloc(newsize+1))==NULL) err(1,NULL); - - if (NULL == (bz2 = BZ2_bzReadOpen(&bz2err, f, 0, 0, NULL, 0))) - errx(1, "BZ2_bzReadOpen, bz2err=%d", bz2err); - - stream.read = bz2_read; - stream.opaque = bz2; - if (bspatch(old, oldsize, newff, newsize, &stream)) - errx(1, "bspatch"); - - /* Clean up the bzip2 reads */ - BZ2_bzReadClose(&bz2err, bz2); - fclose(f); - - /* Write the new file */ - if(((fd=open(newfile,O_CREAT|O_TRUNC|O_WRONLY,sb.st_mode))<0) || - (write(fd,newff,newsize)!=newsize) || (close(fd)==-1)) - { - return -3; - //err(1,"%s",argv[2]); - } - - free(newff); - free(old); - - return 0; -} - diff --git a/thirdparty/bsdiff/bspatch.h b/thirdparty/bsdiff/bspatch.h deleted file mode 100644 index 2037bb7..0000000 --- a/thirdparty/bsdiff/bspatch.h +++ /dev/null @@ -1,47 +0,0 @@ -/*- - * Copyright 2003-2005 Colin Percival - * Copyright 2012 Matthew Endsley - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted providing that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef BSPATCH_H -#define BSPATCH_H - -# include <stdint.h> - -struct bspatch_stream -{ - void* opaque; - int (*read)(const struct bspatch_stream* stream, void* buffer, int length); -}; - -int bz2_read(const struct bspatch_stream* stream, void* buffer, int length); - -int bspatch(const uint8_t* old, int64_t oldsize, uint8_t* newff, int64_t newsize, struct bspatch_stream* stream); - - -int apply_bsdiff_patch(const char *oldfile, const char *newfile, const char *patch); - -#endif -
