RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 02-Dec-2009 15:44:16 Branch: HEAD Handle: 2009120214441501 Modified files: rpm CHANGES rpm/rpmio Makefile.am bsdiff.c Log: - bsdiff: use bzip2 through -lrpmio. Summary: Revision Changes Path 1.3173 +1 -0 rpm/CHANGES 1.261 +2 -0 rpm/rpmio/Makefile.am 1.4 +88 -49 rpm/rpmio/bsdiff.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.3172 -r1.3173 CHANGES --- rpm/CHANGES 2 Dec 2009 14:42:32 -0000 1.3172 +++ rpm/CHANGES 2 Dec 2009 14:44:15 -0000 1.3173 @@ -1,5 +1,6 @@ 5.2b1 -> 5.3a1 + - jbj: bsdiff: use bzip2 through -lrpmio. - jbj: rpmbz: expose sufficient methods to uncouple bsdiff from bzip2. - jbj: add bsdiff/bspatch from bsdiff-4.3. - jbj: rpmlio: add "opt-in" enablers for syscall/scriptlet logging. @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/Makefile.am ============================================================================ $ cvs diff -u -r1.260 -r1.261 Makefile.am --- rpm/rpmio/Makefile.am 1 Dec 2009 17:45:12 -0000 1.260 +++ rpm/rpmio/Makefile.am 2 Dec 2009 14:44:16 -0000 1.261 @@ -260,8 +260,10 @@ # testdata/wintestoutput3 bsdiff_SOURCES = bsdiff.c +bsdiff_LDADD = $(RPMIO_LDADD_COMMON) bspatch_SOURCES = bspatch.c +bspatch_LDADD = $(RPMIO_LDADD_COMMON) rpmborg_SOURCES = rpmborg.c rpmborg_LDADD = $(RPMIO_LDADD_COMMON) @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/bsdiff.c ============================================================================ $ cvs diff -u -r1.3 -r1.4 bsdiff.c --- rpm/rpmio/bsdiff.c 1 Dec 2009 21:50:56 -0000 1.3 +++ rpm/rpmio/bsdiff.c 2 Dec 2009 14:44:16 -0000 1.4 @@ -222,6 +222,9 @@ int main(int argc, char *argv[]) { +const char * ofn; +const char * nfn; +const char * pfn; rpmiob oldiob = NULL; uint8_t * old; int64_t oldsize = 0; @@ -245,23 +248,27 @@ uint8_t buf[8]; uint8_t header[32]; - FILE * pf; - BZFILE * pfbz2; - int bz2err; +FILE * fp = NULL; +const char * _errmsg = NULL; +rpmbz bz = NULL; + int ec = 1; /* assume error */ int xx; if (argc != 4) errx(1, "usage: %s oldfile newfile patchfile\n", argv[0]); + ofn = argv[1]; + nfn = argv[2]; + pfn = argv[3]; /* Read the old file. */ - if ((xx = rpmiobSlurp(argv[1], &oldiob)) != 0) + if ((xx = rpmiobSlurp(ofn, &oldiob)) != 0) goto exit; old = rpmiobBuf(oldiob); oldsize = rpmiobLen(oldiob); /* Read the new file. */ - if ((xx = rpmiobSlurp(argv[2], &newiob)) != 0) + if ((xx = rpmiobSlurp(nfn, &newiob)) != 0) goto exit; new = rpmiobBuf(newiob); newsize = rpmiobLen(newiob); @@ -276,8 +283,11 @@ eb = xmalloc(newsize + 1); /* Create the patch file */ - if ((pf = fopen(argv[3], "w")) == NULL) - err(1, "%s", argv[3]); + fp = fopen(pfn, "w"); + if (fp == NULL) { + fprintf(stderr, "fopen(%s)\n", pfn); + goto exit; + } /* Header is 0 8 "BSDIFF40" @@ -293,12 +303,18 @@ offtout(0, header + 8); offtout(0, header + 16); offtout(newsize, header + 24); - if (fwrite(header, 1, sizeof(header), pf) != sizeof(header)) - err(1, "fwrite(%s)", argv[3]); + if (fwrite(header, 1, sizeof(header), fp) != sizeof(header)) { + fprintf(stderr, "fwrite(%s)\n", pfn); + goto exit; + } /* Compute the differences, writing ctrl as we go */ - if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL) - errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err); + (void) fflush(fp); + bz = rpmbzNew(pfn, "w", dup(fileno(fp))); + if (bz == NULL) { + fprintf(stderr, "rpmbzNew: %s\n", pfn); + goto exit; + } while (scan < newsize) { int64_t oldscore; @@ -383,66 +399,84 @@ eblen += (scan - lenb) - (lastscan + lenf); offtout(lenf, buf); - BZ2_bzWrite(&bz2err, pfbz2, buf, 8); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); + if (rpmbzWrite(bz, (const char *)buf, 8, &_errmsg) != 8) { + fprintf(stderr, "rpmbzWrite: %s\n", _errmsg); + goto exit; + } offtout((scan - lenb) - (lastscan + lenf), buf); - BZ2_bzWrite(&bz2err, pfbz2, buf, 8); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); + if (rpmbzWrite(bz, (const char *)buf, 8, &_errmsg) != 8) { + fprintf(stderr, "rpmbzWrite: %s\n", _errmsg); + goto exit; + } offtout((pos - lenb) - (lastpos + lenf), buf); - BZ2_bzWrite(&bz2err, pfbz2, buf, 8); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); + if (rpmbzWrite(bz, (const char *)buf, 8, &_errmsg) != 8) { + fprintf(stderr, "rpmbzWrite: %s\n", _errmsg); + goto exit; + } lastscan = scan - lenb; lastpos = pos - lenb; lastoffset = pos - scan; } } - BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err); + bz = rpmbzFree(bz, 0); /* Compute size of compressed ctrl data */ - if ((len = ftello(pf)) == -1) - err(1, "ftello"); + if ((len = ftello(fp)) == -1) { + fprintf(stderr, "ftello(%s)\n", pfn); + goto exit; + } offtout(len - 32, header + 8); /* Write compressed diff data */ - if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL) - errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err); - BZ2_bzWrite(&bz2err, pfbz2, db, dblen); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); - BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err); + (void) fflush(fp); + bz = rpmbzNew(pfn, "w", dup(fileno(fp))); + if (bz == NULL) { + fprintf(stderr, "rpmbzNew: %s\n", pfn); + goto exit; + } + + if (rpmbzWrite(bz, (const char *)db, dblen, &_errmsg) != dblen) { + fprintf(stderr, "rpmbzWrite: %s\n", _errmsg); + goto exit; + } + bz = rpmbzFree(bz, 0); /* Compute size of compressed diff data */ - if ((newsize = ftello(pf)) == -1) - err(1, "ftello"); + newsize = ftello(fp); + if (newsize == -1) { + fprintf(stderr, "ftello(%s)\n", pfn); + goto exit; + } offtout(newsize - len, header + 16); /* Write compressed extra data */ - if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL) - errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err); - BZ2_bzWrite(&bz2err, pfbz2, eb, eblen); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); - BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err); + (void) fflush(fp); + bz = rpmbzNew(pfn, "w", dup(fileno(fp))); + if (bz == NULL) { + fprintf(stderr, "rpmbzNew: %s\n", pfn); + goto exit; + } + + if (rpmbzWrite(bz, (const char *)eb, eblen, &_errmsg) != eblen) { + fprintf(stderr, "rpmbzWrite: %s\n", _errmsg); + goto exit; + } + bz = rpmbzFree(bz, 0); /* Seek to the beginning, write the header, and close the file */ - if (fseeko(pf, 0, SEEK_SET)) - err(1, "fseeko"); - if (fwrite(header, 32, 1, pf) != 1) - err(1, "fwrite(%s)", argv[3]); - if (fclose(pf)) - err(1, "fclose"); + if (fseeko(fp, 0, SEEK_SET) != 0) { + fprintf(stderr, "fseeko(%s)\n", pfn); + goto exit; + } + if (fwrite(header, 1, sizeof(header), fp) != sizeof(header)) { + fprintf(stderr, "fwrite(%s)\n", pfn); + goto exit; + } + (void) fclose(fp); + fp = NULL; ec = 0; exit: @@ -453,5 +487,10 @@ oldiob = rpmiobFree(oldiob); newiob = rpmiobFree(newiob); + if (bz) + bz = rpmbzFree(bz, (ec != 0)); + if (fp) + (void) fclose(fp); + return ec; } @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org