X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fq.c;h=def25ba997f262c3432faf6e62e153a4e3e56d07;hb=baf1f621c945198d5b54c5415a2a2b648adf51b6;hp=512e3d01a80f99322dc3d060d3078d49a369da8e;hpb=2e2252fba96c094b53475c87bc41f25fe6b946bb;p=swftools.git diff --git a/lib/q.c b/lib/q.c index 512e3d0..def25ba 100644 --- a/lib/q.c +++ b/lib/q.c @@ -68,7 +68,9 @@ static int mem_put_(mem_t*m,const void*data, int length, int null) int n = m->pos; m->pos += length + (null?1:0); if(m->pos > m->len) { - m->len = (m->pos+63)&~63; + int v1 = (m->pos+63)&~63; + int v2 = m->len + m->len / 2; + m->len = v1>v2?v1:v2; m->buffer = m->buffer?(char*)rfx_realloc(m->buffer,m->len):(char*)rfx_alloc(m->len); } assert(n+length <= m->len); @@ -85,6 +87,15 @@ int mem_putstring(mem_t*m,string_t str) { return mem_put_(m, str.str, str.len, 1); } +int mem_get(mem_t*m, void*data, int length) +{ + if(m->read_pos + length > m->pos) { + length = m->pos - m->read_pos; + } + memcpy(data, m->buffer+m->read_pos, length); + m->read_pos += length; + return length; +} // ------------------------------- ringbuffer_t ------------------------------- @@ -593,7 +604,7 @@ char ptr_equals(const void*o1, const void*o2) } unsigned int ptr_hash(const void*o) { - return string_hash3(o, sizeof(o)); + return string_hash3(&o, sizeof(o)); } void* ptr_dup(const void*o) {