x32: use generic printstat/printstat64 parsers
* file.c (printstat) [X32]: Define. (printstat64) [X32]: Use "struct stat64" instead of "struct stat". Use printstat for x32 personality processes. (printstat64_x32): Remove. (sys_stat64, sys_fstat64) [X32]: Use printstat64 instead of printstat64_x32.
This commit is contained in:
parent
8d411080ed
commit
553d8a2ae6
79
file.c
79
file.c
@ -314,7 +314,6 @@ printstat_powerpc32(struct tcb *tcp, long addr)
|
||||
|
||||
#include "printstat.h"
|
||||
|
||||
#ifndef X32
|
||||
static void
|
||||
printstat(struct tcb *tcp, long addr)
|
||||
{
|
||||
@ -334,12 +333,12 @@ printstat(struct tcb *tcp, long addr)
|
||||
printstatsol(tcp, addr);
|
||||
return;
|
||||
}
|
||||
#ifdef SPARC64
|
||||
# ifdef SPARC64
|
||||
else if (current_personality == 2) {
|
||||
printstat_sparc64(tcp, addr);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
#endif /* SPARC[64] */
|
||||
|
||||
#if defined POWERPC64
|
||||
@ -356,9 +355,6 @@ printstat(struct tcb *tcp, long addr)
|
||||
|
||||
do_printstat(tcp, &statbuf);
|
||||
}
|
||||
#else /* X32 */
|
||||
# define printstat printstat64
|
||||
#endif
|
||||
|
||||
#if !defined HAVE_STAT64 && (defined AARCH64 || defined X86_64 || defined X32)
|
||||
/*
|
||||
@ -405,11 +401,7 @@ struct stat64 {
|
||||
static void
|
||||
printstat64(struct tcb *tcp, long addr)
|
||||
{
|
||||
#ifdef X32
|
||||
struct stat statbuf;
|
||||
#else
|
||||
struct stat64 statbuf;
|
||||
#endif
|
||||
|
||||
#ifdef STAT64_SIZE
|
||||
(void) sizeof(char[sizeof statbuf == STAT64_SIZE ? 1 : -1]);
|
||||
@ -443,7 +435,7 @@ printstat64(struct tcb *tcp, long addr)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if defined X86_64
|
||||
#if defined X86_64 || defined X32
|
||||
if (current_personality != 1) {
|
||||
printstat(tcp, addr);
|
||||
return;
|
||||
@ -575,63 +567,6 @@ sys_stat(struct tcb *tcp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef X32
|
||||
static void
|
||||
printstat64_x32(struct tcb *tcp, long addr)
|
||||
{
|
||||
struct stat64 statbuf;
|
||||
|
||||
if (!addr) {
|
||||
tprints("NULL");
|
||||
return;
|
||||
}
|
||||
if (syserror(tcp) || !verbose(tcp)) {
|
||||
tprintf("%#lx", addr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (umove(tcp, addr, &statbuf) < 0) {
|
||||
tprints("{...}");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!abbrev(tcp)) {
|
||||
tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ",
|
||||
(unsigned long) major(statbuf.st_dev),
|
||||
(unsigned long) minor(statbuf.st_dev),
|
||||
(unsigned long long) statbuf.st_ino,
|
||||
sprintmode(statbuf.st_mode));
|
||||
tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
|
||||
(unsigned long) statbuf.st_nlink,
|
||||
(unsigned long) statbuf.st_uid,
|
||||
(unsigned long) statbuf.st_gid);
|
||||
tprintf("st_blksize=%lu, ",
|
||||
(unsigned long) statbuf.st_blksize);
|
||||
tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
|
||||
}
|
||||
else
|
||||
tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
|
||||
switch (statbuf.st_mode & S_IFMT) {
|
||||
case S_IFCHR: case S_IFBLK:
|
||||
tprintf("st_rdev=makedev(%lu, %lu), ",
|
||||
(unsigned long) major(statbuf.st_rdev),
|
||||
(unsigned long) minor(statbuf.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));
|
||||
tprints("}");
|
||||
}
|
||||
else
|
||||
tprints("...}");
|
||||
}
|
||||
#endif /* X32 */
|
||||
|
||||
int
|
||||
sys_stat64(struct tcb *tcp)
|
||||
{
|
||||
@ -640,11 +575,7 @@ sys_stat64(struct tcb *tcp)
|
||||
printpath(tcp, tcp->u_arg[0]);
|
||||
tprints(", ");
|
||||
} else {
|
||||
# ifdef X32
|
||||
printstat64_x32(tcp, tcp->u_arg[1]);
|
||||
# else
|
||||
printstat64(tcp, tcp->u_arg[1]);
|
||||
# endif
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
@ -710,11 +641,7 @@ sys_fstat64(struct tcb *tcp)
|
||||
printfd(tcp, tcp->u_arg[0]);
|
||||
tprints(", ");
|
||||
} else {
|
||||
# ifdef X32
|
||||
printstat64_x32(tcp, tcp->u_arg[1]);
|
||||
# else
|
||||
printstat64(tcp, tcp->u_arg[1]);
|
||||
# endif
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
|
Loading…
x
Reference in New Issue
Block a user