NonPositionableExternalStream.st
branchjv
changeset 21252 1b7c2d5523d5
parent 21249 86c01ee5a76e
parent 21230 9b7a6559527b
child 21285 7770135c2b54
equal deleted inserted replaced
21251:32f12bea6608 21252:1b7c2d5523d5
   143             errorCode:errorNumber;
   143             errorCode:errorNumber;
   144             osErrorHolder:errorHolder;
   144             osErrorHolder:errorHolder;
   145             raise.
   145             raise.
   146     ].
   146     ].
   147 
   147 
   148     rs := self forFileDescriptor:(pipe at:1) mode:#readWrite buffered:false handleType:#pipeFilePointer.
   148     rs := NonPositionableExternalStream forFileDescriptor:(pipe at:1) mode:#readWrite buffered:false handleType:#pipeFilePointer.
   149     ws := self forFileDescriptor:(pipe at:2) mode:#readWrite buffered:false handleType:#pipeFilePointer.
   149     ws := NonPositionableExternalStream forFileDescriptor:(pipe at:2) mode:#readWrite buffered:false handleType:#pipeFilePointer.
   150     ^ Array with:rs with:ws
   150     ^ Array with:rs with:ws
   151 
   151 
   152     "
   152     "
   153      |pipe rs ws|
   153      |pipe rs ws|
   154 
   154 
   185 
   185 
   186     |ptyPair master slave|
   186     |ptyPair master slave|
   187 
   187 
   188     ptyPair := OperatingSystem makePTYPair.
   188     ptyPair := OperatingSystem makePTYPair.
   189     ptyPair notNil ifTrue:[
   189     ptyPair notNil ifTrue:[
   190 	master := self forReadWriteToFileDescriptor:(ptyPair at:1).
   190         master := NonPositionableExternalStream forReadWriteToFileDescriptor:(ptyPair at:1).
   191 	master buffered:false.
   191         master buffered:false.
   192 	slave := self forReadWriteToFileDescriptor:(ptyPair at:2).
   192         slave := NonPositionableExternalStream forReadWriteToFileDescriptor:(ptyPair at:2).
   193 	slave buffered:false.
   193         slave buffered:false.
   194 	ptyPair at:1 put:master.
   194         ptyPair at:1 put:master.
   195 	ptyPair at:2 put:slave.
   195         ptyPair at:2 put:slave.
   196 	^ ptyPair
   196         ^ ptyPair
   197     ].
   197     ].
   198     ^ nil
   198     ^ nil
   199 
   199 
   200     "
   200     "
   201      ExternalStream makePTYPair.
   201      ExternalStream makePTYPair.
   208     "return an array with two streams - the first one for reading,
   208     "return an array with two streams - the first one for reading,
   209      the second for writing.
   209      the second for writing.
   210      This is the higher level equivalent of OperatingSystem>>makePipe
   210      This is the higher level equivalent of OperatingSystem>>makePipe
   211      (which returns an array of file-descriptors)."
   211      (which returns an array of file-descriptors)."
   212 
   212 
   213     |pipe rs ws|
   213     |pipeArray rs ws|
   214 
   214 
   215     pipe := OperatingSystem makePipe.
   215     pipeArray := OperatingSystem makePipe.
   216     pipe isNil ifTrue:[
   216     pipeArray isNil ifTrue:[
   217         "/ ok, maybe someone has forgotten to close a stream; enforce finalization and try again
   217         "/ ok, maybe someone has forgotten to close a stream; enforce finalization and try again
   218         'makePipe: enforcing finalization to close any open streams' infoPrintCR.
   218         'makePipe: enforcing finalization to close any open streams' infoPrintCR.
   219         ObjectMemory garbageCollect; finalize.
   219         ObjectMemory garbageCollect; finalize.
   220         pipe := OperatingSystem makePipe.
   220         pipeArray := OperatingSystem makePipe.
   221     ].
   221     ].
   222 
   222 
   223     pipe isNil ifTrue:[
   223     pipeArray isNil ifTrue:[
   224         |errorNumber errorHolder|
   224         |errorNumber errorHolder|
   225 
   225 
   226         errorNumber := OperatingSystem lastErrorNumber.
   226         errorNumber := OperatingSystem lastErrorNumber.
   227         errorHolder := errorNumber.
   227         errorHolder := errorNumber.
   228         OpenError newException
   228         OpenError newException
   229             errorCode:errorNumber;
   229             errorCode:errorNumber;
   230             osErrorHolder:errorHolder;
   230             osErrorHolder:errorHolder;
   231             raise.
   231             raise.
   232     ].
   232     ].
   233 
   233 
   234     rs := self forFileDescriptor:(pipe at:1) mode:#readonly buffered:false handleType:#pipeFilePointer.
   234     rs := NonPositionableExternalStream forFileDescriptor:(pipeArray at:1) mode:#readonly buffered:false handleType:#pipeFilePointer.
   235     ws := self forFileDescriptor:(pipe at:2) mode:#writeonly buffered:false handleType:#pipeFilePointer.
   235     ws := NonPositionableExternalStream forFileDescriptor:(pipeArray at:2) mode:#writeonly buffered:false handleType:#pipeFilePointer.
   236     ^ Array with:rs with:ws
   236     ^ Array with:rs with:ws
   237 
   237 
   238     "
   238     "
   239      |pipe rs ws|
   239      |pipe rs ws|
   240 
   240