#1160: Need ability to access errno from Ruby code --------------------------------------+------------------------------------- Reporter: warpflyght@… | Owner: lsansonetti@… Type: enhancement | Status: closed Priority: minor | Milestone: MacRuby 0.9 Component: MacRuby | Resolution: fixed Keywords: | --------------------------------------+------------------------------------- Comment(by warpflyght@…): Using BridgeSupport. I've added custom BridgeSupport definitions in a couple of tools now. In the case of openpty(3), I don't need to set the termios or winsize structs, so the XML looks like this: {{{ <?xml version='1.0'?> <!DOCTYPE signatures SYSTEM "file://localhost/System/Library/DTDs/BridgeSupport.dtd"> <signatures version='0.9'> <function name='openpty'> <arg type='^i' type_modifier='o'/> <arg type='^i' type_modifier='o'/> <arg type='*' type_modifier='o'/> <arg type='^v'/> <!-- ignored --> <arg type='^v'/> <!-- ignored --> <reval type='i'/> </function> </signatures> }}} And the code to call it should look like this (untested): {{{ load_bridge_support_file "/path/to/custom_file.bridgesupport" # Allocate space for file descriptors master_fd = Pointer.new(:int) slave_fd = pointer.new(:int) # Call openpty(3) to get descriptors back result = openpty(master, slave, nil, nil, nil) raise SystemCallError.new(Errno.code) unless result == 0 # Use IO.for_fd to wrap file descriptors # From here, treat like a pipe: fork, close appropriate ends, and hook up to stdin/stdout/stderr }}} I've used this technique to call various C functions with RubyCocoa (using a custom BridgeSupport file) and Ruby/DL (chanting the appropriate incantations), but not with MacRuby. -- Ticket URL: <http://www.macruby.org/trac/ticket/1160#comment:5> MacRuby <http://macruby.org/>