/[tar]/tar/src/delete.c
ViewVC logotype

Diff of /tar/src/delete.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.14 by eggert, Wed Sep 3 06:14:37 2003 UTC revision 1.15 by gray, Thu Sep 4 13:58:42 2003 UTC
# Line 132  write_recent_blocks (union block *h, siz Line 132  write_recent_blocks (union block *h, siz
132      }      }
133  }  }
134    
135    static void
136    write_recent_bytes (char *data, size_t bytes)
137    {
138      size_t blocks = bytes / BLOCKSIZE;
139      size_t rest = bytes - blocks * BLOCKSIZE;
140    
141      write_recent_blocks ((union block *)data, blocks);
142      memcpy (new_record[new_blocks].buffer, data + blocks * BLOCKSIZE, rest);
143      if (rest < BLOCKSIZE)
144        memset (new_record[new_blocks].buffer + rest, 0, BLOCKSIZE - rest);
145      new_blocks++;
146      if (new_blocks == blocking_factor)
147        write_record (1);
148    }
149    
150  void  void
151  delete_archive_members (void)  delete_archive_members (void)
152  {  {
# Line 240  delete_archive_members (void) Line 255  delete_archive_members (void)
255            if (current_block == record_end)            if (current_block == record_end)
256              flush_archive ();              flush_archive ();
257            status = read_header (false);            status = read_header (false);
258              
259              if (extended_header.size)
260                xheader_decode (&current_stat_info);
261              
262            if (status == HEADER_ZERO_BLOCK && ignore_zeros_option)            if (status == HEADER_ZERO_BLOCK && ignore_zeros_option)
263              {              {
264                set_next_block_after (current_header);                set_next_block_after (current_header);
# Line 280  delete_archive_members (void) Line 298  delete_archive_members (void)
298    
299            /* Copy header.  */            /* Copy header.  */
300    
301            write_recent_blocks (recent_long_name, recent_long_name_blocks);            if (extended_header.size)
302            write_recent_blocks (recent_long_link, recent_long_link_blocks);              {
303                  write_recent_bytes (extended_header.buffer,
304                                      extended_header.size);
305                }
306              else
307                {
308                  write_recent_blocks (recent_long_name, recent_long_name_blocks);
309                  write_recent_blocks (recent_long_link, recent_long_link_blocks);
310                }
311            new_record[new_blocks] = *current_header;            new_record[new_blocks] = *current_header;
312            new_blocks++;            new_blocks++;
313            blocks_to_keep            blocks_to_keep

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26