wait.c (813B)
1 #include <u.h> 2 #include <libc.h> 3 4 static Waitmsg* 5 _wait(int n, char *buf) 6 { 7 int l; 8 char *fld[5]; 9 Waitmsg *w; 10 11 if(n <= 0) 12 return nil; 13 buf[n] = '\0'; 14 if(tokenize(buf, fld, nelem(fld)) != nelem(fld)){ 15 werrstr("couldn't parse wait message"); 16 return nil; 17 } 18 l = strlen(fld[4])+1; 19 w = malloc(sizeof(Waitmsg)+l); 20 if(w == nil) 21 return nil; 22 w->pid = atoi(fld[0]); 23 w->time[0] = atoi(fld[1]); 24 w->time[1] = atoi(fld[2]); 25 w->time[2] = atoi(fld[3]); 26 w->msg = (char*)&w[1]; 27 memmove(w->msg, fld[4], l); 28 return w; 29 } 30 31 Waitmsg* 32 wait(void) 33 { 34 char buf[256]; 35 36 return _wait(await(buf, sizeof buf-1), buf); 37 } 38 39 Waitmsg* 40 waitnohang(void) 41 { 42 char buf[256]; 43 44 return _wait(awaitnohang(buf, sizeof buf-1), buf); 45 } 46 47 Waitmsg* 48 waitfor(int pid) 49 { 50 char buf[256]; 51 52 return _wait(awaitfor(pid, buf, sizeof buf-1), buf); 53 } 54