diff options
author | rsc <devnull@localhost> | 2005-01-04 22:41:27 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-01-04 22:41:27 +0000 |
commit | 9aa1c92f743a7bf2ac0b062b0c075dc610b3e335 (patch) | |
tree | e3be39332a1893959b3257aa797a65740fc1c1ec /src/cmd/mk/unix.c | |
parent | 02f38ca68ce484b2aad15fad4d59c4d43ef7eb1b (diff) | |
download | plan9port-9aa1c92f743a7bf2ac0b062b0c075dc610b3e335.tar.gz plan9port-9aa1c92f743a7bf2ac0b062b0c075dc610b3e335.tar.bz2 plan9port-9aa1c92f743a7bf2ac0b062b0c075dc610b3e335.zip |
add new | syntax.
syntax will change.
Diffstat (limited to 'src/cmd/mk/unix.c')
-rw-r--r-- | src/cmd/mk/unix.c | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/src/cmd/mk/unix.c b/src/cmd/mk/unix.c index 9e4fcea9..97356105 100644 --- a/src/cmd/mk/unix.c +++ b/src/cmd/mk/unix.c @@ -51,7 +51,7 @@ readenv(void) * to exec immediately after this. */ void -exportenv(Envy *e) +exportenv(Envy *e, Shell *sh) { int i; char **p; @@ -61,7 +61,7 @@ exportenv(Envy *e) for(i = 0; e->name; e++, i++) { p = (char**) Realloc(p, (i+2)*sizeof(char*)); if(e->values) - snprint(buf, sizeof buf, "%s=%s", e->name, wtos(e->values, IWS)); + snprint(buf, sizeof buf, "%s=%s", e->name, wtos(e->values, sh->iws)); else snprint(buf, sizeof buf, "%s=", e->name); p[i] = strdup(buf); @@ -102,9 +102,29 @@ expunge(int pid, char *msg) int mypid; int -execsh(char *args, char *cmd, Bufblock *buf, Envy *e) +shargv(Word *cmd, int extra, char ***pargv) { - char *p; + char **argv; + int i, n; + Word *w; + + n = 0; + for(w=cmd; w; w=w->next) + n++; + + argv = Malloc((n+extra+1)*sizeof(argv[0])); + i = 0; + for(w=cmd; w; w=w->next) + argv[i++] = w->s; + argv[n] = 0; + *pargv = argv; + return n; +} + +int +execsh(char *args, char *cmd, Bufblock *buf, Envy *e, Shell *sh, Word *shellcmd) +{ + char *p, **argv; int tot, n, pid, in[2], out[2]; if(buf && pipe(out) < 0){ @@ -138,11 +158,11 @@ execsh(char *args, char *cmd, Bufblock *buf, Envy *e) close(in[0]); close(in[1]); if (e) - exportenv(e); - if(shflags) - execl(shell, shellname, shflags, args, 0); - else - execl(shell, shellname, args, 0); + exportenv(e, sh); + n = shargv(shellcmd, 1, &argv); + argv[n++] = args; + argv[n] = 0; + execvp(argv[0], argv); mkperror(shell); _exit(1); } @@ -180,9 +200,11 @@ execsh(char *args, char *cmd, Bufblock *buf, Envy *e) } int -pipecmd(char *cmd, Envy *e, int *fd) +pipecmd(char *cmd, Envy *e, int *fd, Shell *sh, Word *shellcmd) { int pid, pfd[2]; + int n; + char **argv; if(DEBUG(D_EXEC)) fprint(1, "pipecmd='%s'\n", cmd);/**/ @@ -203,11 +225,12 @@ pipecmd(char *cmd, Envy *e, int *fd) close(pfd[1]); } if(e) - exportenv(e); - if(shflags) - execl(shell, shellname, shflags, "-c", cmd, 0); - else - execl(shell, shellname, "-c", cmd, 0); + exportenv(e, sh); + n = shargv(shellcmd, 2, &argv); + argv[n++] = "-c"; + argv[n++] = cmd; + argv[n] = 0; + execvp(argv[0], argv); mkperror(shell); _exit(1); } |