]> Dogcows Code - chaz/tar/blobdiff - src/buffer.c
Add Lzip support
[chaz/tar] / src / buffer.c
index b47b773ee8ea65c151db1fc8293e52ca8e58a433..8147def1961246dfdef3f3704432416431c6f932 100644 (file)
@@ -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;
This page took 0.022191 seconds and 4 git commands to generate.