From 9fe9d0461ea4bcc42cd75a30f013fa61b5407b93 Mon Sep 17 00:00:00 2001 From: Kirill Marinushkin Date: Sun, 13 Mar 2016 13:20:52 +0100 Subject: Optimized BIO mem read - without reallocation Currently on every BIO mem read operation the remaining data is reallocated. This commit solves the issue. BIO mem structure includes additional pointer to the read position. On every read the pointer moves instead of reallocating the memory for the remaining data. Reallocation accures before write and some ioctl operations, if the read pointer doesn't point on the beginning of the buffer. Also the flag is added to rewind the read pointer without losing the data. Reviewed-by: Richard Levitte Reviewed-by: Rich Salz --- doc/crypto/BIO_s_mem.pod | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'doc') diff --git a/doc/crypto/BIO_s_mem.pod b/doc/crypto/BIO_s_mem.pod index 03e291dce3..84abb29823 100644 --- a/doc/crypto/BIO_s_mem.pod +++ b/doc/crypto/BIO_s_mem.pod @@ -39,9 +39,10 @@ Memory BIOs support BIO_gets() and BIO_puts(). If the BIO_CLOSE flag is set when a memory BIO is freed then the underlying BUF_MEM structure is also freed. -Calling BIO_reset() on a read write memory BIO clears any data in it. On a -read only BIO it restores the BIO to its original state and the read only -data can be read again. +Calling BIO_reset() on a read write memory BIO clears any data in it if the +flag BIO_FLAGS_NONCLEAR_RST is not set. On a read only BIO or if the flag +BIO_FLAGS_NONCLEAR_RST is set it restores the BIO to its original state and +the data can be read again. BIO_eof() is true if no data is in the BIO. @@ -90,12 +91,6 @@ give undefined results, including perhaps a program crash. There should be an option to set the maximum size of a memory BIO. -There should be a way to "rewind" a read write BIO without destroying -its contents. - -The copying operation should not occur after every small read of a large BIO -to improve efficiency. - =head1 EXAMPLE Create a memory BIO and write some data to it: -- cgit v1.2.3