void case_buf_isempty() { struct buf *buf1 = buf("test"); struct buf *buf2 = buf(NULL); assert(!buf_isempty(buf1)); assert(buf_isempty(buf2)); buf_free(buf1); buf_free(buf2); }
int Dequeue(RingBuffer* buf, uint8_t *data) { if(buf_isempty(buf)) { printf("buf is empty\n"); } else { *data = buf_get_byte(buf); printf("Dequeue: %d\n\n", *data); } return 1; }
/*-------------------------------------------------------------------------*\ * Return any data available in buffer, or get more data from transport layer * if buffer is empty \*-------------------------------------------------------------------------*/ static int buf_get(p_buf buf, const char **data, size_t *count) { int err = IO_DONE; p_io io = buf->io; p_tm tm = buf->tm; if (buf_isempty(buf)) { size_t got; err = io->recv(io->ctx, buf->data, BUF_SIZE, &got, tm); buf->first = 0; buf->last = got; } *count = buf->last - buf->first; *data = buf->data + buf->first; return err; }
/*-------------------------------------------------------------------------*\ * Skips a given number of bytes from read buffer. No data is read from the * transport layer \*-------------------------------------------------------------------------*/ static void buf_skip(p_buf buf, size_t count) { buf->received += count; buf->first += count; if (buf_isempty(buf)) buf->first = buf->last = 0; }