From 46245b3541b6849379bd8d369b9b240b9361c71d 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 readlink and readlinkat parsers to a separate file * readlink.c: New file. * Makefile.am (strace_SOURCES): Add it. * file.c (decode_readlink, sys_readlink, sys_readlinkat): Move to readlink.c. --- Makefile.am | 1 + file.c | 37 ------------------------------------- readlink.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 37 deletions(-) create mode 100644 readlink.c diff --git a/Makefile.am b/Makefile.am index 324be2b6..c8a6871b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -53,6 +53,7 @@ strace_SOURCES = \ process.c \ ptp.c \ quota.c \ + readlink.c \ reboot.c \ renameat.c \ resource.c \ diff --git a/file.c b/file.c index 9fa2ee1c..2c4691be 100644 --- a/file.c +++ b/file.c @@ -1319,40 +1319,3 @@ sys_symlinkat(struct tcb *tcp) } return 0; } - -static int -decode_readlink(struct tcb *tcp, int offset) -{ - if (entering(tcp)) { - printpath(tcp, tcp->u_arg[offset]); - tprints(", "); - } else { - if (syserror(tcp)) - tprintf("%#lx", tcp->u_arg[offset + 1]); - else - /* Used to use printpathn(), but readlink - * neither includes NUL in the returned count, - * nor actually writes it into memory. - * printpathn() would decide on printing - * "..." continuation based on garbage - * past return buffer's end. - */ - printstr(tcp, tcp->u_arg[offset + 1], tcp->u_rval); - tprintf(", %lu", tcp->u_arg[offset + 2]); - } - return 0; -} - -int -sys_readlink(struct tcb *tcp) -{ - return decode_readlink(tcp, 0); -} - -int -sys_readlinkat(struct tcb *tcp) -{ - if (entering(tcp)) - print_dirfd(tcp, tcp->u_arg[0]); - return decode_readlink(tcp, 1); -} diff --git a/readlink.c b/readlink.c new file mode 100644 index 00000000..efa8e9f8 --- /dev/null +++ b/readlink.c @@ -0,0 +1,38 @@ +#include "defs.h" + +static int +decode_readlink(struct tcb *tcp, int offset) +{ + if (entering(tcp)) { + printpath(tcp, tcp->u_arg[offset]); + tprints(", "); + } else { + if (syserror(tcp)) + tprintf("%#lx", tcp->u_arg[offset + 1]); + else + /* Used to use printpathn(), but readlink + * neither includes NUL in the returned count, + * nor actually writes it into memory. + * printpathn() would decide on printing + * "..." continuation based on garbage + * past return buffer's end. + */ + printstr(tcp, tcp->u_arg[offset + 1], tcp->u_rval); + tprintf(", %lu", tcp->u_arg[offset + 2]); + } + return 0; +} + +int +sys_readlink(struct tcb *tcp) +{ + return decode_readlink(tcp, 0); +} + +int +sys_readlinkat(struct tcb *tcp) +{ + if (entering(tcp)) + print_dirfd(tcp, tcp->u_arg[0]); + return decode_readlink(tcp, 1); +} -- 2.40.0