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

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