summaryrefslogtreecommitdiffstats
path: root/crypto/bio/bss_mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/bio/bss_mem.c')
-rw-r--r--crypto/bio/bss_mem.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/crypto/bio/bss_mem.c b/crypto/bio/bss_mem.c
index 40c4e39f02..8a2efb938c 100644
--- a/crypto/bio/bss_mem.c
+++ b/crypto/bio/bss_mem.c
@@ -92,6 +92,9 @@ static BIO_METHOD mem_method=
mem_free,
};
+/* bio->num is used to hold the value to return on 'empty', if it is
+ * 0, should_retry is not set */
+
BIO_METHOD *BIO_s_mem()
{
return(&mem_method);
@@ -106,7 +109,7 @@ BIO *bi;
return(0);
bi->shutdown=1;
bi->init=1;
- bi->num=0;
+ bi->num= -1;
bi->ptr=(char *)b;
return(1);
}
@@ -151,8 +154,9 @@ int outl;
}
else if (bm->length == 0)
{
- BIO_set_retry_read(b);
- ret= -1;
+ if (b->num != 0)
+ BIO_set_retry_read(b);
+ ret= b->num;
}
return(ret);
}
@@ -204,6 +208,9 @@ char *ptr;
case BIO_CTRL_EOF:
ret=(long)(bm->length == 0);
break;
+ case BIO_C_SET_BUF_MEM_EOF_RETURN:
+ b->num=(int)num;
+ break;
case BIO_CTRL_INFO:
ret=(long)bm->length;
if (ptr != NULL)