Mercurial > dropbear
comparison circbuffer.c @ 1079:acf444bcb115
Fix no-writev fallback
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sat, 02 May 2015 22:47:25 +0800 |
parents | c71df09bc610 |
children | 1397a677cb5c |
comparison
equal
deleted
inserted
replaced
1078:b3b772646974 | 1079:acf444bcb115 |
---|---|
65 | 65 |
66 return cbuf->size - cbuf->used; | 66 return cbuf->size - cbuf->used; |
67 | 67 |
68 } | 68 } |
69 | 69 |
70 unsigned int cbuf_readlen(circbuffer *cbuf) { | |
71 | |
72 dropbear_assert(((2*cbuf->size)+cbuf->writepos-cbuf->readpos)%cbuf->size == cbuf->used%cbuf->size); | |
73 dropbear_assert(((2*cbuf->size)+cbuf->readpos-cbuf->writepos)%cbuf->size == (cbuf->size-cbuf->used)%cbuf->size); | |
74 | |
75 if (cbuf->used == 0) { | |
76 TRACE(("cbuf_readlen: unused buffer")) | |
77 return 0; | |
78 } | |
79 | |
80 if (cbuf->readpos < cbuf->writepos) { | |
81 return cbuf->writepos - cbuf->readpos; | |
82 } | |
83 | |
84 return cbuf->size - cbuf->readpos; | |
85 } | |
86 | |
87 unsigned int cbuf_writelen(circbuffer *cbuf) { | 70 unsigned int cbuf_writelen(circbuffer *cbuf) { |
88 | 71 |
89 dropbear_assert(cbuf->used <= cbuf->size); | 72 dropbear_assert(cbuf->used <= cbuf->size); |
90 dropbear_assert(((2*cbuf->size)+cbuf->writepos-cbuf->readpos)%cbuf->size == cbuf->used%cbuf->size); | 73 dropbear_assert(((2*cbuf->size)+cbuf->writepos-cbuf->readpos)%cbuf->size == cbuf->used%cbuf->size); |
91 dropbear_assert(((2*cbuf->size)+cbuf->readpos-cbuf->writepos)%cbuf->size == (cbuf->size-cbuf->used)%cbuf->size); | 74 dropbear_assert(((2*cbuf->size)+cbuf->readpos-cbuf->writepos)%cbuf->size == (cbuf->size-cbuf->used)%cbuf->size); |
98 if (cbuf->writepos < cbuf->readpos) { | 81 if (cbuf->writepos < cbuf->readpos) { |
99 return cbuf->readpos - cbuf->writepos; | 82 return cbuf->readpos - cbuf->writepos; |
100 } | 83 } |
101 | 84 |
102 return cbuf->size - cbuf->writepos; | 85 return cbuf->size - cbuf->writepos; |
103 } | |
104 | |
105 unsigned char* cbuf_readptr(circbuffer *cbuf, unsigned int len) { | |
106 if (len > cbuf_readlen(cbuf)) { | |
107 dropbear_exit("Bad cbuf read"); | |
108 } | |
109 | |
110 return &cbuf->data[cbuf->readpos]; | |
111 } | 86 } |
112 | 87 |
113 void cbuf_readptrs(circbuffer *cbuf, | 88 void cbuf_readptrs(circbuffer *cbuf, |
114 unsigned char **p1, unsigned int *len1, | 89 unsigned char **p1, unsigned int *len1, |
115 unsigned char **p2, unsigned int *len2) { | 90 unsigned char **p2, unsigned int *len2) { |
144 cbuf->writepos = (cbuf->writepos + len) % cbuf->size; | 119 cbuf->writepos = (cbuf->writepos + len) % cbuf->size; |
145 } | 120 } |
146 | 121 |
147 | 122 |
148 void cbuf_incrread(circbuffer *cbuf, unsigned int len) { | 123 void cbuf_incrread(circbuffer *cbuf, unsigned int len) { |
149 #if 0 | |
150 if (len > cbuf_readlen(cbuf)) { | |
151 dropbear_exit("Bad cbuf read"); | |
152 } | |
153 #endif | |
154 | |
155 dropbear_assert(cbuf->used >= len); | 124 dropbear_assert(cbuf->used >= len); |
156 cbuf->used -= len; | 125 cbuf->used -= len; |
157 cbuf->readpos = (cbuf->readpos + len) % cbuf->size; | 126 cbuf->readpos = (cbuf->readpos + len) % cbuf->size; |
158 } | 127 } |