* gnu/packages/patches/tar-remove-wholesparse-check.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/base.scm (tar)[source]: Add patch.
		
			
				
	
	
		
			68 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| This patch is needed in order to build Guix on a Btrfs file system.
 | |
| 
 | |
| 
 | |
| From da922703282b0d3b8837a99a9c7fdd32f1d20d49 Mon Sep 17 00:00:00 2001
 | |
| From: Mark H Weaver <mhw@netris.org>
 | |
| Date: Tue, 9 Jan 2018 20:16:14 -0500
 | |
| Subject: [PATCH] Remove nonportable check for files containing only zeroes.
 | |
| 
 | |
| This check benefitted only one unlikely case (large files containing
 | |
| only zeroes, on systems that do not support SEEK_HOLE) and was based
 | |
| on an assumption about file system behavior that is not mandated by
 | |
| POSIX and no longer holds in practice, namely that for sufficiently
 | |
| large files, (st_blocks == 0) implies that the file contains only
 | |
| zeroes.  Examples of file systems that violate this assumption include
 | |
| Linux's /proc file system and Btrfs.
 | |
| 
 | |
| * src/sparse.c (sparse_scan_file_wholesparse): Remove this function.
 | |
| (sparse_scan_file_seek): Remove the initial check for files containing
 | |
| only zeroes.
 | |
| ---
 | |
|  src/sparse.c | 24 ------------------------
 | |
|  1 file changed, 24 deletions(-)
 | |
| 
 | |
| diff --git a/src/sparse.c b/src/sparse.c
 | |
| index d41c0ea..3de6560 100644
 | |
| --- a/src/sparse.c
 | |
| +++ b/src/sparse.c
 | |
| @@ -261,26 +261,6 @@ sparse_scan_file_raw (struct tar_sparse_file *file)
 | |
|    return tar_sparse_scan (file, scan_end, NULL);
 | |
|  }
 | |
|  
 | |
| -static bool
 | |
| -sparse_scan_file_wholesparse (struct tar_sparse_file *file)
 | |
| -{
 | |
| -  struct tar_stat_info *st = file->stat_info;
 | |
| -  struct sp_array sp = {0, 0};
 | |
| -
 | |
| -  /* Note that this function is called only for truly sparse files of size >= 1
 | |
| -     block size (checked via ST_IS_SPARSE before).  See the thread
 | |
| -     http://www.mail-archive.com/bug-tar@gnu.org/msg04209.html for more info */
 | |
| -  if (ST_NBLOCKS (st->stat) == 0)
 | |
| -    {
 | |
| -      st->archive_file_size = 0;
 | |
| -      sp.offset = st->stat.st_size;
 | |
| -      sparse_add_map (st, &sp);
 | |
| -      return true;
 | |
| -    }
 | |
| -
 | |
| -  return false;
 | |
| -}
 | |
| -
 | |
|  #ifdef SEEK_HOLE
 | |
|  /* Try to engage SEEK_HOLE/SEEK_DATA feature. */
 | |
|  static bool
 | |
| @@ -343,10 +323,6 @@ sparse_scan_file_seek (struct tar_sparse_file *file)
 | |
|  static bool
 | |
|  sparse_scan_file (struct tar_sparse_file *file)
 | |
|  {
 | |
| -  /* always check for completely sparse files */
 | |
| -  if (sparse_scan_file_wholesparse (file))
 | |
| -    return true;
 | |
| -
 | |
|    switch (hole_detection)
 | |
|      {
 | |
|      case HOLE_DETECTION_DEFAULT:
 | |
| -- 
 | |
| 2.15.1
 | |
| 
 |