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 }