Merged revisions 85975 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r85975 | antoine.pitrou | 2010-10-30 15:03:56 +0200 (sam., 30 oct. 2010) | 4 lines

  Issue #10246: uu.encode didn't close file objects explicitly when filenames
  were given to it.  Patch by Brian Brazil.
........
This commit is contained in:
Antoine Pitrou 2010-10-31 13:07:00 +00:00
parent 735e3b195a
commit e305425b86
2 changed files with 41 additions and 31 deletions

View File

@ -44,40 +44,47 @@ def encode(in_file, out_file, name=None, mode=None):
# #
# If in_file is a pathname open it and change defaults # If in_file is a pathname open it and change defaults
# #
if in_file == '-': opened_files = []
in_file = sys.stdin.buffer try:
elif isinstance(in_file, str): if in_file == '-':
in_file = sys.stdin.buffer
elif isinstance(in_file, str):
if name is None:
name = os.path.basename(in_file)
if mode is None:
try:
mode = os.stat(in_file).st_mode
except AttributeError:
pass
in_file = open(in_file, 'rb')
opened_files.append(in_file)
#
# Open out_file if it is a pathname
#
if out_file == '-':
out_file = sys.stdout.buffer
elif isinstance(out_file, str):
out_file = open(out_file, 'wb')
opened_files.append(out_file)
#
# Set defaults for name and mode
#
if name is None: if name is None:
name = os.path.basename(in_file) name = '-'
if mode is None: if mode is None:
try: mode = 0o666
mode = os.stat(in_file).st_mode #
except AttributeError: # Write the data
pass #
in_file = open(in_file, 'rb') out_file.write(('begin %o %s\n' % ((mode & 0o777), name)).encode("ascii"))
#
# Open out_file if it is a pathname
#
if out_file == '-':
out_file = sys.stdout.buffer
elif isinstance(out_file, str):
out_file = open(out_file, 'wb')
#
# Set defaults for name and mode
#
if name is None:
name = '-'
if mode is None:
mode = 0o666
#
# Write the data
#
out_file.write(('begin %o %s\n' % ((mode & 0o777), name)).encode("ascii"))
data = in_file.read(45)
while len(data) > 0:
out_file.write(binascii.b2a_uu(data))
data = in_file.read(45) data = in_file.read(45)
out_file.write(b' \nend\n') while len(data) > 0:
out_file.write(binascii.b2a_uu(data))
data = in_file.read(45)
out_file.write(b' \nend\n')
finally:
for f in opened_files:
f.close()
def decode(in_file, out_file=None, mode=None, quiet=False): def decode(in_file, out_file=None, mode=None, quiet=False):

View File

@ -143,6 +143,9 @@ C-API
Library Library
------- -------
- Issue #10246: uu.encode didn't close file objects explicitly when filenames
were given to it. Patch by Brian Brazil.
- Issue #10253: FileIO leaks a file descriptor when trying to open a file - Issue #10253: FileIO leaks a file descriptor when trying to open a file
for append that isn't seekable. Patch by Brian Brazil. for append that isn't seekable. Patch by Brian Brazil.