|
Packit |
9f0df5 |
/*
|
|
Packit |
9f0df5 |
* Buffer handling functions
|
|
Packit |
9f0df5 |
*
|
|
Packit |
9f0df5 |
* Copyright (C) 2003, Olaf Kirch <okir@suse.de>
|
|
Packit |
9f0df5 |
*/
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
#include <config.h>
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
#ifdef HAVE_STRING_H
|
|
Packit |
9f0df5 |
#include <string.h>
|
|
Packit |
9f0df5 |
#endif
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
#include <openct/buffer.h>
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
void
|
|
Packit |
9f0df5 |
ct_buf_init(ct_buf_t *bp, void *mem, size_t len)
|
|
Packit |
9f0df5 |
{
|
|
Packit |
9f0df5 |
memset(bp, 0, sizeof(*bp));
|
|
Packit |
9f0df5 |
bp->base = (unsigned char *) mem;
|
|
Packit |
9f0df5 |
bp->size = len;
|
|
Packit |
9f0df5 |
}
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
void
|
|
Packit |
9f0df5 |
ct_buf_set(ct_buf_t *bp, void *mem, size_t len)
|
|
Packit |
9f0df5 |
{
|
|
Packit |
9f0df5 |
ct_buf_init(bp, mem, len);
|
|
Packit |
9f0df5 |
bp->tail = len;
|
|
Packit |
9f0df5 |
}
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
int
|
|
Packit |
9f0df5 |
ct_buf_get(ct_buf_t *bp, void *mem, size_t len)
|
|
Packit |
9f0df5 |
{
|
|
Packit |
9f0df5 |
if (len > bp->tail - bp->head)
|
|
Packit |
9f0df5 |
return -1;
|
|
Packit |
9f0df5 |
if (mem)
|
|
Packit |
9f0df5 |
memcpy(mem, bp->base + bp->head, len);
|
|
Packit |
9f0df5 |
bp->head += len;
|
|
Packit |
9f0df5 |
return len;
|
|
Packit |
9f0df5 |
}
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
int
|
|
Packit |
9f0df5 |
ct_buf_put(ct_buf_t *bp, const void *mem, size_t len)
|
|
Packit |
9f0df5 |
{
|
|
Packit |
9f0df5 |
if (len > bp->size - bp->tail) {
|
|
Packit |
9f0df5 |
bp->overrun = 1;
|
|
Packit |
9f0df5 |
return -1;
|
|
Packit |
9f0df5 |
}
|
|
Packit |
9f0df5 |
if (mem)
|
|
Packit |
9f0df5 |
memcpy(bp->base + bp->tail, mem, len);
|
|
Packit |
9f0df5 |
bp->tail += len;
|
|
Packit |
9f0df5 |
return len;
|
|
Packit |
9f0df5 |
}
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
int
|
|
Packit |
9f0df5 |
ct_buf_putc(ct_buf_t *bp, int byte)
|
|
Packit |
9f0df5 |
{
|
|
Packit |
9f0df5 |
unsigned char c = byte;
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
return ct_buf_put(bp, &c, 1);
|
|
Packit |
9f0df5 |
}
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
unsigned int
|
|
Packit |
9f0df5 |
ct_buf_avail(ct_buf_t *bp)
|
|
Packit |
9f0df5 |
{
|
|
Packit |
9f0df5 |
return bp->tail - bp->head;
|
|
Packit |
9f0df5 |
}
|
|
Packit |
9f0df5 |
|
|
Packit |
9f0df5 |
void *
|
|
Packit |
9f0df5 |
ct_buf_head(ct_buf_t *bp)
|
|
Packit |
9f0df5 |
{
|
|
Packit |
9f0df5 |
return bp->base + bp->head;
|
|
Packit |
9f0df5 |
}
|
|
Packit |
9f0df5 |
|