diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2011-03-17 01:26:40 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2011-03-17 01:26:40 (GMT) |
commit | b3c728fd8924f271c708ea8ae6692ae5cb484a34 (patch) | |
tree | 43510de40448eaa4a21bba4d455368ebaefbb2b4 /Lib/binhex.py | |
parent | 4e4326829f2997624261628081110bb87c090711 (diff) | |
download | cpython-b3c728fd8924f271c708ea8ae6692ae5cb484a34.zip cpython-b3c728fd8924f271c708ea8ae6692ae5cb484a34.tar.gz cpython-b3c728fd8924f271c708ea8ae6692ae5cb484a34.tar.bz2 |
Close #11577: Improve binhex test coverage and fix ResourceWarning
Diffstat (limited to 'Lib/binhex.py')
-rw-r--r-- | Lib/binhex.py | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/Lib/binhex.py b/Lib/binhex.py index 4b7997a..999a675 100644 --- a/Lib/binhex.py +++ b/Lib/binhex.py @@ -52,14 +52,13 @@ class FInfo: def getfileinfo(name): finfo = FInfo() - fp = io.open(name, 'rb') - # Quick check for textfile - data = fp.read(512) - if 0 not in data: - finfo.Type = 'TEXT' - fp.seek(0, 2) - dsize = fp.tell() - fp.close() + with io.open(name, 'rb') as fp: + # Quick check for textfile + data = fp.read(512) + if 0 not in data: + finfo.Type = 'TEXT' + fp.seek(0, 2) + dsize = fp.tell() dir, file = os.path.split(name) file = file.replace(':', '-', 1) return file, finfo, dsize, 0 @@ -140,19 +139,26 @@ class _Rlecoderengine: class BinHex: def __init__(self, name_finfo_dlen_rlen, ofp): name, finfo, dlen, rlen = name_finfo_dlen_rlen + close_on_error = False if isinstance(ofp, str): ofname = ofp ofp = io.open(ofname, 'wb') - ofp.write(b'(This file must be converted with BinHex 4.0)\r\r:') - hqxer = _Hqxcoderengine(ofp) - self.ofp = _Rlecoderengine(hqxer) - self.crc = 0 - if finfo is None: - finfo = FInfo() - self.dlen = dlen - self.rlen = rlen - self._writeinfo(name, finfo) - self.state = _DID_HEADER + close_on_error = True + try: + ofp.write(b'(This file must be converted with BinHex 4.0)\r\r:') + hqxer = _Hqxcoderengine(ofp) + self.ofp = _Rlecoderengine(hqxer) + self.crc = 0 + if finfo is None: + finfo = FInfo() + self.dlen = dlen + self.rlen = rlen + self._writeinfo(name, finfo) + self.state = _DID_HEADER + except: + if close_on_error: + ofp.close() + raise def _writeinfo(self, name, finfo): nl = len(name) |