Add buf_put_ios() utility function
Fills a "struct buf" with the entire remainder of a stream.
This commit is contained in:
parent
a6ecac95e1
commit
44a8208d38
16
c/buf.c
16
c/buf.c
|
@ -7,6 +7,9 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dtypes.h"
|
||||
#include "ios.h"
|
||||
|
||||
#include "buf.h"
|
||||
|
||||
struct buf *buf_new(void) { return calloc(1, sizeof(struct buf)); }
|
||||
|
@ -28,6 +31,19 @@ char *buf_resb(struct buf *buf, size_t nbyte)
|
|||
return place;
|
||||
}
|
||||
|
||||
void buf_put_ios(struct buf *buf, struct ios *ios)
|
||||
{
|
||||
const size_t chunksize = 512;
|
||||
size_t nread;
|
||||
char *chunk;
|
||||
|
||||
do {
|
||||
chunk = buf_resb(buf, chunksize);
|
||||
nread = ios_readall(ios, chunk, chunksize);
|
||||
buf->fill -= (chunksize - nread);
|
||||
} while (nread);
|
||||
}
|
||||
|
||||
void buf_putc(struct buf *buf, int c) { buf_resb(buf, 1)[0] = c; }
|
||||
|
||||
void buf_putb(struct buf *buf, const void *bytes, size_t nbyte)
|
||||
|
|
1
c/buf.h
1
c/buf.h
|
@ -9,6 +9,7 @@ struct buf {
|
|||
|
||||
struct buf *buf_new(void);
|
||||
char *buf_resb(struct buf *buf, size_t nbyte);
|
||||
void buf_put_ios(struct buf *buf, struct ios *ios);
|
||||
void buf_putc(struct buf *buf, int c);
|
||||
void buf_putb(struct buf *buf, const void *bytes, size_t nbyte);
|
||||
void buf_puts(struct buf *buf, const char *s);
|
||||
|
|
Loading…
Reference in New Issue