2012/1/29 Vitaliy Margolen <wine-de...@kievinfo.com>: > On 01/28/2012 05:56 PM, Marcel Hasler wrote: >> >> According to the DirectX reference, IDirectInputEffect::Start accepts >> INFINITE (aka -1) for the number of iterations. However, passing -1 to >> Linux via input_event results in no effect being played at all. This >> patch sets the number of iterations to the maximum signed value >> allowed if INFINITE is passed. >> >> This fixes bug 29712. >> >> This patch supersedes patch 83233. It does the same thing but adds a >> comment and should be easier to understand. > > > In general looks good. Would be nice to point out that linux/input.h says > that any durations should not exceed 0x7fff as a maximum value. > > Please don't make code "easier to read" by adding needless if / else. Your > first patch was fine. > > Vitaliy.
Thanks for your feedback. I just had another look at linux/input.h and realized I made a mistake. The member 'value' is actually declared __s32, so it really should be 0x7fffffff. Is there any predefined constant that could be used for this, rather than using a literal? This is what the code looks like at the moment: /* Linux doesn't accept INFINITE, use the maximum __s32 value instead */ event.value = (dwIterations == INFINITE) ? 0x7fffffff : dwIterations; The limit 0x7fff mentioned in input.h doesn't concern the number of iterations, just durations. I couldn't find anything on an upper limit for 'value'. I've tested 0x7fffffff and it works just fine. Marcel