9base

revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log | Files | Refs | README | LICENSE

read9pmsg.c (462B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <fcall.h>
      4 
      5 int
      6 read9pmsg(int fd, void *abuf, uint n)
      7 {
      8 	int m, len;
      9 	uchar *buf;
     10 
     11 	buf = abuf;
     12 
     13 	/* read count */
     14 	m = readn(fd, buf, BIT32SZ);
     15 	if(m != BIT32SZ){
     16 		if(m < 0)
     17 			return -1;
     18 		return 0;
     19 	}
     20 
     21 	len = GBIT32(buf);
     22 	if(len <= BIT32SZ || len > n){
     23 		werrstr("bad length in 9P2000 message header");
     24 		return -1;
     25 	}
     26 	len -= BIT32SZ;
     27 	m = readn(fd, buf+BIT32SZ, len);
     28 	if(m < len)
     29 		return 0;
     30 	return BIT32SZ+m;
     31 }