Mercurial > mplayer.hg
changeset 30754:dff9ee89b7c1
Move stream_read_line implementation from stream.h to stream.c,
it is not speed critical and the function call overhead is not
relevant for its overall speed anyway.
author | reimar |
---|---|
date | Sun, 28 Feb 2010 13:54:55 +0000 |
parents | 7c412873705e |
children | 4e654b2e4517 |
files | stream/stream.c stream/stream.h |
diffstat | 2 files changed, 27 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/stream/stream.c Sun Feb 28 12:54:12 2010 +0000 +++ b/stream/stream.c Sun Feb 28 13:54:55 2010 +0000 @@ -487,3 +487,29 @@ if(!stream_check_interrupt_cb) return 0; return stream_check_interrupt_cb(time); } + +unsigned char* stream_read_line(stream_t *s,unsigned char* mem, int max) { + int len; + unsigned char* end,*ptr = mem; + if (max < 1) return NULL; + max--; // reserve one for 0-termination + do { + len = s->buf_len-s->buf_pos; + // try to fill the buffer + if(len <= 0 && + (!cache_stream_fill_buffer(s) || + (len = s->buf_len-s->buf_pos) <= 0)) break; + end = (unsigned char*) memchr((void*)(s->buffer+s->buf_pos),'\n',len); + if(end) len = end - (s->buffer+s->buf_pos) + 1; + if(len > 0 && max > 0) { + int l = len > max ? max : len; + memcpy(ptr,s->buffer+s->buf_pos,l); + max -= l; + ptr += l; + } + s->buf_pos += len; + } while(!end); + if(s->eof && ptr == mem) return NULL; + ptr[0] = 0; + return mem; +}
--- a/stream/stream.h Sun Feb 28 12:54:12 2010 +0000 +++ b/stream/stream.h Sun Feb 28 13:54:55 2010 +0000 @@ -265,32 +265,7 @@ return total; } -inline static unsigned char* stream_read_line(stream_t *s,unsigned char* mem, int max) { - int len; - unsigned char* end,*ptr = mem; - if (max < 1) return NULL; - max--; // reserve one for 0-termination - do { - len = s->buf_len-s->buf_pos; - // try to fill the buffer - if(len <= 0 && - (!cache_stream_fill_buffer(s) || - (len = s->buf_len-s->buf_pos) <= 0)) break; - end = (unsigned char*) memchr((void*)(s->buffer+s->buf_pos),'\n',len); - if(end) len = end - (s->buffer+s->buf_pos) + 1; - if(len > 0 && max > 0) { - int l = len > max ? max : len; - memcpy(ptr,s->buffer+s->buf_pos,l); - max -= l; - ptr += l; - } - s->buf_pos += len; - } while(!end); - if(s->eof && ptr == mem) return NULL; - ptr[0] = 0; - return mem; -} - +unsigned char* stream_read_line(stream_t *s,unsigned char* mem, int max); inline static int stream_eof(stream_t *s){ return s->eof;