success on the sun
diff --git a/src/cmd/rc/unixcrap.c b/src/cmd/rc/unixcrap.c
index 3a4dd2c..9866048 100644
--- a/src/cmd/rc/unixcrap.c
+++ b/src/cmd/rc/unixcrap.c
@@ -17,13 +17,29 @@
 	RLIMIT_CORE,
 	RLIMIT_DATA,
 	RLIMIT_FSIZE,
+#ifdef RLIMIT_MEMLOCK
 	RLIMIT_MEMLOCK,
+#else
+	0,
+#endif
+#ifdef RLIMIT_RSS
 	RLIMIT_RSS,
+#else
+	0,
+#endif
 	RLIMIT_NOFILE,
 	RLIMIT_STACK,
 	RLIMIT_CPU,
+#ifdef RLIMIT_NPROC
 	RLIMIT_NPROC,
+#else
+	0,
+#endif
+#ifdef RLIMIT_RSS
 	RLIMIT_RSS,
+#else
+	0,
+#endif
 };
 
 static void
diff --git a/src/lib9/await.c b/src/lib9/await.c
index f0235a9..7d0ca91 100644
--- a/src/lib9/await.c
+++ b/src/lib9/await.c
@@ -82,7 +82,11 @@
 	ulong u, s;
 
 	for(;;){
-		pid = wait4(pid4, &status, opt, &ru);
+		/* On Linux, pid==-1 means anyone; on SunOS, it's pid==0. */
+		if(pid4 == -1)
+			pid = wait3(&status, opt, &ru);
+		else
+			pid = wait4(pid4, &status, opt, &ru);
 		if(pid <= 0)
 			return -1;
 		u = ru.ru_utime.tv_sec*1000+((ru.ru_utime.tv_usec+500)/1000);
diff --git a/src/lib9/post9p.c b/src/lib9/post9p.c
index ddedf62..44c0943 100644
--- a/src/lib9/post9p.c
+++ b/src/lib9/post9p.c
@@ -10,6 +10,7 @@
 
 	if((ns = getns()) == nil)
 		return -1;
+
 	s = smprint("unix!%s/%s", ns, name);
 	free(ns);
 	if(s == nil)
@@ -27,6 +28,8 @@
 		_exits("exec");
 	default:
 		w = wait();
+		if(w == nil)
+			return -1;
 		close(fd);
 		free(s);
 		if(w->msg && w->msg[0]){