X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Ffastbuf.h;h=cd08fa8a9b88839800729f81cde5141850d2cbd8;hb=995458e48d482bd5fa349882fba5cb4d6350076d;hp=01e7f60a28f05a154c3c7996b08f164c9a4013d4;hpb=bdaf9c7ed7ca3611e4d2c2262422517720deff95;p=libucw.git diff --git a/lib/fastbuf.h b/lib/fastbuf.h index 01e7f60a..cd08fa8a 100644 --- a/lib/fastbuf.h +++ b/lib/fastbuf.h @@ -268,7 +268,7 @@ static inline void bput5(struct fastbuf *f, u64 l) bput5_slow(f, l); } -uns bread_slow(struct fastbuf *f, void *b, uns l); +uns bread_slow(struct fastbuf *f, void *b, uns l, uns check); static inline uns bread(struct fastbuf *f, void *b, uns l) { if (f->bptr + l <= f->bstop) @@ -278,7 +278,19 @@ static inline uns bread(struct fastbuf *f, void *b, uns l) return l; } else - return bread_slow(f, b, l); + return bread_slow(f, b, l, 0); +} + +static inline uns breadb(struct fastbuf *f, void *b, uns l) +{ + if (f->bptr + l <= f->bstop) + { + memcpy(b, f->bptr, l); + f->bptr += l; + return l; + } + else + return bread_slow(f, b, l, 1); } void bwrite_slow(struct fastbuf *f, void *b, uns l); @@ -294,6 +306,7 @@ static inline void bwrite(struct fastbuf *f, void *b, uns l) } byte *bgets(struct fastbuf *f, byte *b, uns l); /* Non-std */ +byte *bgets0(struct fastbuf *f, byte *b, uns l); static inline void bputs(struct fastbuf *f, byte *b) @@ -327,11 +340,15 @@ void bdirect_write_commit(struct fastbuf *f, byte *pos); #define bputo(f,l) bput5(f,l) #define bgetp(f) bgetq(f) #define bputp(f,l) bputq(f,l) +#define FASTBUF_BYTES_PER_O 5 +#define FASTBUF_BYTES_PER_P 8 #else #define bgeto(f) bgetl(f) #define bputo(f,l) bputl(f,l) #define bgetp(f) bgetl(f) #define bputp(f,l) bputl(f,l) +#define FASTBUF_BYTES_PER_O 4 +#define FASTBUF_BYTES_PER_P 4 #endif #endif