|
version 1.1.1.1, 2010/03/24 16:00:15
|
version 1.1.1.1.2.1, 2010/03/24 16:31:28
|
|
Line 56 inline void syncSetErr(int eno, char *estr, ...)
|
Line 56 inline void syncSetErr(int eno, char *estr, ...)
|
| * syncSignature() Calculate and create signature for diff |
* syncSignature() Calculate and create signature for diff |
| * @csInput = Input patched file name for calculating check sums |
* @csInput = Input patched file name for calculating check sums |
| * @csSig = Output Signature file name |
* @csSig = Output Signature file name |
| |
* @compress = 2 compress signatures output, 0 not compressed |
| * return: -1 error, 0 ok |
* return: -1 error, 0 ok |
| */ |
*/ |
| int syncSignature(const char *csInput, const char *csSig) | int syncSignature(const char *csInput, const char *csSig, int compress) |
| { |
{ |
| int inf, outf, ret; | int inf, outf, f, ret; |
| u_char buf[CHUNK_MAX]; |
u_char buf[CHUNK_MAX]; |
| register int i = 0; |
register int i = 0; |
| off_t off = 0ll; |
off_t off = 0ll; |
| sync_chunk_t sc; |
sync_chunk_t sc; |
| |
char szTemp[MAXPATHLEN]; |
| |
|
| inf = syncOpen(csInput, O_RDONLY); |
inf = syncOpen(csInput, O_RDONLY); |
| if (inf == -1) |
if (inf == -1) |
| return inf; |
return inf; |
| outf = syncOpen(csSig, O_WRONLY); | if (compress & 2) |
| if (outf == -1) { | f = syncTemp(szTemp, MAXPATHLEN); |
| | else |
| | f = syncOpen(csSig, O_WRONLY); |
| | if (f == -1) { |
| syncClose(inf); |
syncClose(inf); |
| return outf; | return f; |
| } |
} |
| |
|
| for (i = 0, off = 0ll, ret = -1; ret; i++, off += ret) { |
for (i = 0, off = 0ll, ret = -1; ret; i++, off += ret) { |
|
Line 86 int syncSignature(const char *csInput, const char *csS
|
Line 91 int syncSignature(const char *csInput, const char *csS
|
| // fill chunk |
// fill chunk |
| sync_mksig(i, off, buf, ret, &sc); |
sync_mksig(i, off, buf, ret, &sc); |
| |
|
| if (write(outf, &sc, sizeof sc) == -1) { | if (write(f, &sc, sizeof sc) == -1) { |
| SETERR; |
SETERR; |
| break; |
break; |
| } |
} |
| } |
} |
| |
|
| syncClose(outf); | /* Signatures is READY */ |
| | |
| | // build compressed delta file |
| | if (compress & 2) { |
| | outf = syncOpen(csSig, O_WRONLY); |
| | if (outf == -1) { |
| | ret = outf; |
| | goto end; |
| | } |
| | if (sync_Deflate(f, outf, Z_DEFAULT_COMPRESSION) == -1) { |
| | syncClose(outf); |
| | unlink(csSig); |
| | ret = -1; |
| | goto end; |
| | } |
| | syncClose(outf); |
| | } |
| | end: |
| | syncClose(f); |
| | if (compress & 2) |
| | unlink(szTemp); |
| | |
| syncClose(inf); |
syncClose(inf); |
| return ret; |
return ret; |
| } |
} |
|
Line 102 int syncSignature(const char *csInput, const char *csS
|
Line 128 int syncSignature(const char *csInput, const char *csS
|
| * @csInput = Input original source file name for make delta patch file |
* @csInput = Input original source file name for make delta patch file |
| * @csSig = Input Signature file name |
* @csSig = Input Signature file name |
| * @csDelta = Output Delta patch file name |
* @csDelta = Output Delta patch file name |
| * @compress = Compress output, 0 not compressed | * @compress = 3 everything compress, 2 compressed signatures, 1 compress delta output, 0 not compressed |
| * return: -1 error, 0 ok |
* return: -1 error, 0 ok |
| */ |
*/ |
| int syncDelta(const char *csInput, const char *csSig, const char *csDelta, int compress) |
int syncDelta(const char *csInput, const char *csSig, const char *csDelta, int compress) |
|
Line 120 int syncDelta(const char *csInput, const char *csSig,
|
Line 146 int syncDelta(const char *csInput, const char *csSig,
|
| |
|
| /* load signatures */ |
/* load signatures */ |
| |
|
| sigf = syncOpen(csSig, O_RDONLY); | if (compress & 2) { |
| if (sigf == -1) { | f = syncOpen(csSig, O_RDONLY); |
| return sigf; | if (-1 == f) |
| | return f; |
| | sigf = syncTemp(szTemp, MAXPATHLEN); |
| | if (-1 == sigf) { |
| | syncClose(f); |
| | return sigf; |
| | } |
| | |
| | if (sync_Inflate(f, sigf) == -1) { |
| | syncClose(sigf); |
| | syncClose(f); |
| | unlink(szTemp); |
| | return -1; |
| | } else |
| | syncClose(f); |
| | } else { |
| | sigf = syncOpen(csSig, O_RDONLY); |
| | if (-1 == sigf) |
| | return sigf; |
| } |
} |
| |
|
| if (fstat(sigf, &sb) == -1) { |
if (fstat(sigf, &sb) == -1) { |
| SETERR; |
SETERR; |
| syncClose(sigf); |
syncClose(sigf); |
| |
if (compress & 2) |
| |
unlink(szTemp); |
| return -1; |
return -1; |
| } else { |
} else { |
| if (!sb.st_size) { |
if (!sb.st_size) { |
| syncClose(sigf); |
syncClose(sigf); |
| |
if (compress & 2) |
| |
unlink(szTemp); |
| return 1; |
return 1; |
| } |
} |
| |
|
|
Line 138 int syncDelta(const char *csInput, const char *csSig,
|
Line 187 int syncDelta(const char *csInput, const char *csSig,
|
| if (sb.st_size % sizeof(sync_chunk_t)) { |
if (sb.st_size % sizeof(sync_chunk_t)) { |
| syncSetErr(ENOEXEC, "Error:: signature file is broken!\n"); |
syncSetErr(ENOEXEC, "Error:: signature file is broken!\n"); |
| syncClose(sigf); |
syncClose(sigf); |
| |
if (compress & 2) |
| |
unlink(szTemp); |
| return -1; |
return -1; |
| } |
} |
| } |
} |
|
Line 145 int syncDelta(const char *csInput, const char *csSig,
|
Line 196 int syncDelta(const char *csInput, const char *csSig,
|
| if (MAP_FAILED == chunks) { |
if (MAP_FAILED == chunks) { |
| SETERR; |
SETERR; |
| syncClose(sigf); |
syncClose(sigf); |
| |
if (compress & 2) |
| |
unlink(szTemp); |
| return -1; |
return -1; |
| |
} else { |
| |
syncClose(sigf); |
| |
if (compress & 2) |
| |
unlink(szTemp); |
| } |
} |
| syncClose(sigf); |
|
| |
|
| /* build from signatures sorted index and hashes */ |
/* build from signatures sorted index and hashes */ |
| |
|
|
Line 181 int syncDelta(const char *csInput, const char *csSig,
|
Line 237 int syncDelta(const char *csInput, const char *csSig,
|
| munmap(chunks, sb.st_size); |
munmap(chunks, sb.st_size); |
| return inf; |
return inf; |
| } |
} |
| if (compress) | if (compress & 1) |
| f = syncTemp(szTemp, MAXPATHLEN); |
f = syncTemp(szTemp, MAXPATHLEN); |
| else |
else |
| f = syncOpen(csDelta, O_WRONLY); |
f = syncOpen(csDelta, O_WRONLY); |
|
Line 294 int syncDelta(const char *csInput, const char *csSig,
|
Line 350 int syncDelta(const char *csInput, const char *csSig,
|
| /* Delta patch is READY */ |
/* Delta patch is READY */ |
| |
|
| // build compressed delta file |
// build compressed delta file |
| if (compress) { | if (compress & 1) { |
| outf = syncOpen(csDelta, O_WRONLY); |
outf = syncOpen(csDelta, O_WRONLY); |
| if (outf == -1) { |
if (outf == -1) { |
| ret = outf; |
ret = outf; |
|
Line 311 int syncDelta(const char *csInput, const char *csSig,
|
Line 367 int syncDelta(const char *csInput, const char *csSig,
|
| |
|
| end: |
end: |
| syncClose(f); |
syncClose(f); |
| unlink(szTemp); | if (compress & 1) |
| | unlink(szTemp); |
| |
|
| syncClose(inf); |
syncClose(inf); |
| free(tag_table); |
free(tag_table); |
|
Line 324 end:
|
Line 381 end:
|
| * @csInput = Input target file name for patch |
* @csInput = Input target file name for patch |
| * @csDelta = Input Delta patch file name |
* @csDelta = Input Delta patch file name |
| * @csPatch = After applied patch create new alternate target file, if != NULL |
* @csPatch = After applied patch create new alternate target file, if != NULL |
| * @compress = Compress output, 0 not compressed | * @compress = 1 compress delta input, 0 not compressed |
| * return: -1 error, 0 ok, create delta patch, 1 ok, no differences and not create patch |
* return: -1 error, 0 ok, create delta patch, 1 ok, no differences and not create patch |
| */ |
*/ |
| int syncPatch(const char *csInput, const char *csDelta, const char *csPatch, int compress) |
int syncPatch(const char *csInput, const char *csDelta, const char *csPatch, int compress) |
|
Line 339 int syncPatch(const char *csInput, const char *csDelta
|
Line 396 int syncPatch(const char *csInput, const char *csDelta
|
| off_t off; |
off_t off; |
| sync_chunk_t sc, *suffix; |
sync_chunk_t sc, *suffix; |
| |
|
| if (compress) { | if (compress & 1) { |
| f = syncOpen(csDelta, O_RDONLY); |
f = syncOpen(csDelta, O_RDONLY); |
| if (f == -1) |
if (f == -1) |
| return f; |
return f; |
|
Line 365 int syncPatch(const char *csInput, const char *csDelta
|
Line 422 int syncPatch(const char *csInput, const char *csDelta
|
| if (fstat(d, &sb) == -1) { |
if (fstat(d, &sb) == -1) { |
| SETERR; |
SETERR; |
| syncClose(d); |
syncClose(d); |
| if (compress) | if (compress & 1) |
| unlink(szTemp); |
unlink(szTemp); |
| return -1; |
return -1; |
| } |
} |
|
Line 373 int syncPatch(const char *csInput, const char *csDelta
|
Line 430 int syncPatch(const char *csInput, const char *csDelta
|
| if (MAP_FAILED == delta) { |
if (MAP_FAILED == delta) { |
| SETERR; |
SETERR; |
| syncClose(d); |
syncClose(d); |
| if (compress) | if (compress & 1) |
| unlink(szTemp); |
unlink(szTemp); |
| return -1; |
return -1; |
| } else { |
} else { |
| syncClose(d); |
syncClose(d); |
| if (compress) | if (compress & 1) |
| unlink(szTemp); |
unlink(szTemp); |
| } |
} |
| |
|