[MacRuby] #1340: Troubles casting a Pointer from void* to something useful
MacRuby
ruby-noreply at macosforge.org
Fri Jun 24 14:18:46 PDT 2011
#1340: Troubles casting a Pointer from void* to something useful
------------------------------------+---------------------------------------
Reporter: mrada@… | Owner: lsansonetti@…
Type: defect | Status: new
Priority: blocker | Milestone:
Component: MacRuby | Keywords:
------------------------------------+---------------------------------------
I've got an odd behavior where I am given a void* from a function, and I
try to cast it into something useful, but cannot.
The documentation for the function says I should be given a CFStringRef,
and so I cast it and try to access it, but it looks like it is jumping
right into the data structure. I cannot call CFString functions on the
pointer, or first index.
If I try #[1], it will segfault, I think trying to figure out what the
object is (generated from the example code further down):
{{{
0 libobjc.A.dylib 0x00007fff8200a3e6 object_getClass
+ 11
1 miniruby 0x00000001000deaa4
rb_objc_convert_immediate + 36 (objc.m:570)
2 miniruby 0x000000010013beb9 rb_vm_dispatch
+ 9177 (dispatcher.cpp:161)
}}}
Example code:
{{{
framework 'Cocoa'
current_keyboard = TISCopyCurrentKeyboardInputSource()
name = TISGetInputSourceProperty(current_keyboard,
KTISPropertyLocalizedName)
p name[0]
p name.type
name.cast!('^{__CFString}')
p name[0] # => NSCFString
p name[1] # segfault
CFStringGetLength(name) # => segfault
CFStringGetLength(name[0]) # => uncaught objective-c exception
name.cast!('@')
p name[0] # => NSCFString
p name[1] # segfault
CFStringGetLength(name) # => segfault
CFStringGetLength(name[0]) # => uncaught objective-c exception
}}}
--
Ticket URL: <http://www.macruby.org/trac/ticket/1340>
MacRuby <http://macruby.org/>
More information about the macruby-tickets
mailing list