7ceff03db3
Bread() always reads exactly nbytes of data if it can. only when it reaches end of file or an error it will return less. so the Breadn() function that was introduced has been removed. sorry for the confusion.
77 lines
1.9 KiB
C
77 lines
1.9 KiB
C
#pragma src "/sys/src/libbio"
|
|
#pragma lib "libbio.a"
|
|
|
|
typedef struct Biobuf Biobuf;
|
|
typedef struct Biobufhdr Biobufhdr;
|
|
|
|
enum
|
|
{
|
|
Bsize = 8*1024,
|
|
Bungetsize = 4, /* space for ungetc */
|
|
Bmagic = 0x314159,
|
|
Beof = -1,
|
|
Bbad = -2,
|
|
|
|
Binactive = 0, /* states */
|
|
Bractive,
|
|
Bwactive,
|
|
Bracteof,
|
|
};
|
|
|
|
struct Biobufhdr
|
|
{
|
|
int icount; /* neg num of bytes at eob */
|
|
int ocount; /* num of bytes at bob */
|
|
int rdline; /* num of bytes after rdline */
|
|
int runesize; /* num of bytes of last getrune */
|
|
int state; /* r/w/inactive */
|
|
int fid; /* open file */
|
|
int flag; /* magic if malloc'ed */
|
|
vlong offset; /* offset of buffer in file */
|
|
int bsize; /* size of buffer */
|
|
uchar* bbuf; /* pointer to beginning of buffer */
|
|
uchar* ebuf; /* pointer to end of buffer */
|
|
uchar* gbuf; /* pointer to good data in buf */
|
|
void (*errorf)(char *); /* called on error if not nil */
|
|
};
|
|
|
|
struct Biobuf
|
|
{
|
|
Biobufhdr;
|
|
uchar b[Bungetsize+Bsize];
|
|
};
|
|
|
|
/* Dregs, redefined as functions for backwards compatibility */
|
|
#define BGETC(bp) Bgetc(bp)
|
|
#define BPUTC(bp,c) Bputc(bp,c)
|
|
#define BOFFSET(bp) Boffset(bp)
|
|
#define BLINELEN(bp) Blinelen(bp)
|
|
#define BFILDES(bp) Bfildes(bp)
|
|
|
|
int Bbuffered(Biobufhdr*);
|
|
int Bfildes(Biobufhdr*);
|
|
int Bflush(Biobufhdr*);
|
|
int Bgetc(Biobufhdr*);
|
|
int Bgetd(Biobufhdr*, double*);
|
|
long Bgetrune(Biobufhdr*);
|
|
int Binit(Biobuf*, int, int);
|
|
int Binits(Biobufhdr*, int, int, uchar*, int);
|
|
int Blinelen(Biobufhdr*);
|
|
vlong Boffset(Biobufhdr*);
|
|
Biobuf* Bopen(char*, int);
|
|
int Bprint(Biobufhdr*, char*, ...);
|
|
int Bvprint(Biobufhdr*, char*, va_list);
|
|
int Bputc(Biobufhdr*, int);
|
|
int Bputrune(Biobufhdr*, long);
|
|
void* Brdline(Biobufhdr*, int);
|
|
char* Brdstr(Biobufhdr*, int, int);
|
|
long Bread(Biobufhdr*, void*, long);
|
|
vlong Bseek(Biobufhdr*, vlong, int);
|
|
int Bterm(Biobufhdr*);
|
|
int Bungetc(Biobufhdr*);
|
|
int Bungetrune(Biobufhdr*);
|
|
long Bwrite(Biobufhdr*, void*, long);
|
|
void Blethal(Biobufhdr*, void(*)(char*));
|
|
void Berror(Biobufhdr*, char*, ...);
|
|
|
|
#pragma varargck argpos Bprint 2
|