浏览代码

Revert "Fix savannah bug #63567"

Commit e89c7a45eb broke deletion from archives. The reported number
of bytes read is rounded to the nearest record anyway, revert the
commit and document the fact.

Reported by Ed Santiago. See
https://bugzilla.redhat.com/show_bug.cgi?id=2230127

* doc/tar.texi: Document the fact that --totals rounds up the
number of bytes reads to the nearest record.
* src/buffer.c: Revert changes.
* tests/delete06.at: Fix expected status code and stderr.
Sergey Poznyakoff 1 年之前
父节点
当前提交
d437ecf75d
共有 3 个文件被更改,包括 11 次插入4 次删除
  1. 5 0
      doc/tar.texi
  2. 1 2
      src/buffer.c
  3. 5 2
      tests/delete06.at

+ 5 - 0
doc/tar.texi

@@ -4215,6 +4215,11 @@ Total bytes read: 7924664320 (7.4GiB, 95MiB/s)
 @end group
 @end group
 @end smallexample
 @end smallexample
 
 
+Notice, that since @command{tar} operates on @dfn{records}, the number
+of bytes reported can be rounded up to the nearest full record.  This
+can happen, in particular, when the last record in the archive is
+partial.  @xref{Blocking}.
+
 Finally, when deleting from an archive, the @option{--totals} option
 Finally, when deleting from an archive, the @option{--totals} option
 displays both numbers plus number of bytes removed from the archive:
 displays both numbers plus number of bytes removed from the archive:
 
 

+ 1 - 2
src/buffer.c

@@ -987,8 +987,7 @@ short_read (size_t status)
     }
     }
 
 
   record_end = record_start + (record_size - left) / BLOCKSIZE;
   record_end = record_start + (record_size - left) / BLOCKSIZE;
-  if (left == 0)
-    records_read++;
+  records_read++;
 }
 }
 
 
 /*  Flush the current buffer to/from the archive.  */
 /*  Flush the current buffer to/from the archive.  */

+ 5 - 2
tests/delete06.at

@@ -36,7 +36,10 @@ esac
 dd if=archive.tar of=trunc.tar bs=$size count=1 2>/dev/null
 dd if=archive.tar of=trunc.tar bs=$size count=1 2>/dev/null
 tar --delete 'b/' -f trunc.tar
 tar --delete 'b/' -f trunc.tar
 ],
 ],
-[0],
-[],[],[],[],[gnu, pax])
+[2],
+[],
+[tar: lseek: trunc.tar: Value too large for defined data type
+tar: Exiting with failure status due to previous errors
+],[],[],[gnu, pax])
 
 
 AT_CLEANUP
 AT_CLEANUP