| OLD | NEW |
| 1 /* crypto/bio/bf_buff.c */ | 1 /* crypto/bio/bf_buff.c */ |
| 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * This package is an SSL implementation written | 5 * This package is an SSL implementation written |
| 6 * by Eric Young (eay@cryptsoft.com). | 6 * by Eric Young (eay@cryptsoft.com). |
| 7 * The implementation was written so as to conform with Netscapes SSL. | 7 * The implementation was written so as to conform with Netscapes SSL. |
| 8 * | 8 * |
| 9 * This library is free for commercial and non-commercial use as long as | 9 * This library is free for commercial and non-commercial use as long as |
| 10 * the following conditions are aheared to. The following conditions | 10 * the following conditions are aheared to. The following conditions |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 if ((in == NULL) || (inl <= 0)) return(0); | 202 if ((in == NULL) || (inl <= 0)) return(0); |
| 203 ctx=(BIO_F_BUFFER_CTX *)b->ptr; | 203 ctx=(BIO_F_BUFFER_CTX *)b->ptr; |
| 204 if ((ctx == NULL) || (b->next_bio == NULL)) return(0); | 204 if ((ctx == NULL) || (b->next_bio == NULL)) return(0); |
| 205 | 205 |
| 206 BIO_clear_retry_flags(b); | 206 BIO_clear_retry_flags(b); |
| 207 start: | 207 start: |
| 208 i=ctx->obuf_size-(ctx->obuf_len+ctx->obuf_off); | 208 i=ctx->obuf_size-(ctx->obuf_len+ctx->obuf_off); |
| 209 /* add to buffer and return */ | 209 /* add to buffer and return */ |
| 210 if (i >= inl) | 210 if (i >= inl) |
| 211 { | 211 { |
| 212 » » memcpy(&(ctx->obuf[ctx->obuf_len]),in,inl); | 212 » » memcpy(&(ctx->obuf[ctx->obuf_off+ctx->obuf_len]),in,inl); |
| 213 ctx->obuf_len+=inl; | 213 ctx->obuf_len+=inl; |
| 214 return(num+inl); | 214 return(num+inl); |
| 215 } | 215 } |
| 216 /* else */ | 216 /* else */ |
| 217 /* stuff already in buffer, so add to it first, then flush */ | 217 /* stuff already in buffer, so add to it first, then flush */ |
| 218 if (ctx->obuf_len != 0) | 218 if (ctx->obuf_len != 0) |
| 219 { | 219 { |
| 220 if (i > 0) /* lets fill it up if we can */ | 220 if (i > 0) /* lets fill it up if we can */ |
| 221 { | 221 { |
| 222 » » » memcpy(&(ctx->obuf[ctx->obuf_len]),in,i); | 222 » » » memcpy(&(ctx->obuf[ctx->obuf_off+ctx->obuf_len]),in,i); |
| 223 in+=i; | 223 in+=i; |
| 224 inl-=i; | 224 inl-=i; |
| 225 num+=i; | 225 num+=i; |
| 226 ctx->obuf_len+=i; | 226 ctx->obuf_len+=i; |
| 227 } | 227 } |
| 228 /* we now have a full buffer needing flushing */ | 228 /* we now have a full buffer needing flushing */ |
| 229 for (;;) | 229 for (;;) |
| 230 { | 230 { |
| 231 i=BIO_write(b->next_bio,&(ctx->obuf[ctx->obuf_off]), | 231 i=BIO_write(b->next_bio,&(ctx->obuf[ctx->obuf_off]), |
| 232 ctx->obuf_len); | 232 ctx->obuf_len); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 ctx->obuf_len=0; | 287 ctx->obuf_len=0; |
| 288 if (b->next_bio == NULL) return(0); | 288 if (b->next_bio == NULL) return(0); |
| 289 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); | 289 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); |
| 290 break; | 290 break; |
| 291 case BIO_CTRL_INFO: | 291 case BIO_CTRL_INFO: |
| 292 ret=(long)ctx->obuf_len; | 292 ret=(long)ctx->obuf_len; |
| 293 break; | 293 break; |
| 294 case BIO_C_GET_BUFF_NUM_LINES: | 294 case BIO_C_GET_BUFF_NUM_LINES: |
| 295 ret=0; | 295 ret=0; |
| 296 p1=ctx->ibuf; | 296 p1=ctx->ibuf; |
| 297 » » for (i=ctx->ibuf_off; i<ctx->ibuf_len; i++) | 297 » » for (i=0; i<ctx->ibuf_len; i++) |
| 298 { | 298 { |
| 299 » » » if (p1[i] == '\n') ret++; | 299 » » » if (p1[ctx->ibuf_off + i] == '\n') ret++; |
| 300 } | 300 } |
| 301 break; | 301 break; |
| 302 case BIO_CTRL_WPENDING: | 302 case BIO_CTRL_WPENDING: |
| 303 ret=(long)ctx->obuf_len; | 303 ret=(long)ctx->obuf_len; |
| 304 if (ret == 0) | 304 if (ret == 0) |
| 305 { | 305 { |
| 306 if (b->next_bio == NULL) return(0); | 306 if (b->next_bio == NULL) return(0); |
| 307 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); | 307 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); |
| 308 } | 308 } |
| 309 break; | 309 break; |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 if (b->next_bio == NULL) return(0); | 392 if (b->next_bio == NULL) return(0); |
| 393 if (ctx->obuf_len <= 0) | 393 if (ctx->obuf_len <= 0) |
| 394 { | 394 { |
| 395 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); | 395 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); |
| 396 break; | 396 break; |
| 397 } | 397 } |
| 398 | 398 |
| 399 for (;;) | 399 for (;;) |
| 400 { | 400 { |
| 401 BIO_clear_retry_flags(b); | 401 BIO_clear_retry_flags(b); |
| 402 » » » if (ctx->obuf_len > ctx->obuf_off) | 402 » » » if (ctx->obuf_len > 0) |
| 403 { | 403 { |
| 404 r=BIO_write(b->next_bio, | 404 r=BIO_write(b->next_bio, |
| 405 &(ctx->obuf[ctx->obuf_off]), | 405 &(ctx->obuf[ctx->obuf_off]), |
| 406 » » » » » ctx->obuf_len-ctx->obuf_off); | 406 » » » » » ctx->obuf_len); |
| 407 #if 0 | 407 #if 0 |
| 408 fprintf(stderr,"FLUSH [%3d] %3d -> %3d\n",ctx->obuf_off,ctx->obuf_len-ctx->obuf_
off,r); | 408 fprintf(stderr,"FLUSH [%3d] %3d -> %3d\n",ctx->obuf_off,ctx->obuf_len,r); |
| 409 #endif | 409 #endif |
| 410 BIO_copy_next_retry(b); | 410 BIO_copy_next_retry(b); |
| 411 if (r <= 0) return((long)r); | 411 if (r <= 0) return((long)r); |
| 412 ctx->obuf_off+=r; | 412 ctx->obuf_off+=r; |
| 413 ctx->obuf_len-=r; |
| 413 } | 414 } |
| 414 else | 415 else |
| 415 { | 416 { |
| 416 ctx->obuf_len=0; | 417 ctx->obuf_len=0; |
| 417 ctx->obuf_off=0; | 418 ctx->obuf_off=0; |
| 418 ret=1; | 419 ret=1; |
| 419 break; | 420 break; |
| 420 } | 421 } |
| 421 } | 422 } |
| 422 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); | 423 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 ctx->ibuf_off=0; | 503 ctx->ibuf_off=0; |
| 503 } | 504 } |
| 504 } | 505 } |
| 505 } | 506 } |
| 506 | 507 |
| 507 static int buffer_puts(BIO *b, const char *str) | 508 static int buffer_puts(BIO *b, const char *str) |
| 508 { | 509 { |
| 509 return(buffer_write(b,str,strlen(str))); | 510 return(buffer_write(b,str,strlen(str))); |
| 510 } | 511 } |
| 511 | 512 |
| OLD | NEW |