Fix small bugs.
diff --git a/src/cmd/ls.C b/src/cmd/ls.C
index de2bee9..8bdeab6 100644
--- a/src/cmd/ls.C
+++ b/src/cmd/ls.C
@@ -101,6 +101,8 @@
 		return 1;
 	}
 	if(db->qid.type&QTDIR && dflag==0){
+		free(db);
+		db = nil;
 		output();
 		fd = open(s, OREAD);
 		if(fd == -1)
diff --git a/src/cmd/rc/plan9ish.c b/src/cmd/rc/plan9ish.c
index 2b9011c..6644778 100644
--- a/src/cmd/rc/plan9ish.c
+++ b/src/cmd/rc/plan9ish.c
@@ -71,7 +71,7 @@
 		for(s=*env;*s && *s!='(' && *s!='=';s++);
 		switch(*s){
 		case '\0':
-			pfmt(err, "rc: odd environment %q?\n", *env);
+		//	pfmt(err, "rc: odd environment %q?\n", *env);
 			break;
 		case '=':
 			*s='\0';
diff --git a/src/cmd/time.c b/src/cmd/time.c
index d82eaa9..3b52216 100644
--- a/src/cmd/time.c
+++ b/src/cmd/time.c
@@ -11,6 +11,7 @@
 {
 	int i;
 	Waitmsg *w;
+	vlong t0, t1;
 	long l;
 	char *p;
 	char err[ERRMAX];
@@ -20,6 +21,7 @@
 		exits("usage");
 	}
 
+	t0 = nsec();
 	switch(fork()){
 	case -1:
 		error("fork");
@@ -37,8 +39,9 @@
 
     loop:
 	w = wait();
+	t1 = nsec();
 	if(w == nil){
-		errstr(err, sizeof err);
+		rerrstr(err, sizeof err);
 		if(strcmp(err, "interrupted") == 0)
 			goto loop;
 		error("wait");
@@ -47,7 +50,7 @@
 	add("%ld.%.2ldu", l/1000, (l%1000)/10);
 	l = w->time[1];
 	add("%ld.%.2lds", l/1000, (l%1000)/10);
-	l = w->time[2];
+	l = (t1-t0)/1000000;
 	add("%ld.%.2ldr", l/1000, (l%1000)/10);
 	add("\t");
 	for(i=1; i<argc; i++){