00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <string.h>
00024
00025 #include <cirbuf.h>
00026
00027
00028
00029 cirbuf_int
00030 cirbuf_get_buf_head(struct cirbuf * cbuf, char * c, cirbuf_uint size)
00031 {
00032 cirbuf_uint n = (size < CIRBUF_GET_LEN(cbuf)) ? size : CIRBUF_GET_LEN(cbuf);
00033
00034 if (!n)
00035 return 0;
00036
00037 if (cbuf->start <= cbuf->end) {
00038 dprintf("s[%d] -> d[%d] (%d)\n", cbuf->start, 0, n);
00039 memcpy(c, cbuf->buf + cbuf->start , n);
00040 }
00041 else {
00042 dprintf("s[%d] -> d[%d] (%d)\n", cbuf->start, 0, cbuf->maxlen - cbuf->start);
00043 dprintf("s[%d] -> d[%d] (%d)\n", 0, cbuf->maxlen - cbuf->start, n - cbuf->maxlen + cbuf->start);
00044 memcpy(c, cbuf->buf + cbuf->start , cbuf->maxlen - cbuf->start);
00045 memcpy(c + cbuf->maxlen - cbuf->start, cbuf->buf, n - cbuf->maxlen + cbuf->start);
00046 }
00047 return n;
00048 }
00049