diff options
author | Alex Deymo <deymo@google.com> | 2015-10-14 21:39:04 -0700 |
---|---|---|
committer | Alex Deymo <deymo@google.com> | 2015-10-23 20:09:15 -0700 |
commit | b870eb5805202d3464e36f18060bdd4bcd367b30 (patch) | |
tree | 74bd509712c0f7fb0278b9e8280e67c48aba415b | |
parent | daf35169e3fa51cc9ff468f12acd435a9b075266 (diff) | |
download | bsdiff-b870eb5805202d3464e36f18060bdd4bcd367b30.tar.gz |
bspatch: Ran clang-format on bspatch.cc.
This patch attempts to uniform the format on bspatch before we land
further changes there.
Bug: 24478450
Test: make all test && ./unittest
Change-Id: I45ec3d45ab4b081bddef1ac7f5df35ac7e6e554c
-rw-r--r-- | bspatch.cc | 438 |
1 files changed, 216 insertions, 222 deletions
@@ -28,6 +28,8 @@ __FBSDID("$FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.c,v 1.1 2005/08/06 01:59:06 cperciva Exp $"); #endif +#include "bspatch.h" + #include <bzlib.h> #include <err.h> #include <fcntl.h> @@ -36,47 +38,52 @@ __FBSDID("$FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.c,v 1.1 2005/08/06 01:59: #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <sys/types.h> // android +#include <sys/types.h> #include "extents.h" namespace { -static off_t offtin(u_char *buf) -{ - off_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; +static off_t offtin(u_char *buf) { + off_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; } -/* TODO(deymo): Re-enable exfile.h once we can build it for the -target and mac. */ +// TODO(deymo): Re-enable exfile.h once we can build it for the +// target and mac. #if 0 -/* Parses an extent string ex_str, returning a pointer to a newly allocated - * array of extents. The number of extents is stored in ex_count_p (if - * provided). */ -static ex_t *parse_extent_str(const char *ex_str, size_t *ex_count_p) -{ - size_t ex_count = (size_t)-1; - ex_t *ex_arr = extents_parse(ex_str, NULL, &ex_count); - if (!ex_arr) - errx(1, (ex_count == (size_t)-1 ? - "error parsing extents" : - "error allocating extent array")); - if (ex_count_p) - *ex_count_p = ex_count; - return ex_arr; +// Parses an extent string ex_str, returning a pointer to a newly allocated +// array of extents. The number of extents is stored in ex_count_p (if +// provided). +static ex_t *parse_extent_str(const char *ex_str, size_t *ex_count_p) { + size_t ex_count = (size_t)-1; + ex_t* ex_arr = extents_parse(ex_str, NULL, &ex_count); + if (!ex_arr) + errx(1, (ex_count == (size_t)-1 ? "error parsing extents" + : "error allocating extent array")); + if (ex_count_p) + *ex_count_p = ex_count; + return ex_arr; } #endif @@ -88,201 +95,188 @@ int bspatch( const char* old_filename, const char* new_filename, const char* patch_filename, const char* old_extents, const char* new_extents) { - FILE * f, * cpf, * dpf, * epf; - BZFILE * cpfbz2, * dpfbz2, * epfbz2; - int cbz2err, dbz2err, ebz2err; - FILE *old_file = NULL, *new_file = NULL; - ssize_t oldsize,newsize; - ssize_t bzctrllen,bzdatalen; - u_char header[32],buf[8]; - u_char *new_buf; - off_t oldpos,newpos; - off_t ctrl[3]; - off_t lenread; - off_t i, j; - - int using_extents = (old_extents != NULL || new_extents != NULL); - - /* Open patch file */ - if ((f = fopen(patch_filename, "r")) == NULL) - err(1, "fopen(%s)", patch_filename); - - /* - File format: - 0 8 "BSDIFF40" - 8 8 X - 16 8 Y - 24 8 sizeof(new_filename) - 32 X bzip2(control block) - 32+X Y bzip2(diff block) - 32+X+Y ??? bzip2(extra block) - with control block a set of triples (x,y,z) meaning "add x bytes - from oldfile to x bytes from the diff block; copy y bytes from the - extra block; seek forwards in oldfile by z bytes". - */ - - /* Read header */ - if (fread(header, 1, 32, f) < 32) { - if (feof(f)) - errx(1, "Corrupt patch\n"); - err(1, "fread(%s)", patch_filename); - } - - /* Check for appropriate magic */ - if (memcmp(header, "BSDIFF40", 8) != 0) - errx(1, "Corrupt patch\n"); - - /* Read lengths from header */ - bzctrllen=offtin(header+8); - bzdatalen=offtin(header+16); - newsize=offtin(header+24); - if((bzctrllen<0) || (bzdatalen<0) || (newsize<0)) - errx(1,"Corrupt patch\n"); - - /* Close patch file and re-open it via libbzip2 at the right places */ - if (fclose(f)) - err(1, "fclose(%s)", patch_filename); - if ((cpf = fopen(patch_filename, "r")) == NULL) - err(1, "fopen(%s)", patch_filename); - if (fseek(cpf, 32, SEEK_SET)) - err(1, "fseeko(%s, %lld)", patch_filename, - (long long)32); - if ((cpfbz2 = BZ2_bzReadOpen(&cbz2err, cpf, 0, 0, NULL, 0)) == NULL) - errx(1, "BZ2_bzReadOpen, bz2err = %d", cbz2err); - if ((dpf = fopen(patch_filename, "r")) == NULL) - err(1, "fopen(%s)", patch_filename); - if (fseek(dpf, 32 + bzctrllen, SEEK_SET)) - err(1, "fseeko(%s, %lld)", patch_filename, - (long long)(32 + bzctrllen)); - if ((dpfbz2 = BZ2_bzReadOpen(&dbz2err, dpf, 0, 0, NULL, 0)) == NULL) - errx(1, "BZ2_bzReadOpen, bz2err = %d", dbz2err); - if ((epf = fopen(patch_filename, "r")) == NULL) - err(1, "fopen(%s)", patch_filename); - if (fseek(epf, 32 + bzctrllen + bzdatalen, SEEK_SET)) - err(1, "fseeko(%s, %lld)", patch_filename, - (long long)(32 + bzctrllen + bzdatalen)); - if ((epfbz2 = BZ2_bzReadOpen(&ebz2err, epf, 0, 0, NULL, 0)) == NULL) - errx(1, "BZ2_bzReadOpen, bz2err = %d", ebz2err); - - /* Open input file for reading. */ - if (using_extents) { - /* TODO(deymo): Re-enable exfile.h once we can build it for the - target and mac. */ - errx(1, "Extent support is disabled.\n"); + FILE* f, *cpf, *dpf, *epf; + BZFILE* cpfbz2, *dpfbz2, *epfbz2; + int cbz2err, dbz2err, ebz2err; + FILE* old_file = NULL, * new_file = NULL; + ssize_t oldsize, newsize; + ssize_t bzctrllen, bzdatalen; + u_char header[32], buf[8]; + u_char* new_buf; + off_t oldpos, newpos; + off_t ctrl[3]; + off_t lenread; + off_t i, j; + + int using_extents = (old_extents != NULL || new_extents != NULL); + + // Open patch file. + if ((f = fopen(patch_filename, "r")) == NULL) + err(1, "fopen(%s)", patch_filename); + + // File format: + // 0 8 "BSDIFF40" + // 8 8 X + // 16 8 Y + // 24 8 sizeof(new_filename) + // 32 X bzip2(control block) + // 32+X Y bzip2(diff block) + // 32+X+Y ??? bzip2(extra block) + // with control block a set of triples (x,y,z) meaning "add x bytes + // from oldfile to x bytes from the diff block; copy y bytes from the + // extra block; seek forwards in oldfile by z bytes". + + // Read header. + if (fread(header, 1, 32, f) < 32) { + if (feof(f)) + errx(1, "Corrupt patch\n"); + err(1, "fread(%s)", patch_filename); + } + + // Check for appropriate magic. + if (memcmp(header, "BSDIFF40", 8) != 0) + errx(1, "Corrupt patch\n"); + + // Read lengths from header. + bzctrllen = offtin(header + 8); + bzdatalen = offtin(header + 16); + newsize = offtin(header + 24); + if ((bzctrllen < 0) || (bzdatalen < 0) || (newsize < 0)) + errx(1, "Corrupt patch\n"); + + // Close patch file and re-open it via libbzip2 at the right places. + if (fclose(f)) + err(1, "fclose(%s)", patch_filename); + if ((cpf = fopen(patch_filename, "r")) == NULL) + err(1, "fopen(%s)", patch_filename); + if (fseek(cpf, 32, SEEK_SET)) + err(1, "fseeko(%s, %lld)", patch_filename, (long long)32); + if ((cpfbz2 = BZ2_bzReadOpen(&cbz2err, cpf, 0, 0, NULL, 0)) == NULL) + errx(1, "BZ2_bzReadOpen, bz2err = %d", cbz2err); + if ((dpf = fopen(patch_filename, "r")) == NULL) + err(1, "fopen(%s)", patch_filename); + if (fseek(dpf, 32 + bzctrllen, SEEK_SET)) + err(1, "fseeko(%s, %lld)", patch_filename, (long long)(32 + bzctrllen)); + if ((dpfbz2 = BZ2_bzReadOpen(&dbz2err, dpf, 0, 0, NULL, 0)) == NULL) + errx(1, "BZ2_bzReadOpen, bz2err = %d", dbz2err); + if ((epf = fopen(patch_filename, "r")) == NULL) + err(1, "fopen(%s)", patch_filename); + if (fseek(epf, 32 + bzctrllen + bzdatalen, SEEK_SET)) + err(1, "fseeko(%s, %lld)", patch_filename, + (long long)(32 + bzctrllen + bzdatalen)); + if ((epfbz2 = BZ2_bzReadOpen(&ebz2err, epf, 0, 0, NULL, 0)) == NULL) + errx(1, "BZ2_bzReadOpen, bz2err = %d", ebz2err); + + // Open input file for reading. + if (using_extents) { + // TODO(deymo): Re-enable exfile.h once we can build it for the + // target and mac. + errx(1, "Extent support is disabled.\n"); #if 0 - size_t ex_count = 0; - ex_t *ex_arr = parse_extent_str(old_extents, &ex_count); - old_file = exfile_fopen(old_filename, "r", ex_arr, ex_count, - free); + size_t ex_count = 0; + ex_t *ex_arr = parse_extent_str(old_extents, &ex_count); + old_file = exfile_fopen(old_filename, "r", ex_arr, ex_count, + free); #endif - } else { - old_file = fopen(old_filename, "r"); - } - if (!old_file || - fseek(old_file, 0, SEEK_END) != 0 || - (oldsize = ftell(old_file)) < 0 || - fseek(old_file, 0, SEEK_SET) != 0) - err(1, "cannot obtain the size of %s", old_filename); - off_t old_file_pos = 0; - - if((new_buf=static_cast<u_char*>(malloc(newsize+1)))==NULL) err(1,NULL); - - oldpos=0;newpos=0; - while(newpos<newsize) { - /* Read control data */ - for(i=0;i<=2;i++) { - lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8); - if ((lenread < 8) || ((cbz2err != BZ_OK) && - (cbz2err != BZ_STREAM_END))) - errx(1, "Corrupt patch\n"); - ctrl[i]=offtin(buf); - }; - - // android local change (start) - if (ctrl[0]<0||ctrl[1]<0) - errx(1,"Corrupt patch\n"); - // android local change (end) - - /* Sanity-check */ - if(newpos+ctrl[0]>newsize) - errx(1,"Corrupt patch\n"); - - /* Read diff string */ - lenread = BZ2_bzRead(&dbz2err, dpfbz2, new_buf + newpos, ctrl[0]); - if ((lenread < ctrl[0]) || - ((dbz2err != BZ_OK) && (dbz2err != BZ_STREAM_END))) - errx(1, "Corrupt patch\n"); - - /* Add old data to diff string. It is enough to fseek once, at - * the beginning of the sequence, to avoid unnecessary - * overhead. */ - j = newpos; - if ((i = oldpos) < 0) { - j -= i; - i = 0; - } - if (i != old_file_pos && fseek(old_file, i, SEEK_SET) < 0) - err(1, "error seeking input file to offset %" PRIdMAX, - (intmax_t)i); - if ((old_file_pos = oldpos + ctrl[0]) > oldsize) - old_file_pos = oldsize; - while (i++ < old_file_pos) { - u_char c; - if (fread(&c, 1, 1, old_file) != 1) - err(1, "error reading from input file"); - new_buf[j++] += c; - } - - /* Adjust pointers */ - newpos+=ctrl[0]; - oldpos+=ctrl[0]; - - /* Sanity-check */ - if(newpos+ctrl[1]>newsize) - errx(1,"Corrupt patch\n"); - - /* Read extra string */ - lenread = BZ2_bzRead(&ebz2err, epfbz2, new_buf + newpos, ctrl[1]); - if ((lenread < ctrl[1]) || - ((ebz2err != BZ_OK) && (ebz2err != BZ_STREAM_END))) - errx(1, "Corrupt patch\n"); - - /* Adjust pointers */ - newpos+=ctrl[1]; - oldpos+=ctrl[2]; - }; - - /* Close input file. */ - fclose(old_file); - - /* Clean up the bzip2 reads */ - BZ2_bzReadClose(&cbz2err, cpfbz2); - BZ2_bzReadClose(&dbz2err, dpfbz2); - BZ2_bzReadClose(&ebz2err, epfbz2); - if (fclose(cpf) || fclose(dpf) || fclose(epf)) - err(1, "fclose(%s)", patch_filename); - - /* Write the new file */ - if (using_extents) { - /* TODO(deymo): Re-enable exfile.h once we can build it for the - target and mac. */ + } else { old_file = fopen(old_filename, "r"); } + if (!old_file || fseek(old_file, 0, SEEK_END) != 0 || + (oldsize = ftell(old_file)) < 0 || fseek(old_file, 0, SEEK_SET) != 0) + err(1, "cannot obtain the size of %s", old_filename); + off_t old_file_pos = 0; + + if ((new_buf = static_cast<u_char*>(malloc(newsize + 1))) == NULL) + err(1, NULL); + + oldpos = 0; + newpos = 0; + while (newpos < newsize) { + // Read control data. + for (i = 0; i <= 2; i++) { + lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8); + if ((lenread < 8) || ((cbz2err != BZ_OK) && (cbz2err != BZ_STREAM_END))) + errx(1, "Corrupt patch\n"); + ctrl[i] = offtin(buf); + }; + + // Sanity-check. + if (ctrl[0] < 0 || ctrl[1] < 0) + errx(1, "Corrupt patch\n"); + + // Sanity-check. + if (newpos + ctrl[0] > newsize) + errx(1, "Corrupt patch\n"); + + // Read diff string. + lenread = BZ2_bzRead(&dbz2err, dpfbz2, new_buf + newpos, ctrl[0]); + if ((lenread < ctrl[0]) || + ((dbz2err != BZ_OK) && (dbz2err != BZ_STREAM_END))) + errx(1, "Corrupt patch\n"); + + // Add old data to diff string. It is enough to fseek once, at + // the beginning of the sequence, to avoid unnecessary overhead. + j = newpos; + if ((i = oldpos) < 0) { + j -= i; + i = 0; + } + if (i != old_file_pos && fseek(old_file, i, SEEK_SET) < 0) + err(1, "error seeking input file to offset %" PRIdMAX, (intmax_t)i); + if ((old_file_pos = oldpos + ctrl[0]) > oldsize) + old_file_pos = oldsize; + while (i++ < old_file_pos) { + u_char c; + if (fread(&c, 1, 1, old_file) != 1) + err(1, "error reading from input file"); + new_buf[j++] += c; + } + + // Adjust pointers. + newpos += ctrl[0]; + oldpos += ctrl[0]; + + // Sanity-check. + if (newpos + ctrl[1] > newsize) + errx(1, "Corrupt patch\n"); + + // Read extra string. + lenread = BZ2_bzRead(&ebz2err, epfbz2, new_buf + newpos, ctrl[1]); + if ((lenread < ctrl[1]) || + ((ebz2err != BZ_OK) && (ebz2err != BZ_STREAM_END))) + errx(1, "Corrupt patch\n"); + + // Adjust pointers. + newpos += ctrl[1]; + oldpos += ctrl[2]; + }; + + // Close input file. + fclose(old_file); + + // Clean up the bzip2 reads. + BZ2_bzReadClose(&cbz2err, cpfbz2); + BZ2_bzReadClose(&dbz2err, dpfbz2); + BZ2_bzReadClose(&ebz2err, epfbz2); + if (fclose(cpf) || fclose(dpf) || fclose(epf)) + err(1, "fclose(%s)", patch_filename); + + // Write the new file. + if (using_extents) { +// TODO(deymo): Re-enable exfile.h once we can build it for the +// target and mac. #if 0 - size_t ex_count = 0; - ex_t *ex_arr = parse_extent_str(new_extents, &ex_count); - new_file = exfile_fopen(new_filename, "w", ex_arr, ex_count, - free); + size_t ex_count = 0; + ex_t *ex_arr = parse_extent_str(new_extents, &ex_count); + new_file = exfile_fopen(new_filename, "w", ex_arr, ex_count, + free); #endif - } else { - new_file = fopen(new_filename, "w"); - } - if (!new_file || - fwrite(new_buf, 1, newsize, new_file) != (size_t)newsize || - fclose(new_file) == EOF) - err(1,"%s",new_filename); + } else { new_file = fopen(new_filename, "w"); } + if (!new_file || fwrite(new_buf, 1, newsize, new_file) != (size_t)newsize || + fclose(new_file) == EOF) + err(1, "%s", new_filename); - free(new_buf); + free(new_buf); - return 0; + return 0; } } // namespace bsdiff |