shithub: riscv

Download patch

ref: 65977417e7cc5919f7c9787f97a528e8c24d2423
parent: d39d1a5303541539f61488317b220c1eb724d7d3
author: cinap_lenrek <[email protected]>
date: Wed Jun 29 20:45:37 EDT 2016

rc: write /dev/wdir after printing the prompt, not after executing "cd" command

--- a/sys/src/cmd/rc/lex.c
+++ b/sys/src/cmd/rc/lex.c
@@ -92,6 +92,16 @@
 	if(runq->iflag){
 		pstr(err, promptstr);
 		flush(err);
+		if(newwdir){
+			char dir[4096];
+			int fd;
+			if((fd=open("/dev/wdir", OWRITE))>=0){
+				getwd(dir, sizeof(dir));
+				write(fd, dir, strlen(dir));
+				close(fd);
+			}
+			newwdir = 0;
+		}
 		prompt = vlook("prompt");
 		if(prompt->val && prompt->val->next)
 			promptstr = prompt->val->next->word;
--- a/sys/src/cmd/rc/rc.h
+++ b/sys/src/cmd/rc/rc.h
@@ -65,6 +65,7 @@
 	char	*s;
 };
 
+int newwdir;
 char *promptstr;
 int doprompt;
 
--- a/sys/src/cmd/rc/simple.c
+++ b/sys/src/cmd/rc/simple.c
@@ -139,14 +139,9 @@
 dochdir(char *word)
 {
 	/* report to /dev/wdir if it exists and we're interactive */
-	if(chdir(word)<0) return -1;
-	if(flag['i']!=0){
-		static int wdirfd = -2;
-		if(wdirfd==-2)	/* try only once */
-			wdirfd = open("/dev/wdir", OWRITE|OCEXEC);
-		if(wdirfd>=0)
-			write(wdirfd, word, strlen(word));
-	}
+	if(chdir(word)<0)
+		return -1;
+	newwdir = 1;
 	return 1;
 }