Fix size computation failure
Add function for appending a htsbuf_queue to another
This commit is contained in:
parent
a9be3cbef3
commit
839244f637
2 changed files with 32 additions and 1 deletions
28
src/htsbuf.c
28
src/htsbuf.c
|
@ -47,6 +47,18 @@ htsbuf_queue_init(htsbuf_queue_t *hq, unsigned int maxsize)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
htsbuf_queue_t *
|
||||
htsbuf_queue_alloc(unsigned int maxsize)
|
||||
{
|
||||
htsbuf_queue_t *hq = malloc(sizeof(htsbuf_queue_t));
|
||||
htsbuf_queue_init(hq, maxsize);
|
||||
return hq;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -218,7 +230,8 @@ htsbuf_drop(htsbuf_queue_t *hq, size_t len)
|
|||
c = MIN(hd->hd_data_len - hd->hd_data_off, len);
|
||||
len -= c;
|
||||
hd->hd_data_off += c;
|
||||
|
||||
hq->hq_size -= c;
|
||||
|
||||
if(hd->hd_data_off == hd->hd_data_len)
|
||||
htsbuf_data_free(hq, hd);
|
||||
}
|
||||
|
@ -249,3 +262,16 @@ htsbuf_qprintf(htsbuf_queue_t *hq, const char *fmt, ...)
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
htsbuf_appendq(htsbuf_queue_t *hq, htsbuf_queue_t *src)
|
||||
{
|
||||
htsbuf_data_t *hd;
|
||||
|
||||
hq->hq_size += src->hq_size;
|
||||
src->hq_size = 0;
|
||||
|
||||
while((hd = TAILQ_FIRST(&src->hq_q)) != NULL) {
|
||||
TAILQ_REMOVE(&src->hq_q, hd, hd_link);
|
||||
TAILQ_INSERT_TAIL(&hq->hq_q, hd, hd_link);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#define HTSBUF_H__
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include "queue.h"
|
||||
#include <inttypes.h>
|
||||
|
||||
|
@ -41,6 +42,8 @@ typedef struct htsbuf_queue {
|
|||
|
||||
void htsbuf_queue_init(htsbuf_queue_t *hq, unsigned int maxsize);
|
||||
|
||||
htsbuf_queue_t *htsbuf_queue_alloc(unsigned int maxsize);
|
||||
|
||||
void htsbuf_queue_flush(htsbuf_queue_t *hq);
|
||||
|
||||
void htsbuf_vqprintf(htsbuf_queue_t *hq, const char *fmt, va_list ap);
|
||||
|
@ -51,6 +54,8 @@ void htsbuf_append(htsbuf_queue_t *hq, const void *buf, size_t len);
|
|||
|
||||
void htsbuf_append_prealloc(htsbuf_queue_t *hq, const void *buf, size_t len);
|
||||
|
||||
void htsbuf_appendq(htsbuf_queue_t *hq, htsbuf_queue_t *src);
|
||||
|
||||
void htsbuf_data_free(htsbuf_queue_t *hq, htsbuf_data_t *hd);
|
||||
|
||||
size_t htsbuf_read(htsbuf_queue_t *hq, void *buf, size_t len);
|
||||
|
|
Loading…
Add table
Reference in a new issue