Hi Holger, OK, I made a new VM with your PR after I reviewed it. Good news? It works!!! If you want to check OSSubprocess, I am using now the primCreatePipe from OSProcess because that would answer me directly the SQFiles of the pipe. Originally (before ending up doing that), I was trying to make the pipes myself via FFI ( pipe() ) but I came to the problem we discussed earlier (remember the #name:attachTo:writable:). So now I can go back to my original solution. The code is in # *makePipeWithReadBlocking*: and now it looks like this: | pipePointer returnValue fileDescriptors pipe fileIDsArray fileDescriptor1 fileDescriptor2 | pipePointer := ExternalAddress allocate: 8. [ returnValue := self primitivePipe: pipePointer. (returnValue = -1) ifTrue: [ self perror: 'pipe()' ]. fileIDsArray := Array new: 2. fileDescriptor1 := pipePointer nbUInt32AtOffset: 0. fileDescriptor2 := pipePointer nbUInt32AtOffset: 4. fileIDsArray at: 1 put: *(self primitiveFileOpenUseFileDescriptor: fileDescriptor1 writeFlag: false)*. fileIDsArray at: 2 put: *(self primitiveFileOpenUseFileDescriptor: fileDescriptor2 writeFlag: true).* pipe := OSSPipe newWith: fileIDsArray readBlocking: aBoolean. ] ensure:[ pipePointer free. ]. ^ pipe I just run all OSSubprocess tests and they all worked! (tested in Pharo 5.0). I guess I will commit this on the dev branch and hopefully when this is integrated into the VM I can merge that for my next OSSubprocess release. Thank you very much Holger On Thu, Sep 22, 2016 at 12:35 PM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
On Thu, Sep 22, 2016 at 12:12 PM, Holger Freyther <holger@freyther.de> wrote:
On 21 Sep 2016, at 15:09, Mariano Martinez Peck <marianopeck@gmail.com> wrote:
Exactly. I have been wanting this a couple of times while doing OSSubprocess.
https://github.com/pharo-project/pharo-vm/pull/108. Would be nice if you could review it and give it a try. It adds two primitive (one to work on fd one to work on FILE).
I probably also want to do:
sqFile->isStdioStream = isatty(fileno(file))
Yes, exactly. I remember now. And as I said, I also wanted to be able to work at fd or FILE* level and I failed.
Could you give the above a try and then I try to get it into the Opensmalltalk VM.
Hi Holger,
I just reviewed the PR and it looks really good. Please, allow me some time to get updated to the VM compiling instructions and I will give it a try. Probably, I will be testing it by doing my original (unused now) #name:attachToCFile:writable: use the new primitive and running the OSSubprocess tests. Does this make sense to you?
Thanks a LOT for going deep and fix it!
-- Mariano http://marianopeck.wordpress.com
-- Mariano http://marianopeck.wordpress.com On Thu, Sep 22, 2016 at 12:35 PM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
On Thu, Sep 22, 2016 at 12:12 PM, Holger Freyther <holger@freyther.de> wrote:
On 21 Sep 2016, at 15:09, Mariano Martinez Peck <marianopeck@gmail.com> wrote:
Exactly. I have been wanting this a couple of times while doing OSSubprocess.
https://github.com/pharo-project/pharo-vm/pull/108. Would be nice if you could review it and give it a try. It adds two primitive (one to work on fd one to work on FILE).
I probably also want to do:
sqFile->isStdioStream = isatty(fileno(file))
Yes, exactly. I remember now. And as I said, I also wanted to be able to work at fd or FILE* level and I failed.
Could you give the above a try and then I try to get it into the Opensmalltalk VM.
Hi Holger,
I just reviewed the PR and it looks really good. Please, allow me some time to get updated to the VM compiling instructions and I will give it a try. Probably, I will be testing it by doing my original (unused now) #name:attachToCFile:writable: use the new primitive and running the OSSubprocess tests. Does this make sense to you?
Thanks a LOT for going deep and fix it!
-- Mariano http://marianopeck.wordpress.com
-- Mariano http://marianopeck.wordpress.com