41 lines · 978 B · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ #include <u.h>#include <libc.h>#include <fcall.h> Waitmsg*wait(void){	int n, l;	char buf[512], *fld[5];	Waitmsg *w; 	n = await(buf, sizeof buf-1);	if(n < 0)		return nil;	buf[n] = '\0';	if(tokenize(buf, fld, nelem(fld)) != nelem(fld)){		werrstr("couldn't parse wait message");		return nil;	}	l = strlen(fld[4])+1;	w = malloc(sizeof(Waitmsg)+l);	if(w == nil)		return nil;	w->pid = atoi(fld[0]);	w->time[0] = atoi(fld[1]);	w->time[1] = atoi(fld[2]);	w->time[2] = atoi(fld[3]);	w->msg = (char*)&w[1];	memmove(w->msg, fld[4], l);	return w;}