From 231b19fca0e47d98625a1fd1a374ecacd34da875 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 link, linkat, unlinkat, and symlinkat parsers to a separate file * link.c: New file. * Makefile.am (strace_SOURCES): Add it. * file.c: Move sys_link, sys_linkat, sys_unlinkat, sys_symlinkat, and related code to link.c. --- Makefile.am | 1 + file.c | 68 -------------------------------------------------- link.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 68 deletions(-) create mode 100644 link.c diff --git a/Makefile.am b/Makefile.am index c8a6871b..e78e1fe0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -40,6 +40,7 @@ strace_SOURCES = \ kexec.c \ keyctl.c \ ldt.c \ + link.c \ loop.c \ mem.c \ mknod.c \ diff --git a/file.c b/file.c index 2c4691be..7ba68246 100644 --- a/file.c +++ b/file.c @@ -1102,24 +1102,6 @@ sys_stat64(struct tcb *tcp) #endif } -#ifndef AT_SYMLINK_NOFOLLOW -# define AT_SYMLINK_NOFOLLOW 0x100 -#endif -#ifndef AT_REMOVEDIR -# define AT_REMOVEDIR 0x200 -#endif -#ifndef AT_SYMLINK_FOLLOW -# define AT_SYMLINK_FOLLOW 0x400 -#endif -#ifndef AT_NO_AUTOMOUNT -# define AT_NO_AUTOMOUNT 0x800 -#endif -#ifndef AT_EMPTY_PATH -# define AT_EMPTY_PATH 0x1000 -#endif - -#include "xlat/at_flags.h" - int sys_newfstatat(struct tcb *tcp) { @@ -1269,53 +1251,3 @@ sys_chdir(struct tcb *tcp) } return 0; } - -int -sys_link(struct tcb *tcp) -{ - if (entering(tcp)) { - printpath(tcp, tcp->u_arg[0]); - tprints(", "); - printpath(tcp, tcp->u_arg[1]); - } - return 0; -} - -int -sys_linkat(struct tcb *tcp) -{ - if (entering(tcp)) { - print_dirfd(tcp, tcp->u_arg[0]); - printpath(tcp, tcp->u_arg[1]); - tprints(", "); - print_dirfd(tcp, tcp->u_arg[2]); - printpath(tcp, tcp->u_arg[3]); - tprints(", "); - printflags(at_flags, tcp->u_arg[4], "AT_???"); - } - return 0; -} - -int -sys_unlinkat(struct tcb *tcp) -{ - if (entering(tcp)) { - print_dirfd(tcp, tcp->u_arg[0]); - printpath(tcp, tcp->u_arg[1]); - tprints(", "); - printflags(at_flags, tcp->u_arg[2], "AT_???"); - } - return 0; -} - -int -sys_symlinkat(struct tcb *tcp) -{ - if (entering(tcp)) { - printpath(tcp, tcp->u_arg[0]); - tprints(", "); - print_dirfd(tcp, tcp->u_arg[1]); - printpath(tcp, tcp->u_arg[2]); - } - return 0; -} diff --git a/link.c b/link.c new file mode 100644 index 00000000..2f5298f8 --- /dev/null +++ b/link.c @@ -0,0 +1,71 @@ +#include "defs.h" + +#include + +#ifndef AT_SYMLINK_NOFOLLOW +# define AT_SYMLINK_NOFOLLOW 0x100 +#endif +#ifndef AT_REMOVEDIR +# define AT_REMOVEDIR 0x200 +#endif +#ifndef AT_SYMLINK_FOLLOW +# define AT_SYMLINK_FOLLOW 0x400 +#endif +#ifndef AT_NO_AUTOMOUNT +# define AT_NO_AUTOMOUNT 0x800 +#endif +#ifndef AT_EMPTY_PATH +# define AT_EMPTY_PATH 0x1000 +#endif + +#include "xlat/at_flags.h" + +int +sys_link(struct tcb *tcp) +{ + if (entering(tcp)) { + printpath(tcp, tcp->u_arg[0]); + tprints(", "); + printpath(tcp, tcp->u_arg[1]); + } + return 0; +} + +int +sys_linkat(struct tcb *tcp) +{ + if (entering(tcp)) { + print_dirfd(tcp, tcp->u_arg[0]); + printpath(tcp, tcp->u_arg[1]); + tprints(", "); + print_dirfd(tcp, tcp->u_arg[2]); + printpath(tcp, tcp->u_arg[3]); + tprints(", "); + printflags(at_flags, tcp->u_arg[4], "AT_???"); + } + return 0; +} + +int +sys_unlinkat(struct tcb *tcp) +{ + if (entering(tcp)) { + print_dirfd(tcp, tcp->u_arg[0]); + printpath(tcp, tcp->u_arg[1]); + tprints(", "); + printflags(at_flags, tcp->u_arg[2], "AT_???"); + } + return 0; +} + +int +sys_symlinkat(struct tcb *tcp) +{ + if (entering(tcp)) { + printpath(tcp, tcp->u_arg[0]); + tprints(", "); + print_dirfd(tcp, tcp->u_arg[1]); + printpath(tcp, tcp->u_arg[2]); + } + return 0; +} -- 2.34.1