Messages in this thread | | | From | "Henrik Rydberg" <> | Date | Sun, 5 Feb 2012 08:59:06 +0100 | Subject | Re: [PATCH v3] Input: Add EVIOC mechanism for MT slots |
| |
> > This is resolved on the preprocessor level, so C99 or not does not > > enter the problem. Compile-time constant, as you can see in the code > > example in the patch summary. > > You're right, I didn't catch that. It will be compatible with all C > compilers if you use a static number of slots.
Yes, but this statement is merely repeating something that has been true since the sixties.
> However, it will break if you use a non-C99 C compiler and the code > wants to do dynamic number of slots calculations.
Of course, which is why C99 cannot be used for portable code. And it still has nothing to do with this patch.
> I imagine most callers would do: > > EVIOCGABS call on ABS_MT_SLOT; > int num_slots = ABS_MT_SLOT.max - ABS_MT_SLOT.min > struct INPUT_MT_REQUEST(num_slots) req;
Besides leaving a possible giant stack crash in your code, it assumes memory is somehow magically allocated. Not good practise in low-level programming. You wouldn't use a template this way, would you?
> This will break on non-C99 C compilers and other language compilers.
Of course, since you use the C99 dynamic stack construct, which, again, is not portable.
> It also will lead to head-scratcher bugs when someone compiles it > just fine in their C99 project, copies the code to another project > with a different compiler, and is confronted with the issue.
No, since people how know C do not do things like that.
> I think this issue should be enough to rethink the interface.
No, since your issues with C99 has nothing to do with this patch.
Henrik
| |