[Vm-dev] VM Maker: VMMaker.oscog-akg.2340.mcz

David T. Lewis lewis at mail.msen.com
Sun Mar 4 14:31:07 UTC 2018


On Sun, Mar 04, 2018 at 11:26:18AM +0000, Alistair Grant wrote:
>  
> On Sat, Mar 03, 2018 at 03:12:10PM -0500, David T. Lewis wrote:
> >  
> > 
> > Is it too late to ask about the names of these primitives? I'm not sure that
> > I understand the use case, but I am looking at the discussion referenced earlier:
> >   http://forum.world.st/Adding-new-primitives-to-FilePlugin-td4916711.html
> 
> I don't think it is too late.  They only exist in a pre-release version 
> of the Pharo VM, and there's no smalltalk code in the image at the 
> moment to use them.
> 
> 
> > From this I would assume that the intended usage is to get a previously opened
> > file descriptor or a previously opened *FILE pointer by means of some FFI call,
> > then pass this to one of the two new primitives in order to build a SQFile data
> > structure that is returned to the image in the form of a ByteArray. Presumably
> > the ByteArray would then be used to set the fileID field of a file stream (but
> > I am not clear on whether that is the intent).
> > 
> > If I am reading the code correctly, that is exactly what the two primitives do.
> > Is that right?
> 
> That's my understanding, i.e. to allow smalltalk streams to operate on 
> files that have been opened by third-party libraries.
> 
> 
> 
> > The names and comments say that the primitives are actually opening the files,
> > which appears not to be the case.
> > 
> >   primitiveFileOpenUseFile
> > 	"Open the file with the supplied FILE* and writeFlag.
> > 	FILE* must be supplied in a byte object (ByteArray) with the platform address size.
> > 	writeFlag must be a boolean."
> 
> Yep (mea culpa, this is my comment).
> 
> >   primitiveFileOpenUseFileDescriptor
> > 	"Open the file with the supplied file descriptor and writeFlag.
> > 	fileDescriptor must be an integer.
> > 	writeFlag must be a boolean."
> 
> I agree that based on your description above, it isn't really newly 
> opening a file, however it is calling fdopen(), which does set 
> a precendent.

Yes, I think that fdopen() might be a source of confusion. It is a poor 
function name, since is does not open a file or a file descriptor or anything
else, though at least it does rhymeswith "fopen". But I guess it is probably
too late to complain to the guys who wrote Unix ;-)


> 
> 
> > I'm not sure I can think of any good names off the top of my head, but if
> > the above is right, and given that the ByteArray returned by the primitive
> > corresponds to the fileID field in a FileStream, then maybe it would be something
> > like #primitiveFileIDBytesFromFD (for the integer file descriptor or Windows
> > integer HANDLE) and #primitiveFileIDBytesFromStdioStream (for a *FILE).
> 
> Maybe #primitiveConnectoToFileDescriptor and #primitiveConnectToFile?
> 

Those names sound good to me.

Dave



> 
> 
> 
> Cheers,
> Alistair
> 
> 
> 
> > It actually does look like the primitive that uses integer file descriptor
> > would be appropriate for Windows, so that probably can be implemented.
> > On Windows, you would still need some way to deal with the file handle registry
> > in FilePlugin, because Andreas was rather strenuously opposed to people (such
> > as for example me!) doing things in the FilePlugin with file handles that did
> > not actually originate from the plugin. He was trying to find a more general
> > solution to this for security reasons, although we never actually implemented
> > any solution and the handle registry is probably still in effect on Windows.
> > 
> > Please don't take this as objections, I'm just trying to understand the intent
> > and maybe suggest better naming or comments in the primitives.
> > 
> > Dave


More information about the Vm-dev mailing list