]> granicus.if.org Git - strace/blobdiff - print_struct_stat.c
Update copyright headers
[strace] / print_struct_stat.c
index 7b23ec8a8bcda7b35134b4366d810f057c868013..d7b4b734e17f826fbb7eb6de38fedc0727e9a5cc 100644 (file)
@@ -7,34 +7,14 @@
  * 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-2018 The strace developers.
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier: LGPL-2.1-or-later
  */
 
 #include "defs.h"
 #include <sys/stat.h>
-#include <sys/sysmacros.h>
 #include "stat.h"
 
 void
@@ -42,10 +22,9 @@ 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);
@@ -58,9 +37,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);
@@ -68,18 +46,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(", ...");
        }