Blob
1 #include <u.h>2 #include <libc.h>4 static Waitmsg*5 _wait(int n, char *buf)6 {7 int l;8 char *fld[5];9 Waitmsg *w;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 }31 Waitmsg*32 wait(void)33 {34 char buf[256];36 return _wait(await(buf, sizeof buf-1), buf);37 }39 Waitmsg*40 waitnohang(void)41 {42 char buf[256];44 return _wait(awaitnohang(buf, sizeof buf-1), buf);45 }47 Waitmsg*48 waitfor(int pid)49 {50 char buf[256];52 return _wait(awaitfor(pid, buf, sizeof buf-1), buf);53 }