Submitted by: Jeremy Shapiro <jnshapir@us.ibm.com>

Reviewed by: steve@openssl.org

Improve efficientcy of mem_gets().
This commit is contained in:
Dr. Stephen Henson 2009-03-07 16:58:43 +00:00
parent b7650eb21e
commit 4fcf8d8b07
2 changed files with 16 additions and 10 deletions

View File

@ -4,6 +4,10 @@
Changes between 0.9.8j and 0.9.8k [xx XXX xxxx]
*) Improve efficiency of mem_gets: don't search whole buffer each time
for a '\n'
[Jeremy Shapiro <jnshapir@us.ibm.com>]
*) New -hex option for openssl rand.
[Matthieu Herrb]

View File

@ -284,6 +284,7 @@ static int mem_gets(BIO *bp, char *buf, int size)
BIO_clear_retry_flags(bp);
j=bm->length;
if ((size-1) < j) j=size-1;
if (j <= 0)
{
*buf='\0';
@ -292,17 +293,18 @@ static int mem_gets(BIO *bp, char *buf, int size)
p=bm->data;
for (i=0; i<j; i++)
{
if (p[i] == '\n') break;
if (p[i] == '\n')
{
i++;
break;
}
}
if (i == j)
{
BIO_set_retry_read(bp);
/* return(-1); change the semantics 0.6.6a */
}
else
i++;
/* i is the max to copy */
if ((size-1) < i) i=size-1;
/*
* i is now the max num of bytes to copy, either j or up to
* and including the first newline
*/
i=mem_read(bp,buf,i);
if (i > 0) buf[i]='\0';
ret=i;