189 BIO_read(b, out, len); |
189 BIO_read(b, out, len); |
190 BIO_free_all(b); |
190 BIO_free_all(b); |
191 |
191 |
192 return out; |
192 return out; |
193 } |
193 } |
|
194 |
|
195 /* |
|
196 * gets a substring from 0 to the appearance of the token |
|
197 * tokens are separated by space |
|
198 * sets sub to the substring and returns the remaining string |
|
199 */ |
|
200 sstr_t util_getsubstr_until_token(sstr_t str, sstr_t token, sstr_t *sub) { |
|
201 int i; |
|
202 int token_start = -1; |
|
203 int token_end = -1; |
|
204 for(i=0;i<=str.length;i++) { |
|
205 int c; |
|
206 if(i == str.length) { |
|
207 c = ' '; |
|
208 } else { |
|
209 c = str.ptr[i]; |
|
210 } |
|
211 if(c < 33) { |
|
212 if(token_start != -1) { |
|
213 token_end = i; |
|
214 size_t len = token_end - token_start; |
|
215 sstr_t tk = sstrsubsl(str, token_start, len); |
|
216 //printf("token: {%.*s}\n", token.length, token.ptr); |
|
217 if(!sstrcmp(tk, token)) { |
|
218 *sub = sstrtrim(sstrsubsl(str, 0, token_start)); |
|
219 break; |
|
220 } |
|
221 token_start = -1; |
|
222 token_end = -1; |
|
223 } |
|
224 } else { |
|
225 if(token_start == -1) { |
|
226 token_start = i; |
|
227 } |
|
228 } |
|
229 } |
|
230 |
|
231 if(i < str.length) { |
|
232 return sstrtrim(sstrsubs(str, i)); |
|
233 } else { |
|
234 str.ptr = NULL; |
|
235 str.length = 0; |
|
236 return str; |
|
237 } |
|
238 } |