Import libbio Bfdopen function from plan9port. Notes: Thu Dec 15 13:59:08 EST 2011 geoff apparently no longer needed. Reference: /n/sources/patch/sorry/libbio-bfdopen Date: Tue Nov 15 10:03:16 CET 2011 Signed-off-by: djc@9grid.fr Reviewed-by: geoff --- /sys/src/libbio/binit.c Tue Nov 15 10:01:44 2011 +++ /sys/src/libbio/binit.c Tue Nov 15 10:01:38 2011 @@ -94,6 +94,19 @@ } Biobuf* +Bfdopen(int f, int mode) +{ + Biobuf *bp; + + bp = malloc(sizeof(Biobuf)); + if(bp == 0) + return 0; + Binits(bp, f, mode, bp->b, sizeof(bp->b)); + bp->flag = Bmagic; + return bp; +} + +Biobuf* Bopen(char *name, int mode) { Biobuf *bp; @@ -112,9 +125,9 @@ } if(f < 0) return 0; - bp = malloc(sizeof(Biobuf)); - Binits(bp, f, mode, bp->b, sizeof(bp->b)); - bp->flag = Bmagic; /* mark bp open & malloced */ + bp = Bfdopen(f, mode); + if(bp == 0) + close(f); return bp; } --- /sys/include/bio.h Tue Nov 15 10:01:53 2011 +++ /sys/include/bio.h Tue Nov 15 10:01:49 2011 @@ -48,6 +48,7 @@ #define BFILDES(bp) Bfildes(bp) int Bbuffered(Biobufhdr*); +Biobuf* Bfdopen(int, int); int Bfildes(Biobufhdr*); int Bflush(Biobufhdr*); int Bgetc(Biobufhdr*); --- /sys/man/2/bio Tue Nov 15 10:02:02 2011 +++ /sys/man/2/bio Tue Nov 15 10:01:57 2011 @@ -1,6 +1,6 @@ .TH BIO 2 .SH NAME -Bopen, Binit, Binits, Brdline, Brdstr, Bgetc, Bgetrune, Bgetd, Bungetc, Bungetrune, Bread, Bseek, Boffset, Bfildes, Blinelen, Bputc, Bputrune, Bprint, Bvprint, Bwrite, Bflush, Bterm, Bbuffered \- buffered input/output +Bopen, Bfdopen, Binit, Binits, Brdline, Brdstr, Bgetc, Bgetrune, Bgetd, Bungetc, Bungetrune, Bread, Bseek, Boffset, Bfildes, Blinelen, Bputc, Bputrune, Bprint, Bvprint, Bwrite, Bflush, Bterm, Bbuffered \- buffered input/output .SH SYNOPSIS .ta \w'Biobuf* 'u .B #include @@ -10,7 +10,10 @@ .B #include .PP .B -Biobuf* Bopen(char *file, int mode) +Biobuf* Bopen(char *file, int mode) +.PP +.B +Biobuf* Bfdopen(int fd, int mode) .PP .B int Binit(Biobuf *bp, int fd, int mode) @@ -88,6 +91,17 @@ for mode .B OREAD or creates for mode +.BR OWRITE . +It calls +.IR malloc (2) +to allocate a buffer. +.PP +.I Bfdopen +allocates a buffer for the already-open file descriptor +.I fd +for mode +.B OREAD +or .BR OWRITE . It calls .IR malloc (2)