]> granicus.if.org Git - strace/blobdiff - print_mq_attr.c
netlink_sock_diag: print inet_diag_sockid.idiag_if as an interface index
[strace] / print_mq_attr.c
index f9bff3429bdc56873cb0c979d68c557c17a2749d..dfc326fdafa16af55ab84a8fe0479410dc4f4c65 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2004 Ulrich Drepper <drepper@redhat.com>
  * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #include "defs.h"
 
 #include DEF_MPERS_TYPE(mq_attr_t)
+
 #ifdef HAVE_MQUEUE_H
 # include <mqueue.h>
 typedef struct mq_attr mq_attr_t;
+#elif defined HAVE_LINUX_MQUEUE_H
+# include <linux/types.h>
+# include <linux/mqueue.h>
+typedef struct mq_attr mq_attr_t;
 #endif
+
+#include "xlat/mq_attr_flags.h"
+
 #include MPERS_DEFS
 
-MPERS_PRINTER_DECL(void, printmqattr)(struct tcb *tcp, const long addr)
+MPERS_PRINTER_DECL(void, printmqattr, struct tcb *const tcp,
+                  const kernel_ulong_t addr, const bool decode_flags)
 {
-# ifndef HAVE_MQUEUE_H
-       printaddr(addr);
-# else
+#if defined HAVE_MQUEUE_H || defined HAVE_LINUX_MQUEUE_H
        mq_attr_t attr;
        if (umove_or_printaddr(tcp, addr, &attr))
                return;
        tprints("{mq_flags=");
-       tprint_open_modes(attr.mq_flags);
-       tprintf(", mq_maxmsg=%ld, mq_msgsize=%ld, mq_curmsg=%ld}",
-               (long) attr.mq_maxmsg, (long) attr.mq_msgsize,
-               (long) attr.mq_curmsgs);
-# endif
+       if (decode_flags)
+               printflags64(mq_attr_flags,
+                            zero_extend_signed_to_ull(attr.mq_flags),
+                            "O_???");
+       else
+               tprintf("%#llx", zero_extend_signed_to_ull(attr.mq_flags));
+       tprintf(", mq_maxmsg=%lld, mq_msgsize=%lld, mq_curmsgs=%lld}",
+               sign_extend_unsigned_to_ll(attr.mq_maxmsg),
+               sign_extend_unsigned_to_ll(attr.mq_msgsize),
+               sign_extend_unsigned_to_ll(attr.mq_curmsgs));
+#else
+       printaddr(addr);
+#endif
 }