]> granicus.if.org Git - strace/commitdiff
Convert do_printstat to a template function
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 28 Dec 2014 18:15:25 +0000 (18:15 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 8 Jan 2015 01:14:53 +0000 (01:14 +0000)
* printstat.h: New file.
* Makefile.am (strace_SOURCES): Add it.
* file.c: Include "printstat.h".
(do_printstat): Move to printstat.h, parametrize its name
and struct stat.

Makefile.am
file.c
printstat.h [new file with mode: 0644]

index 5a852b88228ce442b280a4f7c2989da5bde41711..bc7dc8965e15a1b3a561b341312404fe149228c8 100644 (file)
@@ -64,6 +64,7 @@ strace_SOURCES =      \
        personality.c   \
        prctl.c         \
        printmode.c     \
+       printstat.h     \
        process.c       \
        process_vm.c    \
        ptp.c           \
diff --git a/file.c b/file.c
index 38869582a668ef151a49e7be2d22a9d387bfd11f..f4ff3ef77d86a404e9647670b86f5adc665e3915 100644 (file)
--- a/file.c
+++ b/file.c
@@ -372,65 +372,7 @@ printstat_powerpc32(struct tcb *tcp, long addr)
 }
 #endif /* POWERPC64 */
 
-static void
-do_printstat(struct tcb *tcp, struct stat *statbuf)
-{
-       if (!abbrev(tcp)) {
-               tprintf("{st_dev=makedev(%u, %u), st_ino=%llu, st_mode=%s, ",
-                       (unsigned int) major(statbuf->st_dev),
-                       (unsigned int) minor(statbuf->st_dev),
-                       (unsigned long long) statbuf->st_ino,
-                       sprintmode(statbuf->st_mode));
-               tprintf("st_nlink=%u, st_uid=%u, st_gid=%u, ",
-                       (unsigned int) statbuf->st_nlink,
-                       (unsigned int) statbuf->st_uid,
-                       (unsigned int) statbuf->st_gid);
-#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
-               tprintf("st_blksize=%u, ", (unsigned int) statbuf->st_blksize);
-#endif
-#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
-               tprintf("st_blocks=%llu, ",
-                       (unsigned long long) statbuf->st_blocks);
-#endif
-       }
-       else
-               tprintf("{st_mode=%s, ", sprintmode(statbuf->st_mode));
-       switch (statbuf->st_mode & S_IFMT) {
-       case S_IFCHR: case S_IFBLK:
-#ifdef HAVE_STRUCT_STAT_ST_RDEV
-               tprintf("st_rdev=makedev(%u, %u), ",
-                       (unsigned int) major(statbuf->st_rdev),
-                       (unsigned int) minor(statbuf->st_rdev));
-#else /* !HAVE_STRUCT_STAT_ST_RDEV */
-               tprintf("st_size=makedev(%u, %u), ",
-                       (unsigned int) major(statbuf->st_size),
-                       (unsigned int) minor(statbuf->st_size));
-#endif /* !HAVE_STRUCT_STAT_ST_RDEV */
-               break;
-       default:
-               tprintf("st_size=%llu, ",
-                       (unsigned long long) statbuf->st_size);
-               break;
-       }
-       if (!abbrev(tcp)) {
-               tprintf("st_atime=%s, ", sprinttime(statbuf->st_atime));
-               tprintf("st_mtime=%s, ", sprinttime(statbuf->st_mtime));
-               tprintf("st_ctime=%s", sprinttime(statbuf->st_ctime));
-#if HAVE_STRUCT_STAT_ST_FLAGS
-               tprintf(", st_flags=%u", (unsigned int) statbuf->st_flags);
-#endif
-#if HAVE_STRUCT_STAT_ST_FSTYPE
-               tprintf(", st_fstype=%.*s",
-                       (int) sizeof statbuf->st_fstype, statbuf->st_fstype);
-#endif
-#if HAVE_STRUCT_STAT_ST_GEN
-               tprintf(", st_gen=%u", (unsigned int) statbuf->st_gen);
-#endif
-               tprints("}");
-       }
-       else
-               tprints("...}");
-}
+#include "printstat.h"
 
 #ifndef X32
 static void
diff --git a/printstat.h b/printstat.h
new file mode 100644 (file)
index 0000000..b6e18d3
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef DO_PRINTSTAT
+# define DO_PRINTSTAT do_printstat
+#endif
+
+#ifndef STRUCT_STAT
+# define STRUCT_STAT struct stat
+#endif
+
+static void
+DO_PRINTSTAT(struct tcb *tcp, const STRUCT_STAT *statbuf)
+{
+       if (!abbrev(tcp)) {
+               tprintf("{st_dev=makedev(%u, %u), st_ino=%llu, st_mode=%s, ",
+                       (unsigned int) major(statbuf->st_dev),
+                       (unsigned int) minor(statbuf->st_dev),
+                       (unsigned long long) statbuf->st_ino,
+                       sprintmode(statbuf->st_mode));
+               tprintf("st_nlink=%u, st_uid=%u, st_gid=%u, ",
+                       (unsigned int) statbuf->st_nlink,
+                       (unsigned int) statbuf->st_uid,
+                       (unsigned int) statbuf->st_gid);
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+               tprintf("st_blksize=%u, ", (unsigned int) statbuf->st_blksize);
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+               tprintf("st_blocks=%llu, ",
+                       (unsigned long long) statbuf->st_blocks);
+#endif
+       } else {
+               tprintf("{st_mode=%s, ", sprintmode(statbuf->st_mode));
+       }
+
+       switch (statbuf->st_mode & S_IFMT) {
+       case S_IFCHR: case S_IFBLK:
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+               tprintf("st_rdev=makedev(%u, %u), ",
+                       (unsigned int) major(statbuf->st_rdev),
+                       (unsigned int) minor(statbuf->st_rdev));
+#else /* !HAVE_STRUCT_STAT_ST_RDEV */
+               tprintf("st_size=makedev(%u, %u), ",
+                       (unsigned int) major(statbuf->st_size),
+                       (unsigned int) minor(statbuf->st_size));
+#endif /* !HAVE_STRUCT_STAT_ST_RDEV */
+               break;
+       default:
+               tprintf("st_size=%llu, ",
+                       (unsigned long long) statbuf->st_size);
+               break;
+       }
+
+       if (!abbrev(tcp)) {
+               tprintf("st_atime=%s, ", sprinttime(statbuf->st_atime));
+               tprintf("st_mtime=%s, ", sprinttime(statbuf->st_mtime));
+               tprintf("st_ctime=%s", sprinttime(statbuf->st_ctime));
+#if HAVE_STRUCT_STAT_ST_FLAGS
+               tprintf(", st_flags=%u", (unsigned int) statbuf->st_flags);
+#endif
+#if HAVE_STRUCT_STAT_ST_FSTYPE
+               tprintf(", st_fstype=%.*s",
+                       (int) sizeof statbuf->st_fstype, statbuf->st_fstype);
+#endif
+#if HAVE_STRUCT_STAT_ST_GEN
+               tprintf(", st_gen=%u", (unsigned int) statbuf->st_gen);
+#endif
+               tprints("}");
+       } else {
+               tprints("...}");
+       }
+}
+
+#undef STRUCT_STAT
+#undef DO_PRINTSTAT