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;
+}