]> granicus.if.org Git - strace/blobdiff - print_struct_stat.c
tests: move F_OFD_SETLK* checks from fcntl64.c to fcntl-common.c
[strace] / print_struct_stat.c
index fd902dc6e98145cc10431ea27447eec6b5ce0e11..ab13287e68c326f2a8915d240a176625358d90cb 100644 (file)
@@ -7,6 +7,7 @@
  * Copyright (c) 2009-2010 Andreas Schwab <schwab@linux-m68k.org>
  * Copyright (c) 2012 H.J. Lu <hongjiu.lu@intel.com>
  * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #include "defs.h"
 #include <sys/stat.h>
 #include "stat.h"
-#if defined MAJOR_IN_SYSMACROS
-# include <sys/sysmacros.h>
-#elif defined MAJOR_IN_MKDEV
-# include <sys/mkdev.h>
-#endif
 
 void
 print_struct_stat(struct tcb *tcp, const struct strace_stat *const st)
 {
        tprints("{");
        if (!abbrev(tcp)) {
-               tprintf("st_dev=makedev(%u, %u), st_ino=%llu, st_mode=",
-                       (unsigned int) major(st->dev),
-                       (unsigned int) minor(st->dev),
-                       st->ino);
+               tprints("st_dev=");
+               print_dev_t(st->dev);
+               tprintf(", st_ino=%llu, st_mode=", st->ino);
                print_symbolic_mode_t(st->mode);
                tprintf(", st_nlink=%llu, st_uid=%llu, st_gid=%llu",
                        st->nlink, st->uid, st->gid);
@@ -62,9 +57,8 @@ print_struct_stat(struct tcb *tcp, const struct strace_stat *const st)
 
        switch (st->mode & S_IFMT) {
        case S_IFCHR: case S_IFBLK:
-               tprintf(", st_rdev=makedev(%u, %u)",
-                       (unsigned int) major(st->rdev),
-                       (unsigned int) minor(st->rdev));
+               tprints(", st_rdev=");
+               print_dev_t(st->rdev);
                break;
        default:
                tprintf(", st_size=%llu", st->size);
@@ -72,18 +66,20 @@ print_struct_stat(struct tcb *tcp, const struct strace_stat *const st)
        }
 
        if (!abbrev(tcp)) {
-               tprints(", st_atime=");
-               tprints(sprinttime(st->atime));
-               if (st->atime_nsec)
-                       tprintf(".%09llu", st->atime_nsec);
-               tprints(", st_mtime=");
-               tprints(sprinttime(st->mtime));
-               if (st->mtime_nsec)
-                       tprintf(".%09llu", st->mtime_nsec);
-               tprints(", st_ctime=");
-               tprints(sprinttime(st->ctime));
-               if (st->ctime_nsec)
-                       tprintf(".%09llu", st->ctime_nsec);
+#define PRINT_ST_TIME(field)                                           \
+       do {                                                            \
+               tprintf(", st_" #field "=%lld", (long long) st->field); \
+               tprints_comment(sprinttime_nsec(st->field,              \
+                       zero_extend_signed_to_ull(st->field ## _nsec)));\
+               if (st->has_nsec)                                       \
+                       tprintf(", st_" #field "_nsec=%llu",            \
+                               zero_extend_signed_to_ull(              \
+                                       st->field ## _nsec));           \
+       } while (0)
+
+               PRINT_ST_TIME(atime);
+               PRINT_ST_TIME(mtime);
+               PRINT_ST_TIME(ctime);
        } else {
                tprints(", ...");
        }