Subject: [ruby-ffi] Alignment problem when passing values for struct on x86_64-linux |
From: rhp |
Date: 12/2/09 3:23 AM |
To: ruby-ffi |
Hi all,
Recently I am trying out ffi, and I think it is great.
However, I am running into an alignment problem when passing values to
a struct:
--- ffi.c
#include <stdio.h>
typedef struct {
int a;
int b;
} Struct;
void test(char *ptr, int i, Struct s, int dummy)
{
printf("%p %d [%d, %d] %d\n", ptr, i, s.a, s.b, dummy);
}
---
--- Makefile
libffi.so: ffi.o
gcc -g -shared -o libffi.so ffi.o
ffi.o: ffi.c
gcc -g -O2 -fPIC -o ffi.o -c ffi.c
---
--- ffi_test.rb
#!/usr/bin/ruby -w
require 'rubygems'
require 'ffi'
module TestFFI extend FFI::Library
ffi_lib 'ffi'
attach_function :test, [:pointer, :int, :int, :int], :void
end
ptr = FFI::MemoryPointer.new :float, 10
TestFFI.test(ptr, 10, 1, 2)
---
$ ./ffi_test.rb
0x20ed020 10 [1, 0] 2
I tried changing the latter two :ints into :int16 or :int64, but that
does not
make any difference.
I am running this on 64bit ubuntu 9.10.
$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]
$ ruby1.9.1 -v
ruby 1.9.1p243 (2009-07-16 revision 24175) [x86_64-linux]
Thanks,
Ronald