X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fbuffer.c;h=dfc8456db73940d993f2eb00801e60942748784e;hb=67b4f3519d838c6f16f5b6b63c0b9b8669fb3dd9;hp=b47b773ee8ea65c151db1fc8293e52ca8e58a433;hpb=c3fa22fc8023ad21ad32b13f934c3324756c9236;p=chaz%2Ftar diff --git a/src/buffer.c b/src/buffer.c index b47b773..dfc8456 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -201,6 +201,7 @@ enum compress_type { ct_compress, ct_gzip, ct_bzip2, + ct_lzip, ct_lzma, ct_lzop, ct_xz @@ -221,6 +222,7 @@ static struct zip_magic const magic[] = { { ct_compress, 2, "\037\235", COMPRESS_PROGRAM, "-Z" }, { ct_gzip, 2, "\037\213", GZIP_PROGRAM, "-z" }, { ct_bzip2, 3, "BZh", BZIP2_PROGRAM, "-j" }, + { ct_lzip, 4, "LZIP", LZIP_PROGRAM, "--lzip" }, { ct_lzma, 6, "\xFFLZMA", LZMA_PROGRAM, "--lzma" }, { ct_lzop, 4, "\211LZO", LZOP_PROGRAM, "--lzop" }, { ct_xz, 6, "\0xFD7zXZ", XZ_PROGRAM, "-J" }, @@ -854,16 +856,16 @@ seek_archive (off_t size) off_t start = current_block_ordinal (); off_t offset; off_t nrec, nblk; - off_t skipped = (blocking_factor - (current_block - record_start)); + off_t skipped = (blocking_factor - (current_block - record_start)) + * BLOCKSIZE; - size -= skipped * BLOCKSIZE; - - if (size < record_size) + if (size <= skipped) return 0; - /* FIXME: flush? */ - + /* Compute number of records to skip */ - nrec = size / record_size; + nrec = (size - skipped) / record_size; + if (nrec == 0) + return 0; offset = rmtlseek (archive, nrec * record_size, SEEK_CUR); if (offset < 0) return offset; @@ -1372,7 +1374,7 @@ static bool check_label_pattern (const char *label) { char *string; - bool result; + bool result = false; if (fnmatch (volume_label_option, label, 0) == 0) return true; @@ -1839,6 +1841,7 @@ open_archive (enum access_mode wanted_access) switch (wanted_access) { case ACCESS_READ: + case ACCESS_UPDATE: if (volume_label_option) match_volume_label (); break; @@ -1848,9 +1851,6 @@ open_archive (enum access_mode wanted_access) if (volume_label_option) write_volume_label (); break; - - default: - break; } set_volume_start_time (); }