]> granicus.if.org Git - strace/commitdiff
Do not use htole32 function
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 13 May 2016 03:51:43 +0000 (03:51 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 13 May 2016 05:18:42 +0000 (05:18 +0000)
htole32 function is not portable enough.

* v4l2.c (print_pixelformat): Rewrite initialization of pixel format
union without using of htole32.
* tests/ioctl_v4l2.c (main): Likewise.

tests/ioctl_v4l2.c
v4l2.c

index 4da8d9791f4a56ba98a3edc0a39a59d9549c4703..6502b8f0142aa15e76ab3b6704a6a9d18f392dac 100644 (file)
@@ -26,7 +26,6 @@
  */
 
 #include "tests.h"
-#include <endian.h>
 #include <stdio.h>
 #include <string.h>
 #include <sys/ioctl.h>
@@ -58,7 +57,18 @@ main(void )
        const union u_pixel_format {
                unsigned int pixelformat;
                unsigned char cc[sizeof(int)];
-       } u = { .pixelformat = htole32(magic) };
+       } u = {
+#if WORDS_BIGENDIAN
+               .cc = {
+                       (unsigned char) (magic >> 24),
+                       (unsigned char) (magic >> 16),
+                       (unsigned char) (magic >> 8),
+                       (unsigned char) magic
+               }
+#else
+               .pixelformat = magic
+#endif
+       };
        unsigned int i;
 
 
@@ -465,10 +475,19 @@ main(void )
        struct v4l2_frmsizeenum *const p_frmsizeenum =
                tail_alloc(sizeof(*p_frmsizeenum));
        p_frmsizeenum->index = magic;
-       p_frmsizeenum->pixel_format = 0xfa5c2741;
        const union u_pixel_format u_frmsizeenum = {
-               .pixelformat = htole32(p_frmsizeenum->pixel_format)
+               .cc = { 'A', '\'', '\\', '\xfa' }
        };
+#if WORDS_BIGENDIAN
+       p_frmsizeenum->pixel_format =
+               (unsigned) u_frmsizeenum.cc[0] << 24 |
+               (unsigned) u_frmsizeenum.cc[1] << 16 |
+               (unsigned) u_frmsizeenum.cc[2] << 8 |
+               (unsigned) u_frmsizeenum.cc[3];
+#else
+       p_frmsizeenum->pixel_format = u_frmsizeenum.pixelformat;
+#endif
+
        ioctl(-1, VIDIOC_ENUM_FRAMESIZES, p_frmsizeenum);
        printf("ioctl(-1, VIDIOC_ENUM_FRAMESIZES, {index=%u"
               ", pixel_format=v4l2_fourcc('%c', '\\%c', '\\%c', '\\x%x')})"
diff --git a/v4l2.c b/v4l2.c
index 62f8810657aae4ee67c20c408af731d79cb12255..1df4ca52256c89b9f77f3e4927ac1b851a1cad8f 100644 (file)
--- a/v4l2.c
+++ b/v4l2.c
@@ -77,7 +77,18 @@ print_pixelformat(uint32_t fourcc)
        const union {
                uint32_t pixelformat;
                unsigned char cc[sizeof(uint32_t)];
-       } u = { .pixelformat = htole32(fourcc) };
+       } u = {
+#if WORDS_BIGENDIAN
+               .cc = {
+                       (unsigned char) (fourcc >> 24),
+                       (unsigned char) (fourcc >> 16),
+                       (unsigned char) (fourcc >> 8),
+                       (unsigned char) fourcc
+               }
+#else
+               .pixelformat = fourcc
+#endif
+       };
        unsigned int i;
 
        tprints("v4l2_fourcc(");