Fix size computation failure

Add function for appending a htsbuf_queue to another
This commit is contained in:
Andreas Öman 2010-06-21 18:55:01 +00:00
parent a9be3cbef3
commit 839244f637
2 changed files with 32 additions and 1 deletions

View file

@ -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);
}
}

View file

@ -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);