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.
diff --git a/Makefile.am b/Makefile.am
index 324be2b..c8a6871 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -53,6 +53,7 @@
process.c \
ptp.c \
quota.c \
+ readlink.c \
reboot.c \
renameat.c \
resource.c \
diff --git a/file.c b/file.c
index 9fa2ee1..2c4691b 100644
--- a/file.c
+++ b/file.c
@@ -1319,40 +1319,3 @@
}
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 0000000..efa8e9f
--- /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);
+}