bio: add Bfdopen() from plan9port
This commit is contained in:
parent
4afb56f570
commit
035aacf6f5
3 changed files with 44 additions and 11 deletions
|
@ -53,7 +53,6 @@ install(Biobufhdr *bp)
|
|||
int
|
||||
Binits(Biobufhdr *bp, int f, int mode, uchar *p, int size)
|
||||
{
|
||||
|
||||
p += Bungetsize; /* make room for Bungets */
|
||||
size -= Bungetsize;
|
||||
|
||||
|
@ -94,29 +93,48 @@ Binit(Biobuf *bp, int f, int mode)
|
|||
return Binits(bp, f, mode, bp->b, sizeof(bp->b));
|
||||
}
|
||||
|
||||
Biobuf*
|
||||
Bfdopen(int fd, int mode)
|
||||
{
|
||||
Biobuf *bp;
|
||||
|
||||
bp = malloc(sizeof(Biobuf));
|
||||
if(bp == nil)
|
||||
return nil;
|
||||
if(Binits(bp, fd, mode, bp->b, sizeof(bp->b)) != 0){
|
||||
free(bp);
|
||||
return nil;
|
||||
}
|
||||
bp->flag = Bmagic; /* mark bp open & malloced */
|
||||
setmalloctag(bp, getcallerpc(&fd));
|
||||
return bp;
|
||||
}
|
||||
|
||||
Biobuf*
|
||||
Bopen(char *name, int mode)
|
||||
{
|
||||
Biobuf *bp;
|
||||
int f;
|
||||
int fd;
|
||||
|
||||
switch(mode&~(OCEXEC|ORCLOSE|OTRUNC)) {
|
||||
default:
|
||||
fprint(2, "Bopen: unknown mode %#x\n", mode);
|
||||
return 0;
|
||||
return nil;
|
||||
case OREAD:
|
||||
f = open(name, mode);
|
||||
fd = open(name, mode);
|
||||
break;
|
||||
case OWRITE:
|
||||
f = create(name, mode, 0666);
|
||||
fd = create(name, mode, 0666);
|
||||
break;
|
||||
}
|
||||
if(f < 0)
|
||||
return 0;
|
||||
bp = malloc(sizeof(Biobuf));
|
||||
if(fd < 0)
|
||||
return nil;
|
||||
bp = Bfdopen(fd, mode);
|
||||
if(bp == nil){
|
||||
close(fd);
|
||||
return nil;
|
||||
}
|
||||
setmalloctag(bp, getcallerpc(&name));
|
||||
Binits(bp, f, mode, bp->b, sizeof(bp->b));
|
||||
bp->flag = Bmagic; /* mark bp open & malloced */
|
||||
return bp;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue