Share and close /dev/null filediscriptors.
authorStefan Vogel <sv@exept.de>
Wed, 10 Jul 2002 13:46:34 +0200
changeset 6617 e582d421c0b7
parent 6616 70d54ffebc91
child 6618 a5720cd8006e
Share and close /dev/null filediscriptors.
UnixOperatingSystem.st
--- a/UnixOperatingSystem.st	Wed Jul 10 13:11:43 2002 +0200
+++ b/UnixOperatingSystem.st	Wed Jul 10 13:46:34 2002 +0200
@@ -3830,36 +3830,38 @@
      Use #monitorPid:action: for synchronization and exec status return,
      or #killProcess: to stop it."
 
-    |in out err shellAndArgs rslt|
+    |nullStream in out err shellAndArgs rslt|
 
     aCommandString isNil ifTrue:[^ nil].
 
     (in := anExternalInStream) isNil ifTrue:[
-	in := '/dev/null' asFilename readStream
+        nullStream := Filename nullDevice readWriteStream.
+        in := nullStream. 
     ].
     (out := anExternalOutStream) isNil ifTrue:[
-	out := '/dev/null' asFilename writeStream
+        nullStream isNil ifTrue:[nullStream := Filename nullDevice writeStream].
+        out := nullStream.
     ].
     (err := anExternalErrStream) isNil ifTrue:[
-	anExternalOutStream isNil ifTrue:[
-	    err := out
-	] ifFalse:[
-	    err := '/dev/null' asFilename writeStream
-	]
+        err := out
     ].
 
     shellAndArgs := self commandAndArgsForOSCommand:aCommandString.
 
     rslt := self
-	exec:(shellAndArgs at:1)
-	withArguments:(shellAndArgs at:2)
-	fileDescriptors:(Array with:in fileDescriptor
-			       with:out fileDescriptor
-			       with:err fileDescriptor)
-	closeDescriptors:nil
-	fork:true
-	newPgrp:true "/ false
-	inDirectory:dir.
+        exec:(shellAndArgs at:1)
+        withArguments:(shellAndArgs at:2)
+        fileDescriptors:(Array with:in fileDescriptor
+                               with:out fileDescriptor
+                               with:err fileDescriptor)
+        closeDescriptors:nil
+        fork:true
+        newPgrp:true "/ false
+        inDirectory:dir.
+
+    nullStream notNil ifTrue:[
+        nullStream close.
+    ].
 
     ^ rslt
 
@@ -3882,7 +3884,7 @@
      The following will no longer work. monitorPid has disappeared 
 
      pid notNil ifTrue:[
-	 Processor monitorPid:pid action:[:OSstatus | sema signal ].
+         Processor monitorPid:pid action:[:OSstatus | sema signal ].
      ].
      in close.
      out close.
@@ -10441,7 +10443,7 @@
 !UnixOperatingSystem::FilePointerHandle class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.123 2002-06-17 13:15:14 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.124 2002-07-10 11:46:34 stefan Exp $'
 ! !
 
 !UnixOperatingSystem::FilePointerHandle methodsFor:'release'!
@@ -12061,6 +12063,6 @@
 !UnixOperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.123 2002-06-17 13:15:14 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.124 2002-07-10 11:46:34 stefan Exp $'
 ! !
 UnixOperatingSystem initialize!