Blame


1 19256e0d 2006-02-17 devnull #include <u.h>
2 19256e0d 2006-02-17 devnull #include <libc.h>
3 19256e0d 2006-02-17 devnull #include <thread.h>
4 19256e0d 2006-02-17 devnull #include <bio.h>
5 19256e0d 2006-02-17 devnull #include <ndb.h>
6 19256e0d 2006-02-17 devnull #include "dns.h"
7 19256e0d 2006-02-17 devnull
8 19256e0d 2006-02-17 devnull Waitmsg*
9 19256e0d 2006-02-17 devnull runprocfd(char *file, char **v, int fd[3])
10 19256e0d 2006-02-17 devnull {
11 19256e0d 2006-02-17 devnull int pid, i;
12 19256e0d 2006-02-17 devnull
13 19256e0d 2006-02-17 devnull threadwaitchan();
14 19256e0d 2006-02-17 devnull pid = threadspawn(fd, file, v);
15 19256e0d 2006-02-17 devnull for(i=0; i<3; i++)
16 19256e0d 2006-02-17 devnull close(fd[i]);
17 19256e0d 2006-02-17 devnull if(pid < 0)
18 19256e0d 2006-02-17 devnull return nil;
19 19256e0d 2006-02-17 devnull return procwait(pid);
20 19256e0d 2006-02-17 devnull }
21 19256e0d 2006-02-17 devnull
22 19256e0d 2006-02-17 devnull Waitmsg*
23 19256e0d 2006-02-17 devnull runproc(char *file, char **v, int devnull)
24 19256e0d 2006-02-17 devnull {
25 19256e0d 2006-02-17 devnull int fd[3], i;
26 19256e0d 2006-02-17 devnull
27 19256e0d 2006-02-17 devnull if(devnull){
28 19256e0d 2006-02-17 devnull fd[0] = open("/dev/null", ORDWR);
29 19256e0d 2006-02-17 devnull fd[1] = dup(1, fd[0]);
30 19256e0d 2006-02-17 devnull fd[2] = dup(2, fd[0]);
31 19256e0d 2006-02-17 devnull }else{
32 19256e0d 2006-02-17 devnull for(i=0; i<3; i++)
33 19256e0d 2006-02-17 devnull fd[i] = dup(i, -1);
34 19256e0d 2006-02-17 devnull }
35 19256e0d 2006-02-17 devnull return runprocfd(file, v, fd);
36 19256e0d 2006-02-17 devnull }