Unified · Split
| @@ -10,36 +10,51 @@ typedef struct Exec Exec; · 9 unmodified lines | |||
| 10 | struct Exec { | 10 | struct Exec { |
| 11 | char *file; | 11 | char *file; |
| 12 | char **argv; | 12 | char **argv; |
| 13 | Channel *pid; | 13 | Channel *pidch; |
| 14 | }; | 14 | }; |
| 15 | 15 | ||
| 16 | void | 16 | void |
| 17 | pexec(void *args) | 17 | pexec(void *args) |
| 18 | { | 18 | { |
| 19 | Exec *e = args; | 19 | Exec *e = args; |
| 20 | procexec(e->pid, e->file, e->argv); | 20 | procexec(e->pidch, e->file, e->argv); |
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | static int | 23 | static int |
| 24 | fetchgit(char *url, char *rev, char *dir) | 24 | fetchgit(char *url, char *rev, char *dir) |
| 25 | { | 25 | { |
| 26 | char *argv[] = {"rc", "-c", nil, nil}; | ||
| 27 | Exec e; | 26 | Exec e; |
| 27 | char *argv[] = {"rc", "-c", smprint("git/clone %s %s", url, dir), nil}; | ||
| 28 | Channel *c = threadwaitchan(); | ||
| 29 | Waitmsg *w; | ||
| 30 | int pid, rpid; | ||
| 28 | 31 | ||
| 29 | e.file = "/bin/rc"; | ||
| 30 | e.argv = argv; | 32 | e.argv = argv; |
| 31 | e.pid = nil; | 33 | e.file = "/bin/rc"; |
| 32 | if(rev == nil) | 34 | e.pidch = chancreate(sizeof(int), 0); |
| 33 | argv[2] = smprint("git/clone %s %s", url, dir); | 35 | |
| 34 | else{ | 36 | if(rev != nil){ |
| 37 | free(argv[2]); | ||
| 35 | fprint(2, "FIXME git/clone %s rev %s\n", url, dir); | 38 | fprint(2, "FIXME git/clone %s rev %s\n", url, dir); |
| 36 | return -1; | 39 | return -1; |
| 37 | } | 40 | } |
| 38 | 41 | ||
| 39 | pexec(&e); | 42 | procrfork(pexec, &e, 0x2000, RFFDG); |
| 43 | recv(e.pidch, &pid); | ||
| 44 | chanfree(e.pidch); | ||
| 45 | if(pid < 0){ | ||
| 46 | fprint(2, "failed to spawn process\n"); | ||
| 47 | return -1; | ||
| 48 | } | ||
| 49 | w = recvp(c); | ||
| 40 | free(argv[2]); | 50 | free(argv[2]); |
| 41 | 51 | if(w == nil){ | |
| 42 | return -1; | 52 | fprint(2, "Receiving pid failed\n"); |
| 53 | return -1; | ||
| 54 | } | ||
| 55 | rpid = w->pid; | ||
| 56 | free(w); | ||
| 57 | return rpid == pid; | ||
| 43 | } | 58 | } |
| 44 | 59 | ||
| 45 | int | 60 | int |