Hi Hans,

On Wed, May 02, 2012 at 10:45:22PM +0200, Hans Verkuil wrote:
> On Wed May 2 2012 21:13:47 Sakari Ailus wrote:
> > Replace enums in IOCTL structs by __u32. The size of enums is variable and
> > thus problematic. Compatibility structs having exactly the same as original
> > definition are provided for compatibility with old binaries with the
> > required conversion code.
> 
> Does someone actually have hard proof that there really is a problem? You 
> know,
> demonstrate it with actual example code?
> 
> It's pretty horrible that you have to do all those conversions and that code
> will be with us for years to come.
> 
> For most (if not all!) architectures sizeof(enum) == sizeof(u32), so there is
> no need for any compat code for those.

Cases I know where this can go wrong are, but there may well be others:

- ppc64: int is 64 bits there, and thus also enums,

- Enums are quite a different concept in C++ than in C --- the compiler may
  make assumpton based on the value range of the enums --- videodev2.h should
  be included with extern "C" in that case, though,

- C does not specify which integer type enums actually use; this is what GCC
  manual says about it:

  <URL:http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Enumerations>

  So a compiler other than GCC should use 16-bit enums and conform to C
  while breaking V4L2. This might be a theoretical issue, though.

More discussion took place in this thread:

<URL:http://www.spinics.net/lists/linux-media/msg46167.html>

Regards,

-- 
Sakari Ailus
e-mail: sakari.ai...@iki.fi     jabber/XMPP/Gmail: sai...@retiisi.org.uk
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to