process.c: perform bpt trick for clone as well so we can get the pid of the child before it starts doing something
file.c: rename dirent64 struct to kernel_dirent64 so things compile again with newer libcs
diff --git a/ChangeLog b/ChangeLog
index 7f6d438..114c222 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2000-09-03  Wichert Akkerman <wakkerma@debian.org>
+
+  *  process.c: perform bpt trick for clone as well so we can get the
+     pid of the child before it starts doing something
+  *  file.c: rename dirent64 struct to kernel_dirent64 so things compile
+     again with newer libcs
+
 2000-09-01  Wichert Akkerman <wakkerma@debian.org>
 
   *  lots of files: merge patch from Gaël Roualland to add
diff --git a/file.c b/file.c
index a74beda..911090c 100644
--- a/file.c
+++ b/file.c
@@ -35,6 +35,7 @@
 #include <dirent.h>
 #ifdef linux
 #define dirent kernel_dirent
+#define dirent64 kernel_dirent64
 #include <linux/types.h>
 #include <linux/dirent.h>
 #undef dirent
diff --git a/process.c b/process.c
index dda3b9e..47fc87d 100644
--- a/process.c
+++ b/process.c
@@ -548,12 +548,18 @@
 		}
 		tcp->flags |= TCB_FOLLOWFORK;
 
-		tcp->u_arg[0] |= CLONE_PTRACE;
-		setarg(tcp, 0);
+
+		if (setbpt(tcp) < 0)
+			return 0;
 	} else {
+		int bpt = tcp->flags & TCB_BPTSET;
+
 		if (!(tcp->flags & TCB_FOLLOWFORK))
 			return 0;
 
+		if (bpt)
+			clearbpt(tcp);
+
 		if (syserror(tcp))
 			return 0;
 
@@ -564,10 +570,21 @@
 			return 0;
 		}
 
-		/* For fork we need to re-attach, but thanks to CLONE_PTRACE we're
-		 * already attached.
-		 */
+		/* Attach to the new child */
+		if (ptrace(PTRACE_ATTACH, pid, (char *) 1, 0) < 0) {
+			perror("PTRACE_ATTACH");
+			fprintf(stderr, "Too late?\n");
+			droptcb(tcpchild);
+			return 0;
+		}
+
 		tcpchild->flags |= TCB_ATTACHED;
+		if (bpt) {
+			tcpchild->flags |= TCB_BPTSET;
+			tcpchild->baddr = tcp->baddr;
+			memcpy(tcpchild->inst, tcp->inst,
+				sizeof tcpchild->inst);
+		}
 		newoutf(tcpchild);
 		tcp->nchildren++;
 		if (!qflag)
diff --git a/test/clone.c b/test/clone.c
index 1395b6b..75bc545 100644
--- a/test/clone.c
+++ b/test/clone.c
@@ -10,7 +10,7 @@
 main()
 {
     	char	stack[4096];
-	if (clone(child, stack+4000, CLONE_VM|CLONE_FS|CLONE_FILES, NULL) != 0)
-		write(1, "original\n", 9);
+	clone(child, stack+4000, CLONE_VM|CLONE_FS|CLONE_FILES, NULL);
+	write(1, "original\n", 9);
 	exit(0);
 }