Commit Diff


commit - 683c5e534ad7902669f8d92537f9e370380248de
commit + 1c8efa18ee49ae70138ae4cbc7b9fff5c17a89c8
blob - 5aa5c449efbc10d123d6222e15dbd796caca607e
blob + 4105e8788bac632ac3fa72c1a974873af6ffa020
--- src/lib9/dirread.c
+++ src/lib9/dirread.c
@@ -50,8 +50,7 @@ countde(char *p, int n)
 			de->d_name[0] = 0;
 		else if(de->d_name[0]=='.' && de->d_name[1]=='.' && de->d_name[2]==0)
 			de->d_name[0] = 0;
-		else
-			m++;
+		m++;
 		p += de->d_reclen;
 	}
 	return m;
@@ -78,9 +77,12 @@ dirpackage(int fd, char *buf, int n, Dir **dp)
 		
 	p = buf;
 	nstr = 0;
+
 	for(i=0; i<n; i++){
 		de = (struct dirent*)p;
-		if(stat(de->d_name, &st) < 0)
+		if(de->d_name[0] == 0)
+			/* nothing */ {}
+		else if(stat(de->d_name, &st) < 0)
 			de->d_name[0] = 0;
 		else
 			nstr += _p9dir(&st, de->d_name, nil, nil, nil);
blob - 41d3f9d6fea27e46d7f2e494840b41785d908bc4
blob + 270c3cddf04043ca3151ea2bccf28094132b0cca
--- src/lib9/rfork.c
+++ src/lib9/rfork.c
@@ -4,6 +4,20 @@
 int
 p9rfork(int flags)
 {
+	int pid;
+
+	if((flags&(RFPROC|RFFDG|RFMEM)) == (RFPROC|RFFDG)){
+		/* check other flags before we commit */
+		flags &= ~(RFPROC|RFFDG);
+		if(flags & ~(RFNOTEG)){
+			werrstr("unknown flags %08ux in rfork", flags);
+			return -1;
+		}
+		pid = fork();
+		if(pid != 0)
+			return pid;
+	}
+
 	if(flags&RFPROC){
 		werrstr("cannot use rfork to fork -- use ffork");
 		return -1;