[MacRuby-devel] Using 'Pointer.new_with_type'

Laurent Sansonetti lsansonetti at apple.com
Mon Feb 9 11:30:06 PST 2009


Indeed (and sorry for the late reply), mkstemp is not covered by the  
BridgeSupport mechanism yet, which is why it is not available from  
MacRuby.

As a workaround I would recommend too to wrap the call inside an  
Objective-C class.  You don't have to build a framework, just a shared  
library (.dylib) with an empty Init_XXX function (where XXX is the  
name of the library file) can be loaded using #require.

But first I would try to see if there is no alternative in the Cocoa  
APIs. The NSTemporaryDirectory() function for instance returns you a  
secure temporary directory for your process. You can then create a  
file there based on a unique pattern.

$ macirb
 >> framework 'Cocoa'
=> true
 >> NSTemporaryDirectory()
=> "/var/folders/v1/v1Iq1tXOEMuSDv5AyY7i2k+++TI/-Tmp-/"
[...]

Laurent

On Feb 9, 2009, at 11:06 AM, Brian Chapados wrote:

> mkstemp is defined in the standard C library.  To use it, you would
> need to define a new bridged function in MacRuby on the fly. I don't
> think there is a way to do this right now.
>
> As a work-around, you could wrap the C function calls in methods
> defined in an Obj-C class and build a framework.  Then you would be
> able to load the framework in MacRuby and call those methods.
>
> On Fri, Feb 6, 2009 at 12:24 AM, Michael Winterstein
> <parzival at mindspring.com> wrote:
>>
>> On Feb 5, 2009, at 10:53 AM, Michael Winterstein wrote:
>>
>>> Hi all,
>>>
>>> Is there a particular framework that's required in order to use
>>> 'Pointer.new_with_type'?
>>>
>>> I'm using the trunk (build 809) and it's apparently not available in
>>> either my Xcode project or in macirb.
>>>
>>> Is there an alternative method for working with pointers?
>>>
>>>
>>>
>>> My specific case is that I want to call the C function mkstemp.
>>> Is this what I should be doing? :
>>>
>>> @tmpfInfo += "/"+"resynch.fileinfo.XXXXXX"
>>> tmptr = Pointer.new_with_type('*')
>>> tmptr.assign(@tmpfInfo)
>>> fd_tmpInfo = mkstemp(tmptr)
>>> tmpInfoFileHandle = NSFileHandle.initWithFileDescriptor(@fd_tmpInfo)
>>>
>>> Michael_______________________________________________
>>> MacRuby-devel mailing list
>>> MacRuby-devel at lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>
>> Scratch some of that ... I didn't have the right file and now I do  
>> have
>> Pointer.new_with_type.
>>
>> But I'm still wondering what's the correct approach.  This code  
>> still gives
>> me "undefined method" errors on mkstemp.
>>
>> Michael
>>
>>
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel



More information about the MacRuby-devel mailing list