From: Dmitry V. Levin Date: Sun, 28 Dec 2014 18:15:25 +0000 (+0000) Subject: Convert do_printstat to a template function X-Git-Tag: v4.10~257 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ab21a9489f9b6cb61d462f8e47c41b507ea8b585;p=strace 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 5a852b88..bc7dc896 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 38869582..f4ff3ef7 100644 --- 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 index 00000000..b6e18d35 --- /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