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.
diff --git a/Makefile.am b/Makefile.am
index c8a6871..e78e1fe 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -40,6 +40,7 @@
kexec.c \
keyctl.c \
ldt.c \
+ link.c \
loop.c \
mem.c \
mknod.c \
diff --git a/file.c b/file.c
index 2c4691b..7ba6824 100644
--- a/file.c
+++ b/file.c
@@ -1102,24 +1102,6 @@
#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 @@
}
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 0000000..2f5298f
--- /dev/null
+++ b/link.c
@@ -0,0 +1,71 @@
+#include "defs.h"
+
+#include <fcntl.h>
+
+#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;
+}