]> granicus.if.org Git - strace/commitdiff
Fix build with older versions of libaio.h
authorDmitry V. Levin <ldv@altlinux.org>
Mon, 18 Mar 2013 23:28:29 +0000 (23:28 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 18 Mar 2013 23:28:29 +0000 (23:28 +0000)
* configure.ac: When libaio.h is available, check for
struct iocb.u.c.flags, IO_CMD_PWRITE and IO_CMD_PWRITEV.
* desc.c (print_common_flags): Check for HAVE_STRUCT_IOCB_U_C_FLAGS.
(sys_io_submit): Check for HAVE_DECL_IO_CMD_PWRITE and
HAVE_DECL_IO_CMD_PWRITEV.

configure.ac
desc.c

index 998324d2d989c3f6a5b822267ff6e73064c040dc..2f813820815d9c3dce2d1ebb80d9dcd600cabd21 100644 (file)
@@ -204,7 +204,6 @@ AC_CHECK_HEADERS(m4_normalize([
        elf.h
        inttypes.h
        ioctls.h
-       libaio.h
        linux/capability.h
        linux/perf_event.h
        linux/ptrace.h
@@ -294,6 +293,11 @@ AC_CACHE_CHECK([for BLKGETSIZE64], [ac_cv_have_blkgetsize64],
 AC_CHECK_SIZEOF([long])
 AC_CHECK_SIZEOF([rlim_t],,[#include <sys/resource.h>])
 
+AC_CHECK_HEADERS([libaio.h], [
+       AC_CHECK_MEMBERS([struct iocb.u.c.flags],,, [#include <libaio.h>])
+       AC_CHECK_DECLS([IO_CMD_PWRITE, IO_CMD_PWRITEV],,, [#include <libaio.h>])
+])
+
 AC_PATH_PROG([PERL], [perl])
 
 AC_CONFIG_FILES([Makefile tests/Makefile])
diff --git a/desc.c b/desc.c
index d3faf3ad4ddfe75bdc4156a47e03148a0877891f..69d9e4383d4da7daf8083c8994040c904a61e454 100644 (file)
--- a/desc.c
+++ b/desc.c
@@ -854,10 +854,14 @@ iocb_cmd_lookup(unsigned cmd, enum iocb_sub *sub)
 static void
 print_common_flags(struct iocb *iocb)
 {
+#if HAVE_STRUCT_IOCB_U_C_FLAGS
        if (iocb->u.c.flags & IOCB_RESFD)
                tprintf(", resfd=%d", iocb->u.c.resfd);
        if (iocb->u.c.flags & ~IOCB_RESFD)
                tprintf(", flags=%x", iocb->u.c.flags);
+#else
+# warning "libaio.h is too old => limited io_submit decoding"
+#endif
 }
 
 #endif /* HAVE_LIBAIO_H */
@@ -901,13 +905,14 @@ sys_io_submit(struct tcb *tcp)
                                tprintf("filedes:%d", iocb.aio_fildes);
                                switch (sub) {
                                case SUB_COMMON:
+#if HAVE_DECL_IO_CMD_PWRITE
                                        if (iocb.aio_lio_opcode == IO_CMD_PWRITE) {
                                                tprints(", str:");
                                                printstr(tcp, (unsigned long)iocb.u.c.buf,
                                                         iocb.u.c.nbytes);
-                                       } else {
+                                       } else
+#endif
                                                tprintf(", buf:%p", iocb.u.c.buf);
-                                       }
                                        tprintf(", nbytes:%lu, offset:%llx",
                                                iocb.u.c.nbytes,
                                                iocb.u.c.offset);
@@ -919,7 +924,12 @@ sys_io_submit(struct tcb *tcp)
                                        tprints(", ");
                                        tprint_iov(tcp, iocb.u.v.nr,
                                                   (unsigned long)iocb.u.v.vec,
-                                                  iocb.aio_lio_opcode == IO_CMD_PWRITEV);
+#if HAVE_DECL_IO_CMD_PWRITEV
+                                                  iocb.aio_lio_opcode == IO_CMD_PWRITEV
+#else
+                                                  0
+#endif
+                                                 );
                                        break;
                                case SUB_POLL:
                                        tprintf(", %x", iocb.u.poll.events);
@@ -932,7 +942,7 @@ sys_io_submit(struct tcb *tcp)
                        if (i)
                                tprints("}");
 #else
-#warning "libaio-devel is not available => no io_submit decoding"
+#warning "libaio.h is not available => no io_submit decoding"
                        tprintf("%#lx", tcp->u_arg[2]);
 #endif
                }