2014-12-28 21:15:25 +03:00
# ifndef DO_PRINTSTAT
# define DO_PRINTSTAT do_printstat
# endif
# ifndef STRUCT_STAT
# define STRUCT_STAT struct stat
# endif
2015-01-08 06:13:59 +03:00
# ifndef STAT_MAJOR
# define STAT_MAJOR(x) major(x)
# endif
# ifndef STAT_MINOR
# define STAT_MINOR(x) minor(x)
# endif
2014-12-28 21:15:25 +03:00
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, " ,
2015-01-08 06:13:59 +03:00
( unsigned int ) STAT_MAJOR ( statbuf - > st_dev ) ,
( unsigned int ) STAT_MINOR ( statbuf - > st_dev ) ,
2014-12-28 21:15:25 +03:00
( 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), " ,
2015-01-08 06:13:59 +03:00
( unsigned int ) STAT_MAJOR ( statbuf - > st_rdev ) ,
( unsigned int ) STAT_MINOR ( statbuf - > st_rdev ) ) ;
2014-12-28 21:15:25 +03:00
# else /* !HAVE_STRUCT_STAT_ST_RDEV */
tprintf ( " st_size=makedev(%u, %u), " ,
2015-01-08 06:13:59 +03:00
( unsigned int ) STAT_MAJOR ( statbuf - > st_size ) ,
( unsigned int ) STAT_MINOR ( statbuf - > st_size ) ) ;
2014-12-28 21:15:25 +03:00
# endif /* !HAVE_STRUCT_STAT_ST_RDEV */
break ;
default :
tprintf ( " st_size=%llu, " ,
( unsigned long long ) statbuf - > st_size ) ;
break ;
}
if ( ! abbrev ( tcp ) ) {
2015-03-12 19:59:01 +03:00
const bool cast = sizeof ( statbuf - > st_atime ) = = sizeof ( int ) ;
Print nanoseconds along with seconds in stat family syscalls
* configure.ac (AC_CHECK_MEMBERS): Add stat.st_atim.tv_nsec,
stat.st_ctim.tv_nsec, stat.st_mtim.tv_nsec, stat.st_atime_nsec,
stat.st_atime_csec, and stat.st_mtime_nsec.
* file.c: Explicitly define HAVE_STRUCT_STAT_ST_ATIME_NSEC,
HAVE_STRUCT_STAT_ST_CTIME_NSEC and HAVE_STRUCT_STAT_ST_MTIME_NSEC
for locally defined types.
* printstat.h (DO_PRINTSTAT): Print st_atime_nsec, st_ctime_nsec,
and st_mtime_nsec members.
* tests/stat.c [_FILE_OFFSET_BITS == 64]: Use st_atime_nsec,
st_ctime_nsec, and st_mtime_nsec via st_atim.tv_nsec, st_ctim.tv_nsec,
and st_mtim.tv_nsec.
(main): Print st_atime_nsec, st_ctime_nsec, and st_mtime_nsec members.
This fixes Fedora bug #1251176.
2015-08-08 15:12:13 +03:00
tprints ( " st_atime= " ) ;
tprints ( sprinttime ( cast ? ( time_t ) ( int ) statbuf - > st_atime :
2015-03-12 19:59:01 +03:00
( time_t ) statbuf - > st_atime ) ) ;
Print nanoseconds along with seconds in stat family syscalls
* configure.ac (AC_CHECK_MEMBERS): Add stat.st_atim.tv_nsec,
stat.st_ctim.tv_nsec, stat.st_mtim.tv_nsec, stat.st_atime_nsec,
stat.st_atime_csec, and stat.st_mtime_nsec.
* file.c: Explicitly define HAVE_STRUCT_STAT_ST_ATIME_NSEC,
HAVE_STRUCT_STAT_ST_CTIME_NSEC and HAVE_STRUCT_STAT_ST_MTIME_NSEC
for locally defined types.
* printstat.h (DO_PRINTSTAT): Print st_atime_nsec, st_ctime_nsec,
and st_mtime_nsec members.
* tests/stat.c [_FILE_OFFSET_BITS == 64]: Use st_atime_nsec,
st_ctime_nsec, and st_mtime_nsec via st_atim.tv_nsec, st_ctim.tv_nsec,
and st_mtim.tv_nsec.
(main): Print st_atime_nsec, st_ctime_nsec, and st_mtime_nsec members.
This fixes Fedora bug #1251176.
2015-08-08 15:12:13 +03:00
# ifdef HAVE_STRUCT_STAT_ST_ATIME_NSEC
if ( statbuf - > st_atime_nsec )
tprintf ( " .%09lu " , ( unsigned long ) statbuf - > st_atime_nsec ) ;
# endif
tprints ( " , st_mtime= " ) ;
tprints ( sprinttime ( cast ? ( time_t ) ( int ) statbuf - > st_mtime :
2015-03-12 19:59:01 +03:00
( time_t ) statbuf - > st_mtime ) ) ;
Print nanoseconds along with seconds in stat family syscalls
* configure.ac (AC_CHECK_MEMBERS): Add stat.st_atim.tv_nsec,
stat.st_ctim.tv_nsec, stat.st_mtim.tv_nsec, stat.st_atime_nsec,
stat.st_atime_csec, and stat.st_mtime_nsec.
* file.c: Explicitly define HAVE_STRUCT_STAT_ST_ATIME_NSEC,
HAVE_STRUCT_STAT_ST_CTIME_NSEC and HAVE_STRUCT_STAT_ST_MTIME_NSEC
for locally defined types.
* printstat.h (DO_PRINTSTAT): Print st_atime_nsec, st_ctime_nsec,
and st_mtime_nsec members.
* tests/stat.c [_FILE_OFFSET_BITS == 64]: Use st_atime_nsec,
st_ctime_nsec, and st_mtime_nsec via st_atim.tv_nsec, st_ctim.tv_nsec,
and st_mtim.tv_nsec.
(main): Print st_atime_nsec, st_ctime_nsec, and st_mtime_nsec members.
This fixes Fedora bug #1251176.
2015-08-08 15:12:13 +03:00
# ifdef HAVE_STRUCT_STAT_ST_MTIME_NSEC
if ( statbuf - > st_mtime_nsec )
tprintf ( " .%09lu " , ( unsigned long ) statbuf - > st_mtime_nsec ) ;
# endif
tprints ( " , st_ctime= " ) ;
tprints ( sprinttime ( cast ? ( time_t ) ( int ) statbuf - > st_ctime :
2015-03-12 19:59:01 +03:00
( time_t ) statbuf - > st_ctime ) ) ;
Print nanoseconds along with seconds in stat family syscalls
* configure.ac (AC_CHECK_MEMBERS): Add stat.st_atim.tv_nsec,
stat.st_ctim.tv_nsec, stat.st_mtim.tv_nsec, stat.st_atime_nsec,
stat.st_atime_csec, and stat.st_mtime_nsec.
* file.c: Explicitly define HAVE_STRUCT_STAT_ST_ATIME_NSEC,
HAVE_STRUCT_STAT_ST_CTIME_NSEC and HAVE_STRUCT_STAT_ST_MTIME_NSEC
for locally defined types.
* printstat.h (DO_PRINTSTAT): Print st_atime_nsec, st_ctime_nsec,
and st_mtime_nsec members.
* tests/stat.c [_FILE_OFFSET_BITS == 64]: Use st_atime_nsec,
st_ctime_nsec, and st_mtime_nsec via st_atim.tv_nsec, st_ctim.tv_nsec,
and st_mtim.tv_nsec.
(main): Print st_atime_nsec, st_ctime_nsec, and st_mtime_nsec members.
This fixes Fedora bug #1251176.
2015-08-08 15:12:13 +03:00
# ifdef HAVE_STRUCT_STAT_ST_CTIME_NSEC
if ( statbuf - > st_ctime_nsec )
tprintf ( " .%09lu " , ( unsigned long ) statbuf - > st_ctime_nsec ) ;
# endif
2015-06-17 23:09:13 +03:00
# ifdef HAVE_STRUCT_STAT_ST_FLAGS
2014-12-28 21:15:25 +03:00
tprintf ( " , st_flags=%u " , ( unsigned int ) statbuf - > st_flags ) ;
# endif
2015-06-17 23:09:13 +03:00
# ifdef HAVE_STRUCT_STAT_ST_FSTYPE
2014-12-28 21:15:25 +03:00
tprintf ( " , st_fstype=%.*s " ,
( int ) sizeof statbuf - > st_fstype , statbuf - > st_fstype ) ;
# endif
2015-06-17 23:09:13 +03:00
# ifdef HAVE_STRUCT_STAT_ST_GEN
2014-12-28 21:15:25 +03:00
tprintf ( " , st_gen=%u " , ( unsigned int ) statbuf - > st_gen ) ;
# endif
tprints ( " } " ) ;
} else {
tprints ( " ...} " ) ;
}
}
2015-01-08 06:13:59 +03:00
# undef STAT_MINOR
# undef STAT_MAJOR
2014-12-28 21:15:25 +03:00
# undef STRUCT_STAT
# undef DO_PRINTSTAT