Mercurial > dropbear
comparison circbuffer.c @ 1054:c71df09bc610 nocircbuffer
Avoid copying data into circular buffer
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sun, 01 Mar 2015 00:44:45 +0800 |
parents | abd99ecd7ec2 |
children | acf444bcb115 |
comparison
equal
deleted
inserted
replaced
1053:fd3712d1ff7f | 1054:c71df09bc610 |
---|---|
108 } | 108 } |
109 | 109 |
110 return &cbuf->data[cbuf->readpos]; | 110 return &cbuf->data[cbuf->readpos]; |
111 } | 111 } |
112 | 112 |
113 void cbuf_readptrs(circbuffer *cbuf, | |
114 unsigned char **p1, unsigned int *len1, | |
115 unsigned char **p2, unsigned int *len2) { | |
116 *p1 = &cbuf->data[cbuf->readpos]; | |
117 *len1 = MIN(cbuf->used, cbuf->size - cbuf->readpos); | |
118 | |
119 if (*len1 < cbuf->used) { | |
120 *p2 = cbuf->data; | |
121 *len2 = cbuf->used - *len1; | |
122 } else { | |
123 *p2 = NULL; | |
124 *len2 = 0; | |
125 } | |
126 } | |
127 | |
113 unsigned char* cbuf_writeptr(circbuffer *cbuf, unsigned int len) { | 128 unsigned char* cbuf_writeptr(circbuffer *cbuf, unsigned int len) { |
114 | 129 |
115 if (len > cbuf_writelen(cbuf)) { | 130 if (len > cbuf_writelen(cbuf)) { |
116 dropbear_exit("Bad cbuf write"); | 131 dropbear_exit("Bad cbuf write"); |
117 } | 132 } |
129 cbuf->writepos = (cbuf->writepos + len) % cbuf->size; | 144 cbuf->writepos = (cbuf->writepos + len) % cbuf->size; |
130 } | 145 } |
131 | 146 |
132 | 147 |
133 void cbuf_incrread(circbuffer *cbuf, unsigned int len) { | 148 void cbuf_incrread(circbuffer *cbuf, unsigned int len) { |
149 #if 0 | |
134 if (len > cbuf_readlen(cbuf)) { | 150 if (len > cbuf_readlen(cbuf)) { |
135 dropbear_exit("Bad cbuf read"); | 151 dropbear_exit("Bad cbuf read"); |
136 } | 152 } |
153 #endif | |
137 | 154 |
138 dropbear_assert(cbuf->used >= len); | 155 dropbear_assert(cbuf->used >= len); |
139 cbuf->used -= len; | 156 cbuf->used -= len; |
140 cbuf->readpos = (cbuf->readpos + len) % cbuf->size; | 157 cbuf->readpos = (cbuf->readpos + len) % cbuf->size; |
141 } | 158 } |