Patch #1168594: set sizes of non-regular files to zero. Fixes #1167128.

Will backport to 2.4.
This commit is contained in:
Martin v. Löwis 2005-08-27 10:07:56 +00:00
parent 9e34c04732
commit 5dbdc59577
3 changed files with 49 additions and 14 deletions

View file

@ -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.