acme: use threadspawnd to avoid changing "." of current process
R=rsc http://codereview.appspot.com/6736060
This commit is contained in:
parent
9e4b56e764
commit
9ca6e21f3d
1 changed files with 8 additions and 29 deletions
|
|
@ -1352,7 +1352,6 @@ runproc(void *argvp)
|
||||||
int sfd[3];
|
int sfd[3];
|
||||||
int pipechar;
|
int pipechar;
|
||||||
char buf[512];
|
char buf[512];
|
||||||
int olddir;
|
|
||||||
int ret;
|
int ret;
|
||||||
/*static void *parg[2]; */
|
/*static void *parg[2]; */
|
||||||
char *rcarg[4];
|
char *rcarg[4];
|
||||||
|
|
@ -1507,24 +1506,11 @@ runproc(void *argvp)
|
||||||
av[ac] = nil;
|
av[ac] = nil;
|
||||||
c->av = av;
|
c->av = av;
|
||||||
|
|
||||||
/*
|
dir = nil;
|
||||||
* clumsy -- we're not running in a separate thread
|
if(rdir != nil)
|
||||||
* so we have to save the current directory and put
|
|
||||||
* it back when we're done. if this gets to be a regular
|
|
||||||
* thing we could change threadexec to take a directory too.
|
|
||||||
*/
|
|
||||||
olddir = -1;
|
|
||||||
if(rdir != nil){
|
|
||||||
olddir = open(".", OREAD);
|
|
||||||
dir = runetobyte(rdir, ndir);
|
dir = runetobyte(rdir, ndir);
|
||||||
chdir(dir); /* ignore error: probably app. window */
|
ret = threadspawnd(sfd, av[0], av, dir);
|
||||||
free(dir);
|
free(dir);
|
||||||
}
|
|
||||||
ret = threadspawn(sfd, av[0], av);
|
|
||||||
if(olddir >= 0){
|
|
||||||
fchdir(olddir);
|
|
||||||
close(olddir);
|
|
||||||
}
|
|
||||||
if(ret >= 0){
|
if(ret >= 0){
|
||||||
if(cpid)
|
if(cpid)
|
||||||
sendul(cpid, ret);
|
sendul(cpid, ret);
|
||||||
|
|
@ -1572,13 +1558,9 @@ Hard:
|
||||||
c->text = news;
|
c->text = news;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
olddir = -1;
|
dir = nil;
|
||||||
if(rdir != nil){
|
if(rdir != nil)
|
||||||
olddir = open(".", OREAD);
|
|
||||||
dir = runetobyte(rdir, ndir);
|
dir = runetobyte(rdir, ndir);
|
||||||
chdir(dir); /* ignore error: probably app. window */
|
|
||||||
free(dir);
|
|
||||||
}
|
|
||||||
shell = acmeshell;
|
shell = acmeshell;
|
||||||
if(shell == nil)
|
if(shell == nil)
|
||||||
shell = "rc";
|
shell = "rc";
|
||||||
|
|
@ -1586,11 +1568,8 @@ Hard:
|
||||||
rcarg[1] = "-c";
|
rcarg[1] = "-c";
|
||||||
rcarg[2] = t;
|
rcarg[2] = t;
|
||||||
rcarg[3] = nil;
|
rcarg[3] = nil;
|
||||||
ret = threadspawn(sfd, rcarg[0], rcarg);
|
ret = threadspawnd(sfd, rcarg[0], rcarg, dir);
|
||||||
if(olddir >= 0){
|
free(dir);
|
||||||
fchdir(olddir);
|
|
||||||
close(olddir);
|
|
||||||
}
|
|
||||||
if(ret >= 0){
|
if(ret >= 0){
|
||||||
if(cpid)
|
if(cpid)
|
||||||
sendul(cpid, ret);
|
sendul(cpid, ret);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue