diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2005-10-20 04:50:13 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2005-10-20 04:50:13 (GMT) |
commit | b0e32e2b71633211be6a62d1afaa250fb23cd3b4 (patch) | |
tree | 8c15e8edb03fba3a429fff0c5be609e6439bf745 /Lib/tarfile.py | |
parent | 40563eddf17f072a74eba0bf7b77229f77bcc3d3 (diff) | |
download | cpython-b0e32e2b71633211be6a62d1afaa250fb23cd3b4.zip cpython-b0e32e2b71633211be6a62d1afaa250fb23cd3b4.tar.gz cpython-b0e32e2b71633211be6a62d1afaa250fb23cd3b4.tar.bz2 |
Fix SF bug # 1330039, patch # 1331635 from Lars Gustaebel (tarfile maintainer)
Problem: if two files are assigned the same inode
number by the filesystem, the second one will be added
as a hardlink to the first, which means that the
content will be lost.
The patched code checks if the file's st_nlink is
greater 1. So only for files that actually have several
links pointing to them hardlinks will be created, which
is what GNU tar does.
Will backport.
Diffstat (limited to 'Lib/tarfile.py')
-rw-r--r-- | Lib/tarfile.py | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 2f21971..c86248c 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1150,7 +1150,8 @@ class TarFile(object): stmd = statres.st_mode if stat.S_ISREG(stmd): inode = (statres.st_ino, statres.st_dev) - if inode in self.inodes and not self.dereference: + if not self.dereference and \ + statres.st_nlink > 1 and inode in self.inodes: # Is it a hardlink to an already # archived file? type = LNKTYPE |