More VMS synchronisation
[openssl.git] / crypto / bio / bss_mem.c
index c4e557822e561ade40d960232c0acc5c256521b1..28ff7582bff87a52da73390879543aa57b8ebd1d 100644 (file)
@@ -163,11 +163,9 @@ static int mem_read(BIO *b, char *out, int outl)
                }
        } else if (bm->length == 0)
                {
-               if (b->num != 0)
+               ret = b->num;
+               if (ret != 0)
                        BIO_set_retry_read(b);
-               ret= b->num;
-               if(ret < 0)
-                   BIOerr(BIO_F_MEM_READ,BIO_R_EOF_ON_MEMORY_BIO);
                }
        return(ret);
        }
@@ -210,15 +208,20 @@ static long mem_ctrl(BIO *b, int cmd, long num, void *ptr)
        switch (cmd)
                {
        case BIO_CTRL_RESET:
-               if (bm->data != NULL) {
+               if (bm->data != NULL)
+                       {
                        /* For read only case reset to the start again */
                        if(b->flags & BIO_FLAGS_MEM_RDONLY) 
-                                       bm->data -= bm->max - bm->length;
-                       else {
+                               {
+                               bm->data -= bm->max - bm->length;
+                               bm->length = bm->max;
+                               }
+                       else
+                               {
                                memset(bm->data,0,bm->max);
                                bm->length=0;
+                               }
                        }
-               }
                break;
        case BIO_CTRL_EOF:
                ret=(long)(bm->length == 0);