@@ -32,7 +32,8 @@ class Error(Exception):
3232 pass
3333
3434# States (what have we written)
35- [_DID_HEADER , _DID_DATA , _DID_RSRC ] = range (3 )
35+ _DID_HEADER = 0
36+ _DID_DATA = 1
3637
3738# Various constants
3839REASONABLY_LARGE = 32768 # Minimal amount we pass the rle-coder
@@ -235,17 +236,22 @@ def write_rsrc(self, data):
235236 self ._write (data )
236237
237238 def close (self ):
238- if self .state < _DID_DATA :
239- self .close_data ()
240- if self .state != _DID_DATA :
241- raise Error , 'Close at the wrong time'
242- if self .rlen != 0 :
243- raise Error , \
244- "Incorrect resource-datasize, diff=%r" % (self .rlen ,)
245- self ._writecrc ()
246- self .ofp .close ()
247- self .state = None
248- del self .ofp
239+ if self .state is None :
240+ return
241+ try :
242+ if self .state < _DID_DATA :
243+ self .close_data ()
244+ if self .state != _DID_DATA :
245+ raise Error , 'Close at the wrong time'
246+ if self .rlen != 0 :
247+ raise Error , \
248+ "Incorrect resource-datasize, diff=%r" % (self .rlen ,)
249+ self ._writecrc ()
250+ finally :
251+ self .state = None
252+ ofp = self .ofp
253+ del self .ofp
254+ ofp .close ()
249255
250256def binhex (inp , out ):
251257 """(infilename, outfilename) - Create binhex-encoded copy of a file"""
@@ -463,11 +469,15 @@ def read_rsrc(self, *n):
463469 return self ._read (n )
464470
465471 def close (self ):
466- if self .rlen :
467- dummy = self .read_rsrc (self .rlen )
468- self ._checkcrc ()
469- self .state = _DID_RSRC
470- self .ifp .close ()
472+ if self .state is None :
473+ return
474+ try :
475+ if self .rlen :
476+ dummy = self .read_rsrc (self .rlen )
477+ self ._checkcrc ()
478+ finally :
479+ self .state = None
480+ self .ifp .close ()
471481
472482def hexbin (inp , out ):
473483 """(infilename, outfilename) - Decode binhexed file"""
0 commit comments