class: FileStream
authorStefan Vogel <sv@exept.de>
Mon, 29 Jul 2013 10:11:37 +0200
changeset 15573 36facee1072e
parent 15572 72b82922f0f2
child 15574 c215d2b5683a
class: FileStream changed: #newTemporaryIn:nameTemplate: Fix (do not loop forever) tempfile creation if directory is not writable.
FileStream.st
--- a/FileStream.st	Mon Jul 29 10:09:49 2013 +0200
+++ b/FileStream.st	Mon Jul 29 10:11:37 2013 +0200
@@ -445,48 +445,48 @@
     |nameString random prevRandom prevNameString newTempFilename stream|
 
     [
-	prevRandom := random.
-	prevNameString := nameString.
+        prevRandom := random.
+        prevNameString := nameString.
 
-	"Use random numbers in order to improve the security
-	 by making the generated names less predictable"
-	[
-	    random := RandomGenerator new nextInteger.
-	] doWhile:[random = prevRandom].
+        "Use random numbers in order to improve the security
+         by making the generated names less predictable"
+        [
+            random := RandomGenerator new nextInteger.
+        ] doWhile:[random = prevRandom].
 
-	nameString := template bindWith:(OperatingSystem getProcessId) with:random.
+        nameString := template bindWith:(OperatingSystem getProcessId) with:random.
 
-	aDirectoryOrNil isNil ifTrue:[
-	    newTempFilename := nameString.
-	] ifFalse:[
-	    newTempFilename := aDirectoryOrNil asFilename constructString:nameString.
-	].
+        aDirectoryOrNil isNil ifTrue:[
+            newTempFilename := nameString.
+        ] ifFalse:[
+            newTempFilename := aDirectoryOrNil asFilename constructString:nameString.
+        ].
 
-	[
-	    stream := self open:newTempFilename withMode:#(CREATE_NEW GENERIC_READ_WRITE).
-	] on:OpenError do:[:ex|
-	    (OperatingSystem errorHolderForNumber:ex errorCode) errorCategory ~~ #existingReferentSignal ifFalse:[
-		"some fundamental error, raise exception"
-		ex reject.
-	    ].
-	    prevNameString = nameString ifTrue:[
-		"no more names - probably a bad template"
-		ex reject.
-	    ].
-	    "file exists, retry another one"
-	].
+        [
+            stream := self open:newTempFilename withMode:#(CREATE_NEW GENERIC_READ_WRITE).
+        ] on:OpenError do:[:ex|
+           ex errorCategory ~~ #existingReferentSignal ifTrue:[
+                "some fundamental error, raise exception"
+                ex reject.
+            ].
+            prevNameString = nameString ifTrue:[
+                "no more names - probably a bad template"
+                ex reject.
+            ].
+            "file exists, retry another one"
+        ].
     ] doWhile:[
-	stream isNil and:[prevNameString ~= nameString]   "/ if namestring didn't change, the template is bad
+        stream isNil and:[prevNameString ~= nameString]   "/ if namestring didn't change, the template is bad
     ].
     ^ stream
 
     "temp files in '/tmp':
 
-	FileStream newTemporaryIn:'/tmp' asFilename nameTemplate:'foo%1_%2'
+        FileStream newTemporaryIn:'/tmp' asFilename nameTemplate:'foo%1_%2'
 
      This must fail on the second try:
-	FileStream newTemporaryIn:'/tmp' asFilename nameTemplate:'foo'
-	FileStream newTemporaryIn:'c:\temp' asFilename nameTemplate:'foo'
+        FileStream newTemporaryIn:'/tmp' asFilename nameTemplate:'foo'
+        FileStream newTemporaryIn:'c:\temp' asFilename nameTemplate:'foo'
     "
 
     "temp files somewhere
@@ -1998,11 +1998,11 @@
 !FileStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.167 2013-07-24 19:56:49 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.168 2013-07-29 08:11:37 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.167 2013-07-24 19:56:49 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.168 2013-07-29 08:11:37 stefan Exp $'
 ! !