]> Dogcows Code - chaz/tar/commitdiff
(sparse_skip_file,pax_dump_header_1)
authorSergey Poznyakoff <gray@gnu.org.ua>
Fri, 19 Jan 2007 15:42:26 +0000 (15:42 +0000)
committerSergey Poznyakoff <gray@gnu.org.ua>
Fri, 19 Jan 2007 15:42:26 +0000 (15:42 +0000)
(pax_decode_header): Keep track of the number of bytes written.

src/sparse.c

index 8d1ff9071ae5a96463b01321325a0b779b547060..93aee99ed63ae49a3301aa2b4ea17fdff512a6cb 100644 (file)
@@ -1,6 +1,6 @@
 /* Functions for dealing with sparse files
 
-   Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
@@ -466,7 +466,7 @@ sparse_skip_file (struct tar_stat_info *st)
   file.fd = -1;
 
   rc = tar_sparse_decode_header (&file);
-  skip_file (file.stat_info->archive_file_size);
+  skip_file (file.stat_info->archive_file_size - file.dumped_size);
   return (tar_sparse_done (&file) && rc) ? dump_status_ok : dump_status_short;
 }
 
@@ -1014,6 +1014,7 @@ pax_dump_header_1 (struct tar_sparse_file *file)
     }
   size = (size + BLOCKSIZE - 1) / BLOCKSIZE;
   file->stat_info->archive_file_size += size * BLOCKSIZE;
+  file->dumped_size += size * BLOCKSIZE;
   
   /* Store sparse file identification */
   xheader_store ("GNU.sparse.major", file->stat_info, NULL);
@@ -1104,7 +1105,8 @@ pax_decode_header (struct tar_sparse_file *file)
        if (src == endp)                                            \
         {                                                         \
           set_next_block_after (b);                               \
-          b = find_next_block ();                                 \
+           file->dumped_size += BLOCKSIZE;                         \
+           b = find_next_block ();                                 \
            src = b->buffer;                                        \
           endp = b->buffer + BLOCKSIZE;                           \
         }                                                         \
@@ -1115,6 +1117,7 @@ pax_decode_header (struct tar_sparse_file *file)
  } while (0)                       
 
       set_next_block_after (current_header);
+      file->dumped_size += BLOCKSIZE;
       blk = find_next_block ();
       p = blk->buffer;
       COPY_BUF (blk,nbuf,p);
This page took 0.033945 seconds and 4 git commands to generate.