ref: a194837a08fbac1792c9db77f5298a9a999ef6fb
parent: 7eb61c82c8f04b7f4a93ecbed287b48b51583620
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Wed Dec 9 11:33:46 EST 2020
OCEXEC, open page in the same window
--- a/main.c
+++ b/main.c
@@ -10,9 +10,13 @@
{
if(rfork(RFPROC|RFFDG|RFNOTEG|RFNOWAIT) == 0){
char tmp[32] = "/tmp/gem9XXXXXXXXXXX", *cmd;
+ int f;
mktemp(tmp);
- cmd = smprint("cat >%s >[2]/dev/null; page -w %s; rm %s", tmp, tmp, tmp);
+ cmd = smprint("cat >%s; page %s; rm %s", tmp, tmp, tmp);
dup(r->fd, 0); close(r->fd);
+ dup((f = open("/dev/null", OWRITE)), 1);
+ dup(f, 2);
+ close(f);
execl("/bin/rc", "rc", "-c", cmd, nil);
}
}
@@ -20,19 +24,20 @@
void
play(Response *r)
{
- int wfd;
- char *wsys, tmp[64];
-
if(rfork(RFPROC|RFFDG|RFNOTEG|RFNOWAIT) == 0){
+ int wfd, f;
+ char *wsys, tmp[64];
snprint(tmp, sizeof(tmp), "new -pid %d -dx %d -dy %d", getpid(), 640, 480);
if ((wsys = getenv("wsys")) == nil)
exits("no wsys");
- if ((wfd = open(wsys, ORDWR)) < 0 ||
+ if ((wfd = open(wsys, ORDWR|OCEXEC)) < 0 ||
mount(wfd, -1, "/mnt/wsys", MREPL, tmp) < 0 ||
bind("/mnt/wsys", "/dev", MBEFORE) < 0){
exits("wsys: %r");
}
dup(r->fd, 0); close(r->fd);
+ dup((f = open("/dev/null", OWRITE)), 1);
+ dup(f, 2);
execl("/bin/play", "play", nil);
}
}
@@ -98,8 +103,8 @@
fprint(2, "unsupported MIME %q\n", r->mime);
}else if(r->prompt != nil){
if(wait)
- close(open("/dev/text", OWRITE|OTRUNC));
- if((fd = open("/dev/consctl", OWRITE)) >= 0){
+ close(open("/dev/text", OWRITE|OTRUNC|OCEXEC));
+ if((fd = open("/dev/consctl", OWRITE|OCEXEC)) >= 0){
write(fd, "holdon", 6);
print("%s\n", r->prompt);
Binit(&body, 0, OREAD);
@@ -123,7 +128,7 @@
}
}else{
if(wait)
- close(open("/dev/text", OWRITE|OTRUNC));
+ close(open("/dev/text", OWRITE|OTRUNC|OCEXEC));
if(r->code < 20 || r->code >= 30){
if(r->code > 0)
fprint(2, "%U: %d %s\n", url, r->code, (r->meta && r->meta[0]) ? r->meta : r->status);