summaryrefslogtreecommitdiff
path: root/sys/src/cmd/rc/haventfork.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2016-05-16 00:37:49 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2016-05-16 00:37:49 +0200
commit4ad3f4f2fd225b0ac5c9f49e3c5713a5996becd3 (patch)
treef258b7b8dcec39737c000fab161bb2c166f6d71a /sys/src/cmd/rc/haventfork.c
parent45d6bca5f0c405a3fc3e485d23a52e980627988f (diff)
rc: remove historical unix and win32 ports
Diffstat (limited to 'sys/src/cmd/rc/haventfork.c')
-rw-r--r--sys/src/cmd/rc/haventfork.c217
1 files changed, 0 insertions, 217 deletions
diff --git a/sys/src/cmd/rc/haventfork.c b/sys/src/cmd/rc/haventfork.c
deleted file mode 100644
index 1e5aa0dc9..000000000
--- a/sys/src/cmd/rc/haventfork.c
+++ /dev/null
@@ -1,217 +0,0 @@
-#include "rc.h"
-#include "getflags.h"
-#include "exec.h"
-#include "io.h"
-#include "fns.h"
-
-int havefork = 0;
-
-static char **
-rcargv(char *s)
-{
- int argc;
- char **argv;
- word *p;
-
- p = vlook("*")->val;
- argv = emalloc((count(p)+6)*sizeof(char*));
- argc = 0;
- argv[argc++] = argv0;
- if(flag['e'])
- argv[argc++] = "-Se";
- else
- argv[argc++] = "-S";
- argv[argc++] = "-c";
- argv[argc++] = s;
- for(p = vlook("*")->val; p; p = p->next)
- argv[argc++] = p->word;
- argv[argc] = 0;
- return argv;
-}
-
-void
-Xasync(void)
-{
- uint pid;
- char buf[20], **argv;
-
- Updenv();
-
- argv = rcargv(runq->code[runq->pc].s);
- pid = ForkExecute(argv0, argv, -1, 1, 2);
- free(argv);
-
- if(pid == 0) {
- Xerror("proc failed");
- return;
- }
-
- runq->pc++;
- sprint(buf, "%d", pid);
- setvar("apid", newword(buf, (word *)0));
-}
-
-enum { Stralloc = 100, };
-
-void
-Xbackq(void)
-{
- char **argv;
- int c, l;
- char *s, *wd, *ewd, *stop;
- struct io *f;
- var *ifs = vlook("ifs");
- word *v, *nextv;
- int pfd[2];
- int pid;
-
- stop = ifs->val?ifs->val->word:"";
- if(pipe(pfd)<0){
- Xerror("can't make pipe");
- return;
- }
-
- Updenv();
-
- argv = rcargv(runq->code[runq->pc].s);
- pid = ForkExecute(argv0, argv, -1, pfd[1], 2);
- free(argv);
-
- close(pfd[1]);
-
- if(pid == 0) {
- Xerror("proc failed");
- close(pfd[0]);
- return;
- }
-
- f = openfd(pfd[0]);
- s = wd = ewd = 0;
- v = 0;
- while((c=rchr(f))!=EOF){
- if(s==ewd){
- l = s-wd;
- wd = erealloc(wd, l+Stralloc);
- ewd = wd+l+Stralloc-1;
- s = wd+l;
- }
- if(strchr(stop, c)){
- if(s!=wd){
- *s='\0';
- v = newword(wd, v);
- s = wd;
- }
- }
- else *s++=c;
- }
- if(s!=wd){
- *s='\0';
- v=newword(wd, v);
- }
- free(wd);
- closeio(f);
- Waitfor(pid, 1);
- /* v points to reversed arglist -- reverse it onto argv */
- while(v){
- nextv=v->next;
- v->next=runq->argv->words;
- runq->argv->words=v;
- v=nextv;
- }
- runq->pc++;
-}
-
-void
-Xpipe(void)
-{
- thread *p=runq;
- int pc=p->pc, pid;
- int rfd=p->code[pc+1].i;
- int pfd[2];
- char **argv;
-
- if(pipe(pfd)<0){
- Xerror1("can't get pipe");
- return;
- }
-
- Updenv();
-
- argv = rcargv(runq->code[pc+2].s);
- pid = ForkExecute(argv0, argv, 0, pfd[1], 2);
- free(argv);
- close(pfd[1]);
-
- if(pid == 0) {
- Xerror("proc failed");
- close(pfd[0]);
- return;
- }
-
- start(p->code, pc+4, runq->local);
- pushredir(ROPEN, pfd[0], rfd);
- p->pc=p->code[pc+3].i;
- p->pid=pid;
-}
-
-void
-Xpipefd(void)
-{
- Abort();
-}
-
-void
-Xsubshell(void)
-{
- char **argv;
- int pid;
-
- Updenv();
-
- argv = rcargv(runq->code[runq->pc].s);
- pid = ForkExecute(argv0, argv, -1, 1, 2);
- free(argv);
-
- if(pid < 0) {
- Xerror("proc failed");
- return;
- }
-
- Waitfor(pid, 1);
- runq->pc++;
-}
-
-/*
- * start a process running the cmd on the stack and return its pid.
- */
-int
-execforkexec(void)
-{
- char **argv;
- char file[1024];
- int nc, mc;
- word *path;
- int pid;
-
- if(runq->argv->words==0)
- return -1;
- argv = mkargv(runq->argv->words);
- mc = strlen(argv[1])+1;
- for(path = searchpath(runq->argv->words->word);path;path = path->next){
- nc = strlen(path->word);
- if(nc + mc >= sizeof file - 1) /* 1 for / */
- continue;
- if(nc > 0){
- memmove(file, path->word, nc);
- file[nc++] = '/';
- }
- memmove(file+nc, argv[1], mc);
- pid = ForkExecute(file, argv+1, mapfd(0), mapfd(1), mapfd(2));
- if(pid >= 0){
- free(argv);
- return pid;
- }
- }
- free(argv);
- return -1;
-}