On Wed, Mar 29, 2017 at 11:55:43PM +0300, Edgar Kaziahmedov wrote:
> * v4l2.c: add meaningful and informative printings for all
> v4l2 buf types in the 'print_v4l2_format_fmt' routine,
> implementation print_v4l2_clip routine to print the clips field
> in case of the overlay type buf
> * xlat/v4l2_vbi_flags.in: new flags for and V4L2_BUF_TYPE_VBI*
> * xlat/v4l2_sliced_flags.in: new flags for V4L2_BUF_TYPE_SLICED*

I understand gnu style changelog is not easy for beginner.
As you are not the first one who patches v4l2.c and corresponding xlat
files, just have a look at earlier commit messages.

[...]
> -
> -     /* TODO: Complete this switch statement */
> -#if 0
> -     case V4L2_BUF_TYPE_VIDEO_OVERLAY:
> -#if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY
> +     /* OUTPUT_OVERLAY since Linux 2.6.22 */

strace still supports older kernels, so please do not remove this
HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY check.  Not yet.

[...]
> +     /* both since Linux 2.5.46 */
>       case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
> -     case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
> +     case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: {
> +             unsigned int i, j;
> +
>               tprints(prefix);
> -             tprints("fmt.sliced={???}");
> +             tprints("fmt.sliced={service_set=");
> +             printxval(v4l2_sliced_flags, f->fmt.sliced.service_set,
> +                     "V4L2_SLICED_???");
> +             tprintf(", io_size=%u, service_lines=[",
> +                     f->fmt.sliced.io_size);
> +             for (i = 0; i < ARRAY_SIZE(f->fmt.sliced.service_lines); i++) {
> +                     if (i > 0)
> +                             tprints(", ");
> +                     tprints("[");
> +                     for (j = 0;
> +                          j < ARRAY_SIZE(f->fmt.sliced.service_lines[0]);
> +                          j++) {
> +                             if (j > 0)
> +                                     tprints(", ");
> +                             tprintf("%#x",
> +                                     f->fmt.sliced.service_lines[i][j]);
> +                     }
> +                     tprints("]");
> +             }
> +             tprintf("]}");
>               break;
> -
> +     }

It was my advice to use ARRAY_SIZE, and it's the right way to do,
but everything has exploded in -m32 build:

gcc -DHAVE_CONFIG_H   -I./linux/x86_64 -I../linux/x86_64 -I./linux -I../linux 
-I. -I..   -DIN_MPERS -DMPERS_IS_m32 -I./mpers-m32  -Wall -Wempty-body 
-Wformat-security -Wignored-qualifiers -Winit-self -Wlogical-op 
-Wmissing-parameter-type -Wnested-externs -Wold-style-declaration 
-Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings -Werror  
-pipe -Wall -g -O2 -c -o libmpers_m32_a-v4l2.o `test -f 'v4l2.c' || echo 
'../'`v4l2.c
In file included from ../v4l2.c:30:0:
../v4l2.c: In function 'print_v4l2_format_fmt':
../defs.h:78:46: error: subscripted value is neither array nor pointer nor 
vector
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]) + MUST_BE_ARRAY(a))
                                              ^
../v4l2.c:315:13: note: in expansion of macro 'ARRAY_SIZE'
         j < ARRAY_SIZE(f->fmt.sliced.service_lines[0]);
             ^~~~~~~~~~
In file included from ../defs.h:58:0,
                 from ../v4l2.c:30:
../gcc_compat.h:59:66: error: subscripted value is neither array nor pointer 
nor vector
 # define MUST_BE_ARRAY(a) FAIL_BUILD_ON_ZERO(!SAME_TYPE((a), &(a)[0]))
                                                                  ^
../gcc_compat.h:57:59: note: in definition of macro 'FAIL_BUILD_ON_ZERO'
 # define FAIL_BUILD_ON_ZERO(expr) (sizeof(int[-1 + 2 * !!(expr)]) * 0)
                                                           ^~~~
../gcc_compat.h:59:47: note: in expansion of macro 'SAME_TYPE'
 # define MUST_BE_ARRAY(a) FAIL_BUILD_ON_ZERO(!SAME_TYPE((a), &(a)[0]))
                                               ^~~~~~~~~
../defs.h:78:53: note: in expansion of macro 'MUST_BE_ARRAY'
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]) + MUST_BE_ARRAY(a))
                                                     ^~~~~~~~~~~~~
../v4l2.c:315:13: note: in expansion of macro 'ARRAY_SIZE'
         j < ARRAY_SIZE(f->fmt.sliced.service_lines[0]);
             ^~~~~~~~~~
../v4l2.c:320:36: error: subscripted value is neither array nor pointer nor 
vector
      f->fmt.sliced.service_lines[i][j]);
                                    ^

This must be a bug in mpers.awk because mpers-m32/struct_v4l2_format.h looks
wrong around service_lines.


-- 
ldv

Attachment: signature.asc
Description: PGP signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to