|  | @@ -452,7 +452,7 @@ write_gnu_long_link (struct tar_stat_info *st, const char *p, char type)
 | 
	
		
			
				|  |  |    finish_header (st, header, -1);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    header = find_next_block ();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  |    bufsize = available_space_after (header);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    while (bufsize < size)
 | 
	
	
		
			
				|  | @@ -576,8 +576,8 @@ write_long_name (struct tar_stat_info *st)
 | 
	
		
			
				|  |  |    return write_short_name (st);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static union block *
 | 
	
		
			
				|  |  | -write_extended (struct tar_stat_info *st, union block *old_header)
 | 
	
		
			
				|  |  | +union block *
 | 
	
		
			
				|  |  | +write_extended (char type, struct tar_stat_info *st, union block *old_header)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    union block *header, hp;
 | 
	
		
			
				|  |  |    char *p;
 | 
	
	
		
			
				|  | @@ -588,7 +588,7 @@ write_extended (struct tar_stat_info *st, union block *old_header)
 | 
	
		
			
				|  |  |    xheader_finish (&extended_header);
 | 
	
		
			
				|  |  |    memcpy (hp.buffer, old_header, sizeof (hp));
 | 
	
		
			
				|  |  |    p = xheader_xhdr_name (st);
 | 
	
		
			
				|  |  | -  xheader_write (XHDTYPE, p, &extended_header);
 | 
	
		
			
				|  |  | +  xheader_write (type, p, &extended_header);
 | 
	
		
			
				|  |  |    free (p);
 | 
	
		
			
				|  |  |    header = find_next_block ();
 | 
	
		
			
				|  |  |    memcpy (header, &hp.buffer, sizeof (hp.buffer));
 | 
	
	
		
			
				|  | @@ -852,7 +852,7 @@ finish_header (struct tar_stat_info *st,
 | 
	
		
			
				|  |  |        print_header (st, block_ordinal);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  header = write_extended (st, header);
 | 
	
		
			
				|  |  | +  header = write_extended (XHDTYPE, st, header);
 | 
	
		
			
				|  |  |    simple_finish_header (header);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -863,7 +863,7 @@ pad_archive (off_t size_left)
 | 
	
		
			
				|  |  |    union block *blk;
 | 
	
		
			
				|  |  |    while (size_left > 0)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -      save_sizeleft = size_left;
 | 
	
		
			
				|  |  | +      mv_size_left (size_left);
 | 
	
		
			
				|  |  |        blk = find_next_block ();
 | 
	
		
			
				|  |  |        memset (blk->buffer, 0, BLOCKSIZE);
 | 
	
		
			
				|  |  |        set_next_block_after (blk);
 | 
	
	
		
			
				|  | @@ -889,16 +889,13 @@ dump_regular_file (int fd, struct tar_stat_info *st)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    finish_header (st, blk, block_ordinal);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  mv_begin (st);
 | 
	
		
			
				|  |  |    while (size_left > 0)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |        size_t bufsize, count;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      if (multi_volume_option)
 | 
	
		
			
				|  |  | -	{
 | 
	
		
			
				|  |  | -	  assign_string (&save_name, st->orig_file_name);
 | 
	
		
			
				|  |  | -	  save_sizeleft = size_left;
 | 
	
		
			
				|  |  | -	  save_totsize = st->stat.st_size;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +      mv_size_left (size_left);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |        blk = find_next_block ();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        bufsize = available_space_after (blk);
 | 
	
	
		
			
				|  | @@ -1054,7 +1051,7 @@ dump_dir0 (char *directory,
 | 
	
		
			
				|  |  |  	      const char *buffer, *p_buffer;
 | 
	
		
			
				|  |  |  	      
 | 
	
		
			
				|  |  |  	      block_ordinal = current_block_ordinal ();
 | 
	
		
			
				|  |  | -	      buffer = gnu_list_name->dir_contents; /* FOO */
 | 
	
		
			
				|  |  | +	      buffer = gnu_list_name->dir_contents; 
 | 
	
		
			
				|  |  |  	      if (buffer)
 | 
	
		
			
				|  |  |  		totsize = dumpdir_size (buffer);
 | 
	
		
			
				|  |  |  	      else
 | 
	
	
		
			
				|  | @@ -1063,14 +1060,12 @@ dump_dir0 (char *directory,
 | 
	
		
			
				|  |  |  	      finish_header (st, blk, block_ordinal);
 | 
	
		
			
				|  |  |  	      p_buffer = buffer;
 | 
	
		
			
				|  |  |  	      size_left = totsize;
 | 
	
		
			
				|  |  | +	      
 | 
	
		
			
				|  |  | +	      mv_begin (st);
 | 
	
		
			
				|  |  | +	      mv_total_size (totsize);
 | 
	
		
			
				|  |  |  	      while (size_left > 0)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  | -		  if (multi_volume_option)
 | 
	
		
			
				|  |  | -		    {
 | 
	
		
			
				|  |  | -		      assign_string (&save_name, st->orig_file_name);
 | 
	
		
			
				|  |  | -		      save_sizeleft = size_left;
 | 
	
		
			
				|  |  | -		      save_totsize = totsize;
 | 
	
		
			
				|  |  | -		    }
 | 
	
		
			
				|  |  | +		  mv_size_left (size_left);
 | 
	
		
			
				|  |  |  		  blk = find_next_block ();
 | 
	
		
			
				|  |  |  		  bufsize = available_space_after (blk);
 | 
	
		
			
				|  |  |  		  if (size_left < bufsize)
 | 
	
	
		
			
				|  | @@ -1085,8 +1080,7 @@ dump_dir0 (char *directory,
 | 
	
		
			
				|  |  |  		  p_buffer += bufsize;
 | 
	
		
			
				|  |  |  		  set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -	      if (multi_volume_option)
 | 
	
		
			
				|  |  | -		assign_string (&save_name, 0);
 | 
	
		
			
				|  |  | +	      mv_end ();
 | 
	
		
			
				|  |  |  	    }
 | 
	
		
			
				|  |  |  	  return;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -1504,14 +1498,12 @@ dump_file0 (struct tar_stat_info *st, char *p,
 | 
	
		
			
				|  |  |  	  switch (status)
 | 
	
		
			
				|  |  |  	    {
 | 
	
		
			
				|  |  |  	    case dump_status_ok:
 | 
	
		
			
				|  |  | -	      if (multi_volume_option)
 | 
	
		
			
				|  |  | -		assign_string (&save_name, 0);
 | 
	
		
			
				|  |  | +	      mv_end ();
 | 
	
		
			
				|  |  |  	      dump_regular_finish (fd, st, original_ctime);
 | 
	
		
			
				|  |  |  	      break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	    case dump_status_short:
 | 
	
		
			
				|  |  | -	      if (multi_volume_option)
 | 
	
		
			
				|  |  | -		assign_string (&save_name, 0);
 | 
	
		
			
				|  |  | +	      mv_end ();
 | 
	
		
			
				|  |  |  	      close (fd);
 | 
	
		
			
				|  |  |  	      break;
 | 
	
		
			
				|  |  |  
 |