diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2005-08-27 10:07:56 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2005-08-27 10:07:56 (GMT) |
commit | 5dbdc59577e0eff59d0ec7a58f0510ef6f4f2051 (patch) | |
tree | f51af9a38db96196bd3059030bf9125aa2533bdd /Lib/tarfile.py | |
parent | 9e34c047325651853a95f95e538582a4f6d5b7f6 (diff) | |
download | cpython-5dbdc59577e0eff59d0ec7a58f0510ef6f4f2051.zip cpython-5dbdc59577e0eff59d0ec7a58f0510ef6f4f2051.tar.gz cpython-5dbdc59577e0eff59d0ec7a58f0510ef6f4f2051.tar.bz2 |
Patch #1168594: set sizes of non-regular files to zero. Fixes #1167128.
Will backport to 2.4.
Diffstat (limited to 'Lib/tarfile.py')
-rw-r--r-- | Lib/tarfile.py | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py index e4c5863..60259bc 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1179,17 +1179,16 @@ class TarFile(object): # Fill the TarInfo object with all # information we can get. - tarinfo.name = arcname - tarinfo.mode = stmd - tarinfo.uid = statres.st_uid - tarinfo.gid = statres.st_gid - if stat.S_ISDIR(stmd): - # For a directory, the size must be 0 - tarinfo.size = 0 - else: + tarinfo.name = arcname + tarinfo.mode = stmd + tarinfo.uid = statres.st_uid + tarinfo.gid = statres.st_gid + if stat.S_ISREG(stmd): tarinfo.size = statres.st_size + else: + tarinfo.size = 0L tarinfo.mtime = statres.st_mtime - tarinfo.type = type + tarinfo.type = type tarinfo.linkname = linkname if pwd: try: @@ -1280,16 +1279,15 @@ class TarFile(object): self.addfile(tarinfo, f) f.close() - if tarinfo.type in (LNKTYPE, SYMTYPE, FIFOTYPE, CHRTYPE, BLKTYPE): - tarinfo.size = 0L - self.addfile(tarinfo) - - if tarinfo.isdir(): + elif tarinfo.isdir(): self.addfile(tarinfo) if recursive: for f in os.listdir(name): self.add(os.path.join(name, f), os.path.join(arcname, f)) + else: + self.addfile(tarinfo) + def addfile(self, tarinfo, fileobj=None): """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is given, tarinfo.size bytes are read from it and added to the archive. |