From db23b3414ce9e3321066b790cf8ca5da9eff961f Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Sat, 6 Dec 2014 03:53:16 +0000 Subject: [PATCH] file.c: move mknod, mknodat, and xmknod parsers to a separate file * mknod.c: New file. * Makefile.am (strace_SOURCES): Add it. * file.c: Move sys_mknod, sys_mknodat, sys_xmknod, and related code to mknod.c. --- Makefile.am | 1 + file.c | 65 ------------------------------------------- mknod.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 65 deletions(-) create mode 100644 mknod.c diff --git a/Makefile.am b/Makefile.am index bae7d431..0516344f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -40,6 +40,7 @@ strace_SOURCES = \ ldt.c \ loop.c \ mem.c \ + mknod.c \ mount.c \ mtd.c \ net.c \ diff --git a/file.c b/file.c index 5bcf8940..7dfe0a69 100644 --- a/file.c +++ b/file.c @@ -1279,28 +1279,6 @@ sys_lxstat(struct tcb *tcp) return 0; } -int -sys_xmknod(struct tcb *tcp) -{ - int mode = tcp->u_arg[2]; - - if (entering(tcp)) { - tprintf("%ld, ", tcp->u_arg[0]); - printpath(tcp, tcp->u_arg[1]); - tprintf(", %s", sprintmode(mode)); - switch (mode & S_IFMT) { - case S_IFCHR: case S_IFBLK: - tprintf(", makedev(%lu, %lu)", - (unsigned long) ((tcp->u_arg[3] >> 18) & 0x3fff), - (unsigned long) (tcp->u_arg[3] & 0x3ffff)); - break; - default: - break; - } - } - return 0; -} - #endif /* SPARC[64] */ /* directory */ @@ -1598,46 +1576,3 @@ sys_utime(struct tcb *tcp) } return 0; } - -static int -decode_mknod(struct tcb *tcp, int offset) -{ - int mode = tcp->u_arg[offset + 1]; - - if (entering(tcp)) { - printpath(tcp, tcp->u_arg[offset]); - tprintf(", %s", sprintmode(mode)); - switch (mode & S_IFMT) { - case S_IFCHR: - case S_IFBLK: -#if defined(SPARC) || defined(SPARC64) - if (current_personality == 1) - tprintf(", makedev(%lu, %lu)", - (unsigned long) ((tcp->u_arg[offset + 2] >> 18) & 0x3fff), - (unsigned long) (tcp->u_arg[offset + 2] & 0x3ffff)); - else -#endif - tprintf(", makedev(%lu, %lu)", - (unsigned long) major(tcp->u_arg[offset + 2]), - (unsigned long) minor(tcp->u_arg[offset + 2])); - break; - default: - break; - } - } - return 0; -} - -int -sys_mknod(struct tcb *tcp) -{ - return decode_mknod(tcp, 0); -} - -int -sys_mknodat(struct tcb *tcp) -{ - if (entering(tcp)) - print_dirfd(tcp, tcp->u_arg[0]); - return decode_mknod(tcp, 1); -} diff --git a/mknod.c b/mknod.c new file mode 100644 index 00000000..07e9a459 --- /dev/null +++ b/mknod.c @@ -0,0 +1,79 @@ +#include "defs.h" + +#include + +#ifdef MAJOR_IN_SYSMACROS +# include +#endif + +#ifdef MAJOR_IN_MKDEV +# include +#endif + +static int +decode_mknod(struct tcb *tcp, int offset) +{ + int mode = tcp->u_arg[offset + 1]; + + if (entering(tcp)) { + printpath(tcp, tcp->u_arg[offset]); + tprintf(", %s", sprintmode(mode)); + switch (mode & S_IFMT) { + case S_IFCHR: + case S_IFBLK: +#if defined(SPARC) || defined(SPARC64) + if (current_personality == 1) + tprintf(", makedev(%lu, %lu)", + (unsigned long) ((tcp->u_arg[offset + 2] >> 18) & 0x3fff), + (unsigned long) (tcp->u_arg[offset + 2] & 0x3ffff)); + else +#endif /* SPARC || SPARC64 */ + tprintf(", makedev(%lu, %lu)", + (unsigned long) major(tcp->u_arg[offset + 2]), + (unsigned long) minor(tcp->u_arg[offset + 2])); + break; + default: + break; + } + } + return 0; +} + +int +sys_mknod(struct tcb *tcp) +{ + return decode_mknod(tcp, 0); +} + +int +sys_mknodat(struct tcb *tcp) +{ + if (entering(tcp)) + print_dirfd(tcp, tcp->u_arg[0]); + return decode_mknod(tcp, 1); +} + +#if defined(SPARC) || defined(SPARC64) +int +sys_xmknod(struct tcb *tcp) +{ + int mode = tcp->u_arg[2]; + + if (entering(tcp)) { + tprintf("%ld, ", tcp->u_arg[0]); + printpath(tcp, tcp->u_arg[1]); + tprintf(", %s", sprintmode(mode)); + switch (mode & S_IFMT) { + case S_IFCHR: + case S_IFBLK: + tprintf(", makedev(%lu, %lu)", + (unsigned long) ((tcp->u_arg[3] >> 18) & 0x3fff), + (unsigned long) (tcp->u_arg[3] & 0x3ffff)); + break; + default: + break; + } + } + return 0; +} +#endif /* SPARC || SPARC64 */ -- 2.34.1