Convert do_printstat to a template function
* 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.
diff --git a/Makefile.am b/Makefile.am
index 5a852b8..bc7dc89 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -64,6 +64,7 @@
personality.c \
prctl.c \
printmode.c \
+ printstat.h \
process.c \
process_vm.c \
ptp.c \
diff --git a/file.c b/file.c
index 3886958..f4ff3ef 100644
--- a/file.c
+++ b/file.c
@@ -372,65 +372,7 @@
}
#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
index 0000000..b6e18d3
--- /dev/null
+++ b/printstat.h
@@ -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