On Tue, Aug 12, 2008 at 11:44:20PM -0600, Vitaliy Margolen wrote: > While debugging some force-feedback issues ran into an interesting problem. > The size of one struct from include/linux differs between 32-bit and 64-bit. > That wouldn't be a major problem except that size is the part of the ioctl() > request. Which results in EINVAL. > > In more details: > input.h: > #define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) > > The simple test program: > > #include <linux/input.h> > #include <stdio.h> > int main(int argc, char * argv[]) > { > printf("sizeof(struct ff_effect) = %d EVIOCSFF=%#x\n", sizeof(struct > ff_effect), EVIOCSFF); > > return 0; > } > > > $ gcc test_size.c -o test_size && ./test_size > sizeof(struct ff_effect) = 48 EVIOCSFF=0x40304580 > $ gcc -m32 test_size.c -o test_size32 && ./test_size32 > sizeof(struct ff_effect) = 44 EVIOCSFF=0x402c4580 > > The question is what do we do about it? I'm sure there are might be more > cases like that.
The kernel is supposed to handle this transparently. I would report this to the kernel developers, mention "32bit compatibility" or so. Ciao, Marcus