31 lines · 462 B · C
RawDownload
#include <u.h>#include <libc.h>#include <fcall.h> intread9pmsg(int fd, void *abuf, uint n){	int m, len;	uchar *buf; 	buf = abuf; 	/* read count */	m = readn(fd, buf, BIT32SZ);	if(m != BIT32SZ){		if(m < 0)			return -1;		return 0;	} 	len = GBIT32(buf);	if(len <= BIT32SZ || len > n){		werrstr("bad length in 9P2000 message header");		return -1;	}	len -= BIT32SZ;	m = readn(fd, buf+BIT32SZ, len);	if(m < len)		return 0;	return BIT32SZ+m;}