Files
Cescal/core/readbuf.c
T

47 lines
794 B
C
Raw Normal View History

2026-05-23 01:28:05 -04:00
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause
*/
#include <stdint.h>
#include <stddef.h>
#include <errno.h>
#include <unistd.h>
#include "cescal/readbuf.h"
int
readbuf_init(struct readbuf *rb)
{
if (rb == NULL) {
errno = EINVAL;
return -1;
}
rb->size = 0;
rb->tail = 0;
return 0;
}
char
readbuf_read(struct readbuf *rb, int fd)
{
ssize_t nread = -1;
if (rb == NULL || fd < 0) {
errno = EINVAL;
return '\0';
}
#define N_RESIDUAL(rb) ((rb)->size - (rb)->tail)
if (N_RESIDUAL(rb) == 0 || rb->size == 0) {
if ((nread = read(fd, rb->buf, READBUF_CAP)) <= 0)
return nread;
rb->size = nread;
rb->tail = 0;
}
#undef N_RESIDUAL
return rb->buf[rb->tail++];
}