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 |