Confusion in usr/include/linux/videodev.h
usr/include/linux/videodev.h is giving 2 warnings in 'make headers_check':
usr/include/linux/videodev.h:19: leaks CONFIG_VIDEO to userspace where it is not valid usr/include/linux/videodev.h:314: leaks CONFIG_VIDEO to userspace where it is not valid
Whole file is covered with #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
It means this file is only valid for kernel mode if CONFIG_VIDEO_V4L1_COMPAT is defined but in user mode it is always valid.
Can we choose some better alternative Or can we use this file as:
#ifdef CONFIG_VIDEO_V4L1_COMPAT
#include <linux/videodev.h>
#endif
Thanks
--
JSR
Quoted 6 lines · On Wed, 21 Jan 2009 07:10:38 +0530 Jaswinder Singh Rajput…
usr/include/linux/videodev.his giving 2 warnings in 'makeheaders_check':
usr/include/linux/videodev.h:19: leaksCONFIG_VIDEOto userspace where it is not validusr/include/linux/videodev.h:314: leaksCONFIG_VIDEOto userspace where it is not validWhole file is covered with #if
defined(CONFIG_VIDEO_V4L1_COMPAT)|| !defined (__KERNEL__)
Quoted 7 lines
It means this file is only valid for kernel mode if
CONFIG_VIDEO_V4L1_COMPATis defined but in user mode it is always valid.Can we choose some better alternative Or can we use this file as:
#ifdef
CONFIG_VIDEO_V4L1_COMPAT
#include <linux/videodev.h>
#endif
This is somewhat like what we have on audio devices (where there are OSS and ALSA API's).
V4L1 is the old deprecated userspace API for video devices. It is still required by some userspace applications. So, on userspace, it should be included. Also, this allows that one userspace app to be compatible with both V4L2 API (the current one) and the legacy V4L1 one.
It should be noticed that are still a few drivers using the legacy API yet to be converted.
Cheers,
Mauro
Quoted 19 lines · Mauro Carvalho Chehab
Quoted 6 lines · On Wed, 21 Jan 2009 07:10:38 +0530 Jaswinder Singh Rajput…
usr/include/linux/videodev.his giving 2 warnings in 'makeheaders_check':
usr/include/linux/videodev.h:19: leaksCONFIG_VIDEOto userspace where it is not validusr/include/linux/videodev.h:314: leaksCONFIG_VIDEOto userspace where it is not validWhole file is covered with #if
defined(CONFIG_VIDEO_V4L1_COMPAT)|| !defined (__KERNEL__)Quoted 7 lines
It means this file is only valid for kernel mode if
CONFIG_VIDEO_V4L1_COMPATis defined but in user mode it is always valid.Can we choose some better alternative Or can we use this file as:
#ifdef
CONFIG_VIDEO_V4L1_COMPAT
#include <linux/videodev.h>
#endifThis is somewhat like what we have on audio devices (where there are OSS and ALSA API's).
Quoted 8 lines
V4L1 is the old deprecated userspace API for video devices. It is still required by some userspace applications. So, on userspace, it should be included. Also, this allows that one userspace app to be compatible with both V4L2 API (the current one) and the legacy V4L1 one.
It should be noticed that are still a few drivers using the legacy API yet to be converted.
If you have no objections then I will make a patchset which do followings:
1. Remove #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__) from include/linux/videodev.h
2. cover all #include <linux/videodev.h> with #ifdef CONFIG_VIDEO_V4L1_COMPAT in kernel
By this way, we can satisfy both kernel space and userspace issue and also get rid of above warnings.
If you have better suggestion then let me know.
Thanks,
--
JSR
Quoted 28 lines · Jaswinder Singh Rajput
Quoted 11 lines · Mauro Carvalho Chehab
Quoted 7 lines · On Wed, 21 Jan 2009 07:10:38 +0530 Jaswinder Singh Rajput…
usr/include/linux/videodev.his giving 2 warnings in 'makeheaders_check':
usr/include/linux/videodev.h:19: leaksCONFIG_VIDEOto userspace where it is not validusr/include/linux/videodev.h:314: leaksCONFIG_VIDEOto userspace where it is not validWhole file is covered with #if
defined(CONFIG_VIDEO_V4L1_COMPAT)|| !defined (__KERNEL__)It means this file is only valid for kernel mode if
CONFIG_VIDEO_V4L1_COMPATis defined but in user mode it is always valid.Quoted 8 lines
V4L1 is the old deprecated userspace API for video devices. It is still required by some userspace applications. So, on userspace, it should be included. Also, this allows that one userspace app to be compatible with both V4L2 API (the current one) and the legacy V4L1 one.
It should be noticed that are still a few drivers using the legacy API yet to be converted.
If you have no objections then I will make a patchset which do followings:
1. Remove #ifdefined(CONFIG_VIDEO_V4L1_COMPAT)|| !defined (__KERNEL__) frominclude/linux/videodev.h
2. cover all #include <linux/videodev.h> with #ifdefCONFIG_VIDEO_V4L1_COMPATin kernel
Quoted 4 lines
By this way, we can satisfy both kernel space and userspace issue and also get rid of above warnings.
If you have better suggestion then let me know.
That sounds like it will add a mess of #if's. How about this?
linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +2 -1
@@ -15,7 +15,8 @@ #include <linux/ioctl.h> #include <linux/videodev2.h> -#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__) +#if (defined(__KERNEL__) && defined(CONFIG_VIDEO_V4L1_COMPAT)) \ + || !defined (__KERNEL__) #define VID_TYPE_CAPTURE 1 /* Can capture */ #define VID_TYPE_TUNER 2 /* Can tune */
Now CONFIG_VIDEO_V4L1_COMPAT will only be used in the kernel.
Quoted 50 lines · Trent Piepho
Quoted 28 lines · Jaswinder Singh Rajput
Quoted 11 lines · Mauro Carvalho Chehab
Quoted 7 lines · On Wed, 21 Jan 2009 07:10:38 +0530 Jaswinder Singh Rajput…
usr/include/linux/videodev.his giving 2 warnings in 'makeheaders_check':
usr/include/linux/videodev.h:19: leaksCONFIG_VIDEOto userspace where it is not validusr/include/linux/videodev.h:314: leaksCONFIG_VIDEOto userspace where it is not validWhole file is covered with #if
defined(CONFIG_VIDEO_V4L1_COMPAT)|| !defined (__KERNEL__)It means this file is only valid for kernel mode if
CONFIG_VIDEO_V4L1_COMPATis defined but in user mode it is always valid.Quoted 8 lines
V4L1 is the old deprecated userspace API for video devices. It is still required by some userspace applications. So, on userspace, it should be included. Also, this allows that one userspace app to be compatible with both V4L2 API (the current one) and the legacy V4L1 one.
It should be noticed that are still a few drivers using the legacy API yet to be converted.
If you have no objections then I will make a patchset which do followings:
1. Remove #ifdefined(CONFIG_VIDEO_V4L1_COMPAT)|| !defined (__KERNEL__) frominclude/linux/videodev.h
2. cover all #include <linux/videodev.h> with #ifdefCONFIG_VIDEO_V4L1_COMPATin kernelQuoted 4 lines
By this way, we can satisfy both kernel space and userspace issue and also get rid of above warnings.
If you have better suggestion then let me know.
That sounds like it will add a mess of #if's. How about this?
diff -r
29c5787efcdalinux/include/linux/videodev.hlinux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +2
-1@@ -15,7 +15,8 @@ #include <linux/ioctl.h> #include <linux/videodev2.h> -#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__) +#if (defined(__KERNEL__) && defined(CONFIG_VIDEO_V4L1_COMPAT)) \ + || !defined (__KERNEL__) #define VID_TYPE_CAPTURE 1 /* Can capture */ #define VID_TYPE_TUNER 2 /* Can tune */
Quoted 2 lines
Now
CONFIG_VIDEO_V4L1_COMPATwill only be used in the kernel.
No, this will still give warnings.
Please run 'make headers_check'
--
JSR
Quoted 11 lines · Jaswinder Singh Rajput
Quoted 11 lines
diff -r
29c5787efcdalinux/include/linux/videodev.hlinux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +2
-1@@ -15,7 +15,8 @@ #include <linux/ioctl.h> #include <linux/videodev2.h> -#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__) +#if (defined(__KERNEL__) && defined(CONFIG_VIDEO_V4L1_COMPAT)) \ + || !defined (__KERNEL__)
Quoted 7 lines
Quoted 5 lines
linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +0
-0#define VID_TYPE_CAPTURE 1 /* Can capture */ #define VID_TYPE_TUNER 2 /* Can tune */Now
CONFIG_VIDEO_V4L1_COMPATwill only be used in the kernel.No, this will still give warnings.
You could #define another conditional, like this:
#ifndef __KERNEL__
# define __V4L1_COMPAT_API /* Always provide definitions to user space */ #else /* __KERNEL__ */ # ifdef CONFIG_VIDEO_V4L1_COMPAT # define __V4L1_COMPAT_API # endif /* CONFIG_VIDEO_V4L1_COMPAT /* #endif /* __KERNEL__ */
Arnd <><
Quoted 22 lines · Arnd Bergmann
Quoted 11 lines · Jaswinder Singh Rajput
Quoted 11 lines
diff -r
29c5787efcdalinux/include/linux/videodev.hlinux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +2
-1@@ -15,7 +15,8 @@ #include <linux/ioctl.h> #include <linux/videodev2.h> -#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__) +#if (defined(__KERNEL__) && defined(CONFIG_VIDEO_V4L1_COMPAT)) \ + || !defined (__KERNEL__)Quoted 7 lines
Quoted 5 lines
linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +0
-0#define VID_TYPE_CAPTURE 1 /* Can capture */ #define VID_TYPE_TUNER 2 /* Can tune */Now
CONFIG_VIDEO_V4L1_COMPATwill only be used in the kernel.No, this will still give warnings.
You could #define another conditional, like this:
Quoted 7 lines
#ifndef
__KERNEL__# define __V4L1_COMPAT_API /* Always provide definitions to user space */ #else /* __KERNEL__ */ # ifdef CONFIG_VIDEO_V4L1_COMPAT # define __V4L1_COMPAT_API # endif /* CONFIG_VIDEO_V4L1_COMPAT /* #endif /* __KERNEL__ */
I see what the real problem is now, the unifdef program isn't smart enough to realize that it knows the result of !defined(__KERNEL__) || defined(FOO) and so it keeps those ifdefs in when it should be able to remove them.
This works too:
#ifndef __KERNEL__
# define __V4L1_COMPAT_API /* Always provide definitions to user space */ #elif defined(CONFIG_VIDEO_V4L1_COMPAT) /* __KERNEL__ */ # define __V4L1_COMPAT_API #endif /* CONFIG_VIDEO_V4L1_COMPAT */