[PATCH] v4l2: v4l2_compat: Fix ioctl() prototype with musl C library

Paul Elder paul.elder at ideasonboard.com
Thu Jul 25 09:26:44 CEST 2024


On Mon, Jul 22, 2024 at 12:31:11AM +0300, Laurent Pinchart wrote:
> The musl C library, as well as the POSIX standard, define the ioctl()
> function's request argument as an int. glibc and uclibc, on the other
> hand, define it as an unsigned long.
> 
> This difference between the function prototype and the implementation in
> the V4L2 adaptation layer causes a compilation error with musl. Fix it
> by detecting the function prototype and declaring the libcamera ioctl()
> handler accordingly.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> ---
>  meson.build              | 9 +++++++++
>  src/v4l2/v4l2_compat.cpp | 4 ++++
>  2 files changed, 13 insertions(+)
> 
> diff --git a/meson.build b/meson.build
> index 2acd8c3e8cfe..ccd766a1e98c 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -90,6 +90,15 @@ if cc.has_header_symbol('sys/mman.h', 'memfd_create', prefix : '#define _GNU_SOU
>      config_h.set('HAVE_MEMFD_CREATE', 1)
>  endif
>  
> +ioctl_posix_test = '''
> +#include <sys/ioctl.h>
> +int ioctl (int, int, ...);
> +'''
> +
> +if cc.compiles(ioctl_posix_test)
> +    config_h.set('HAVE_POSIX_IOCTL', 1)
> +endif
> +
>  if cc.has_header_symbol('stdlib.h', 'secure_getenv', prefix : '#define _GNU_SOURCE')
>      config_h.set('HAVE_SECURE_GETENV', 1)
>  endif
> diff --git a/src/v4l2/v4l2_compat.cpp b/src/v4l2/v4l2_compat.cpp
> index 66468bf38d5b..6c9dca7201a3 100644
> --- a/src/v4l2/v4l2_compat.cpp
> +++ b/src/v4l2/v4l2_compat.cpp
> @@ -154,7 +154,11 @@ LIBCAMERA_PUBLIC int munmap(void *addr, size_t length)
>  	return V4L2CompatManager::instance()->munmap(addr, length);
>  }
>  
> +#if HAVE_POSIX_IOCTL
> +LIBCAMERA_PUBLIC int ioctl(int fd, int request, ...)
> +#else
>  LIBCAMERA_PUBLIC int ioctl(int fd, unsigned long request, ...)
> +#endif
>  {
>  	void *arg;
>  	extract_va_arg(void *, arg, request);
> 
> base-commit: 4661a7eedf81f00212956f0d396196b3eb4a417b


More information about the libcamera-devel mailing list