summaryrefslogtreecommitdiff
path: root/lib/libcrypto/bio/bss_bio.c
diff options
context:
space:
mode:
authorJoel Sing <jsing@cvs.openbsd.org>2014-04-15 16:37:23 +0000
committerJoel Sing <jsing@cvs.openbsd.org>2014-04-15 16:37:23 +0000
commit6e256012fe4391e070084a3630379479c37c7aba (patch)
treebfc39ffc97c9cd96266492b216ed7800c34c9d8d /lib/libcrypto/bio/bss_bio.c
parentfcd74ba7aa271885eb12554ad9070defd36a05c9 (diff)
First pass at applying KNF to the OpenSSL code, which almost makes it
readable. This pass is whitespace only and can readily be verified using tr and md5.
Diffstat (limited to 'lib/libcrypto/bio/bss_bio.c')
-rw-r--r--lib/libcrypto/bio/bss_bio.c546
1 files changed, 261 insertions, 285 deletions
diff --git a/lib/libcrypto/bio/bss_bio.c b/lib/libcrypto/bio/bss_bio.c
index 52ef0ebcb3e..a74fcfdabc5 100644
--- a/lib/libcrypto/bio/bss_bio.c
+++ b/lib/libcrypto/bio/bss_bio.c
@@ -103,8 +103,7 @@ static int bio_puts(BIO *bio, const char *str);
static int bio_make_pair(BIO *bio1, BIO *bio2);
static void bio_destroy_pair(BIO *bio);
-static BIO_METHOD methods_biop =
-{
+static BIO_METHOD methods_biop = {
BIO_TYPE_BIO,
"BIO pair",
bio_write,
@@ -117,50 +116,51 @@ static BIO_METHOD methods_biop =
NULL /* no bio_callback_ctrl */
};
-BIO_METHOD *BIO_s_bio(void)
- {
+BIO_METHOD
+*BIO_s_bio(void)
+{
return &methods_biop;
- }
+}
+
+struct bio_bio_st {
+ BIO *peer; /* NULL if buf == NULL.
+ * If peer != NULL, then peer->ptr is also a bio_bio_st,
+ * and its "peer" member points back to us.
+ * peer != NULL iff init != 0 in the BIO. */
-struct bio_bio_st
-{
- BIO *peer; /* NULL if buf == NULL.
- * If peer != NULL, then peer->ptr is also a bio_bio_st,
- * and its "peer" member points back to us.
- * peer != NULL iff init != 0 in the BIO. */
-
/* This is for what we write (i.e. reading uses peer's struct): */
- int closed; /* valid iff peer != NULL */
- size_t len; /* valid iff buf != NULL; 0 if peer == NULL */
- size_t offset; /* valid iff buf != NULL; 0 if len == 0 */
+ int closed; /* valid iff peer != NULL */
+ size_t len; /* valid iff buf != NULL; 0 if peer == NULL */
+ size_t offset; /* valid iff buf != NULL; 0 if len == 0 */
size_t size;
char *buf; /* "size" elements (if != NULL) */
size_t request; /* valid iff peer != NULL; 0 if len != 0,
- * otherwise set by peer to number of bytes
- * it (unsuccessfully) tried to read,
+ * otherwise set by peer to number of bytes
+ * it (unsuccessfully) tried to read,
* never more than buffer space (size-len) warrants. */
};
-static int bio_new(BIO *bio)
- {
+static int
+bio_new(BIO *bio)
+{
struct bio_bio_st *b;
-
+
b = OPENSSL_malloc(sizeof *b);
if (b == NULL)
return 0;
b->peer = NULL;
- b->size = 17*1024; /* enough for one TLS record (just a default) */
+ b->size = 17 * 1024; /* enough for one TLS record (just a default) */
b->buf = NULL;
bio->ptr = b;
return 1;
- }
+}
-
-static int bio_free(BIO *bio)
- {
+static int
+bio_free(BIO *bio)
+{
struct bio_bio_st *b;
if (bio == NULL)
@@ -171,21 +171,21 @@ static int bio_free(BIO *bio)
if (b->peer)
bio_destroy_pair(bio);
-
- if (b->buf != NULL)
- {
+
+ if (b->buf != NULL) {
OPENSSL_free(b->buf);
- }
+ }
OPENSSL_free(b);
return 1;
- }
+}
-static int bio_read(BIO *bio, char *buf, int size_)
- {
+static int
+bio_read(BIO *bio, char *buf, int size_)
+{
size_t size = size_;
size_t rest;
struct bio_bio_st *b, *peer_b;
@@ -207,12 +207,10 @@ static int bio_read(BIO *bio, char *buf, int size_)
if (buf == NULL || size == 0)
return 0;
- if (peer_b->len == 0)
- {
+ if (peer_b->len == 0) {
if (peer_b->closed)
return 0; /* writer has closed, and no data is left */
- else
- {
+ else {
BIO_set_retry_read(bio); /* buffer is empty */
if (size <= peer_b->size)
peer_b->request = size;
@@ -221,22 +219,22 @@ static int bio_read(BIO *bio, char *buf, int size_)
* deliver in one write */
peer_b->request = peer_b->size;
return -1;
- }
}
+ }
/* we can read */
if (peer_b->len < size)
size = peer_b->len;
/* now read "size" bytes */
-
+
rest = size;
-
+
assert(rest > 0);
do /* one or two iterations */
- {
+ {
size_t chunk;
-
+
assert(rest <= peer_b->len);
if (peer_b->offset + rest <= peer_b->size)
chunk = rest;
@@ -244,30 +242,26 @@ static int bio_read(BIO *bio, char *buf, int size_)
/* wrap around ring buffer */
chunk = peer_b->size - peer_b->offset;
assert(peer_b->offset + chunk <= peer_b->size);
-
+
memcpy(buf, peer_b->buf + peer_b->offset, chunk);
-
+
peer_b->len -= chunk;
- if (peer_b->len)
- {
+ if (peer_b->len) {
peer_b->offset += chunk;
assert(peer_b->offset <= peer_b->size);
if (peer_b->offset == peer_b->size)
peer_b->offset = 0;
buf += chunk;
- }
- else
- {
+ } else {
/* buffer now empty, no need to advance "buf" */
assert(chunk == rest);
peer_b->offset = 0;
- }
- rest -= chunk;
}
- while (rest);
-
+ rest -= chunk;
+ } while (rest);
+
return size;
- }
+}
/* non-copying interface: provide pointer to available data in buffer
* bio_nread0: return number of available bytes
@@ -277,32 +271,32 @@ static int bio_read(BIO *bio, char *buf, int size_)
*/
/* WARNING: The non-copying interface is largely untested as of yet
* and may contain bugs. */
-static ossl_ssize_t bio_nread0(BIO *bio, char **buf)
- {
+static ossl_ssize_t
+bio_nread0(BIO *bio, char **buf)
+{
struct bio_bio_st *b, *peer_b;
ossl_ssize_t num;
-
+
BIO_clear_retry_flags(bio);
if (!bio->init)
return 0;
-
+
b = bio->ptr;
assert(b != NULL);
assert(b->peer != NULL);
peer_b = b->peer->ptr;
assert(peer_b != NULL);
assert(peer_b->buf != NULL);
-
+
peer_b->request = 0;
-
- if (peer_b->len == 0)
- {
+
+ if (peer_b->len == 0) {
char dummy;
-
+
/* avoid code duplication -- nothing available for reading */
return bio_read(bio, &dummy, 1); /* returns 0 or -1 */
- }
+ }
num = peer_b->len;
if (peer_b->size < peer_b->offset + num)
@@ -313,10 +307,11 @@ static ossl_ssize_t bio_nread0(BIO *bio, char **buf)
if (buf != NULL)
*buf = peer_b->buf + peer_b->offset;
return num;
- }
+}
-static ossl_ssize_t bio_nread(BIO *bio, char **buf, size_t num_)
- {
+static ossl_ssize_t
+bio_nread(BIO *bio, char **buf, size_t num_)
+{
struct bio_bio_st *b, *peer_b;
ossl_ssize_t num, available;
@@ -335,22 +330,21 @@ static ossl_ssize_t bio_nread(BIO *bio, char **buf, size_t num_)
peer_b = b->peer->ptr;
peer_b->len -= num;
- if (peer_b->len)
- {
+ if (peer_b->len) {
peer_b->offset += num;
assert(peer_b->offset <= peer_b->size);
if (peer_b->offset == peer_b->size)
peer_b->offset = 0;
- }
- else
+ } else
peer_b->offset = 0;
return num;
- }
+}
-static int bio_write(BIO *bio, const char *buf, int num_)
- {
+static int
+bio_write(BIO *bio, const char *buf, int num_)
+{
size_t num = num_;
size_t rest;
struct bio_bio_st *b;
@@ -360,38 +354,37 @@ static int bio_write(BIO *bio, const char *buf, int num_)
if (!bio->init || buf == NULL || num == 0)
return 0;
- b = bio->ptr;
+ b = bio->ptr;
+
assert(b != NULL);
assert(b->peer != NULL);
assert(b->buf != NULL);
b->request = 0;
- if (b->closed)
- {
+ if (b->closed) {
/* we already closed */
BIOerr(BIO_F_BIO_WRITE, BIO_R_BROKEN_PIPE);
return -1;
- }
+ }
assert(b->len <= b->size);
- if (b->len == b->size)
- {
+ if (b->len == b->size) {
BIO_set_retry_write(bio); /* buffer is full */
return -1;
- }
+ }
/* we can write */
if (num > b->size - b->len)
num = b->size - b->len;
-
+
/* now write "num" bytes */
rest = num;
-
+
assert(rest > 0);
do /* one or two iterations */
- {
+ {
size_t write_offset;
size_t chunk;
@@ -407,20 +400,19 @@ static int bio_write(BIO *bio, const char *buf, int num_)
else
/* wrap around ring buffer */
chunk = b->size - write_offset;
-
+
memcpy(b->buf + write_offset, buf, chunk);
-
+
b->len += chunk;
assert(b->len <= b->size);
-
+
rest -= chunk;
buf += chunk;
- }
- while (rest);
+ } while (rest);
return num;
- }
+}
/* non-copying interface: provide pointer to region to write to
* bio_nwrite0: check how much space is available
@@ -428,8 +420,9 @@ static int bio_write(BIO *bio, const char *buf, int num_)
* (example usage: bio_nwrite0(), write to buffer, bio_nwrite()
* or just bio_nwrite(), write to buffer)
*/
-static ossl_ssize_t bio_nwrite0(BIO *bio, char **buf)
- {
+static ossl_ssize_t
+bio_nwrite0(BIO *bio, char **buf)
+{
struct bio_bio_st *b;
size_t num;
size_t write_offset;
@@ -439,25 +432,24 @@ static ossl_ssize_t bio_nwrite0(BIO *bio, char **buf)
if (!bio->init)
return 0;
- b = bio->ptr;
+ b = bio->ptr;
+
assert(b != NULL);
assert(b->peer != NULL);
assert(b->buf != NULL);
b->request = 0;
- if (b->closed)
- {
+ if (b->closed) {
BIOerr(BIO_F_BIO_NWRITE0, BIO_R_BROKEN_PIPE);
return -1;
- }
+ }
assert(b->len <= b->size);
- if (b->len == b->size)
- {
+ if (b->len == b->size) {
BIO_set_retry_write(bio);
return -1;
- }
+ }
num = b->size - b->len;
write_offset = b->offset + b->len;
@@ -474,10 +466,11 @@ static ossl_ssize_t bio_nwrite0(BIO *bio, char **buf)
assert(write_offset + num <= b->size);
return num;
- }
+}
-static ossl_ssize_t bio_nwrite(BIO *bio, char **buf, size_t num_)
- {
+static ossl_ssize_t
+bio_nwrite(BIO *bio, char **buf, size_t num_)
+{
struct bio_bio_st *b;
ossl_ssize_t num, space;
@@ -497,46 +490,39 @@ static ossl_ssize_t bio_nwrite(BIO *bio, char **buf, size_t num_)
assert(b->len <= b->size);
return num;
- }
+}
-static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
- {
+static long
+bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
+{
long ret;
struct bio_bio_st *b = bio->ptr;
-
+
assert(b != NULL);
- switch (cmd)
- {
- /* specific CTRL codes */
+ switch (cmd) {
+ /* specific CTRL codes */
case BIO_C_SET_WRITE_BUF_SIZE:
- if (b->peer)
- {
+ if (b->peer) {
BIOerr(BIO_F_BIO_CTRL, BIO_R_IN_USE);
ret = 0;
- }
- else if (num == 0)
- {
+ } else if (num == 0) {
BIOerr(BIO_F_BIO_CTRL, BIO_R_INVALID_ARGUMENT);
ret = 0;
- }
- else
- {
+ } else {
size_t new_size = num;
- if (b->size != new_size)
- {
- if (b->buf)
- {
+ if (b->size != new_size) {
+ if (b->buf) {
OPENSSL_free(b->buf);
b->buf = NULL;
- }
- b->size = new_size;
}
- ret = 1;
+ b->size = new_size;
}
+ ret = 1;
+ }
break;
case BIO_C_GET_WRITE_BUF_SIZE:
@@ -545,15 +531,15 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
case BIO_C_MAKE_BIO_PAIR:
{
- BIO *other_bio = ptr;
-
- if (bio_make_pair(bio, other_bio))
- ret = 1;
- else
- ret = 0;
+ BIO *other_bio = ptr;
+
+ if (bio_make_pair(bio, other_bio))
+ ret = 1;
+ else
+ ret = 0;
}
break;
-
+
case BIO_C_DESTROY_BIO_PAIR:
/* Affects both BIOs in the pair -- call just once!
* Or let BIO_free(bio1); BIO_free(bio2); do the job. */
@@ -596,12 +582,12 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
/* prepare for non-copying read */
ret = (long) bio_nread0(bio, ptr);
break;
-
+
case BIO_C_NREAD:
/* non-copying read */
ret = (long) bio_nread(bio, ptr, (size_t) num);
break;
-
+
case BIO_C_NWRITE0:
/* prepare for non-copying write */
ret = (long) bio_nwrite0(bio, ptr);
@@ -611,18 +597,18 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
/* non-copying write */
ret = (long) bio_nwrite(bio, ptr, (size_t) num);
break;
-
- /* standard CTRL codes follow */
+
+ /* standard CTRL codes follow */
case BIO_CTRL_RESET:
- if (b->buf != NULL)
- {
+ if (b->buf != NULL) {
b->len = 0;
b->offset = 0;
- }
+ }
ret = 0;
- break;
+ break;
+
case BIO_CTRL_GET_CLOSE:
ret = bio->shutdown;
@@ -634,13 +620,11 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
break;
case BIO_CTRL_PENDING:
- if (b->peer != NULL)
- {
+ if (b->peer != NULL) {
struct bio_bio_st *peer_b = b->peer->ptr;
-
+
ret = (long) peer_b->len;
- }
- else
+ } else
ret = 0;
break;
@@ -654,16 +638,16 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
case BIO_CTRL_DUP:
/* See BIO_dup_chain for circumstances we have to expect. */
{
- BIO *other_bio = ptr;
- struct bio_bio_st *other_b;
-
- assert(other_bio != NULL);
- other_b = other_bio->ptr;
- assert(other_b != NULL);
-
- assert(other_b->buf == NULL); /* other_bio is always fresh */
-
- other_b->size = b->size;
+ BIO *other_bio = ptr;
+ struct bio_bio_st *other_b;
+
+ assert(other_bio != NULL);
+ other_b = other_bio->ptr;
+ assert(other_b != NULL);
+
+ assert(other_b->buf == NULL); /* other_bio is always fresh */
+
+ other_b->size = b->size;
}
ret = 1;
@@ -675,34 +659,34 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
case BIO_CTRL_EOF:
{
- BIO *other_bio = ptr;
-
- if (other_bio)
- {
- struct bio_bio_st *other_b = other_bio->ptr;
-
- assert(other_b != NULL);
- ret = other_b->len == 0 && other_b->closed;
- }
- else
- ret = 1;
+ BIO *other_bio = ptr;
+
+ if (other_bio) {
+ struct bio_bio_st *other_b = other_bio->ptr;
+
+ assert(other_b != NULL);
+ ret = other_b->len == 0 && other_b->closed;
+ } else
+ ret = 1;
}
break;
default:
ret = 0;
- }
- return ret;
}
+ return ret;
+}
-static int bio_puts(BIO *bio, const char *str)
- {
+static int
+bio_puts(BIO *bio, const char *str)
+{
return bio_write(bio, str, strlen(str));
- }
+}
-static int bio_make_pair(BIO *bio1, BIO *bio2)
- {
+static int
+bio_make_pair(BIO *bio1, BIO *bio2)
+{
struct bio_bio_st *b1, *b2;
assert(bio1 != NULL);
@@ -710,37 +694,32 @@ static int bio_make_pair(BIO *bio1, BIO *bio2)
b1 = bio1->ptr;
b2 = bio2->ptr;
-
- if (b1->peer != NULL || b2->peer != NULL)
- {
+
+ if (b1->peer != NULL || b2->peer != NULL) {
BIOerr(BIO_F_BIO_MAKE_PAIR, BIO_R_IN_USE);
return 0;
- }
-
- if (b1->buf == NULL)
- {
+ }
+
+ if (b1->buf == NULL) {
b1->buf = OPENSSL_malloc(b1->size);
- if (b1->buf == NULL)
- {
+ if (b1->buf == NULL) {
BIOerr(BIO_F_BIO_MAKE_PAIR, ERR_R_MALLOC_FAILURE);
return 0;
- }
+ }
b1->len = 0;
b1->offset = 0;
- }
-
- if (b2->buf == NULL)
- {
+ }
+
+ if (b2->buf == NULL) {
b2->buf = OPENSSL_malloc(b2->size);
- if (b2->buf == NULL)
- {
+ if (b2->buf == NULL) {
BIOerr(BIO_F_BIO_MAKE_PAIR, ERR_R_MALLOC_FAILURE);
return 0;
- }
+ }
b2->len = 0;
b2->offset = 0;
- }
-
+ }
+
b1->peer = bio2;
b1->closed = 0;
b1->request = 0;
@@ -752,18 +731,17 @@ static int bio_make_pair(BIO *bio1, BIO *bio2)
bio2->init = 1;
return 1;
- }
+}
-static void bio_destroy_pair(BIO *bio)
- {
+static void
+bio_destroy_pair(BIO *bio)
+{
struct bio_bio_st *b = bio->ptr;
- if (b != NULL)
- {
+ if (b != NULL) {
BIO *peer_bio = b->peer;
- if (peer_bio != NULL)
- {
+ if (peer_bio != NULL) {
struct bio_bio_st *peer_b = peer_bio->ptr;
assert(peer_b != NULL);
@@ -774,151 +752,149 @@ static void bio_destroy_pair(BIO *bio)
assert(peer_b->buf != NULL);
peer_b->len = 0;
peer_b->offset = 0;
-
+
b->peer = NULL;
bio->init = 0;
assert(b->buf != NULL);
b->len = 0;
b->offset = 0;
- }
}
}
-
+}
+
/* Exported convenience functions */
-int BIO_new_bio_pair(BIO **bio1_p, size_t writebuf1,
- BIO **bio2_p, size_t writebuf2)
- {
- BIO *bio1 = NULL, *bio2 = NULL;
- long r;
- int ret = 0;
-
- bio1 = BIO_new(BIO_s_bio());
- if (bio1 == NULL)
- goto err;
- bio2 = BIO_new(BIO_s_bio());
- if (bio2 == NULL)
- goto err;
-
- if (writebuf1)
- {
- r = BIO_set_write_buf_size(bio1, writebuf1);
- if (!r)
- goto err;
- }
- if (writebuf2)
- {
- r = BIO_set_write_buf_size(bio2, writebuf2);
- if (!r)
- goto err;
- }
-
- r = BIO_make_bio_pair(bio1, bio2);
- if (!r)
- goto err;
- ret = 1;
-
- err:
- if (ret == 0)
- {
- if (bio1)
- {
- BIO_free(bio1);
- bio1 = NULL;
- }
- if (bio2)
- {
- BIO_free(bio2);
- bio2 = NULL;
- }
- }
-
- *bio1_p = bio1;
- *bio2_p = bio2;
- return ret;
- }
-
-size_t BIO_ctrl_get_write_guarantee(BIO *bio)
- {
- return BIO_ctrl(bio, BIO_C_GET_WRITE_GUARANTEE, 0, NULL);
+int
+BIO_new_bio_pair(BIO **bio1_p, size_t writebuf1, BIO **bio2_p, size_t writebuf2)
+{
+ BIO *bio1 = NULL, *bio2 = NULL;
+ long r;
+ int ret = 0;
+
+ bio1 = BIO_new(BIO_s_bio());
+ if (bio1 == NULL)
+ goto err;
+ bio2 = BIO_new(BIO_s_bio());
+ if (bio2 == NULL)
+ goto err;
+
+ if (writebuf1) {
+ r = BIO_set_write_buf_size(bio1, writebuf1);
+ if (!r)
+ goto err;
+ }
+ if (writebuf2) {
+ r = BIO_set_write_buf_size(bio2, writebuf2);
+ if (!r)
+ goto err;
}
-size_t BIO_ctrl_get_read_request(BIO *bio)
- {
- return BIO_ctrl(bio, BIO_C_GET_READ_REQUEST, 0, NULL);
+ r = BIO_make_bio_pair(bio1, bio2);
+ if (!r)
+ goto err;
+ ret = 1;
+
+ err:
+ if (ret == 0) {
+ if (bio1) {
+ BIO_free(bio1);
+ bio1 = NULL;
+ }
+ if (bio2) {
+ BIO_free(bio2);
+ bio2 = NULL;
+ }
}
-int BIO_ctrl_reset_read_request(BIO *bio)
- {
+ *bio1_p = bio1;
+ *bio2_p = bio2;
+ return ret;
+}
+
+size_t
+BIO_ctrl_get_write_guarantee(BIO *bio)
+{
+ return BIO_ctrl(bio, BIO_C_GET_WRITE_GUARANTEE, 0, NULL);
+}
+
+size_t
+BIO_ctrl_get_read_request(BIO *bio)
+{
+ return BIO_ctrl(bio, BIO_C_GET_READ_REQUEST, 0, NULL);
+}
+
+int
+BIO_ctrl_reset_read_request(BIO *bio)
+{
return (BIO_ctrl(bio, BIO_C_RESET_READ_REQUEST, 0, NULL) != 0);
- }
+}
/* BIO_nread0/nread/nwrite0/nwrite are available only for BIO pairs for now
* (conceivably some other BIOs could allow non-copying reads and writes too.)
*/
-int BIO_nread0(BIO *bio, char **buf)
- {
+int
+BIO_nread0(BIO *bio, char **buf)
+{
long ret;
- if (!bio->init)
- {
+ if (!bio->init) {
BIOerr(BIO_F_BIO_NREAD0, BIO_R_UNINITIALIZED);
return -2;
- }
+ }
ret = BIO_ctrl(bio, BIO_C_NREAD0, 0, buf);
if (ret > INT_MAX)
return INT_MAX;
else
return (int) ret;
- }
+}
-int BIO_nread(BIO *bio, char **buf, int num)
- {
+int
+BIO_nread(BIO *bio, char **buf, int num)
+{
int ret;
- if (!bio->init)
- {
+ if (!bio->init) {
BIOerr(BIO_F_BIO_NREAD, BIO_R_UNINITIALIZED);
return -2;
- }
+ }
ret = (int) BIO_ctrl(bio, BIO_C_NREAD, num, buf);
if (ret > 0)
bio->num_read += ret;
return ret;
- }
+}
-int BIO_nwrite0(BIO *bio, char **buf)
- {
+int
+BIO_nwrite0(BIO *bio, char **buf)
+{
long ret;
- if (!bio->init)
- {
+ if (!bio->init) {
BIOerr(BIO_F_BIO_NWRITE0, BIO_R_UNINITIALIZED);
return -2;
- }
+ }
ret = BIO_ctrl(bio, BIO_C_NWRITE0, 0, buf);
if (ret > INT_MAX)
return INT_MAX;
else
return (int) ret;
- }
+}
-int BIO_nwrite(BIO *bio, char **buf, int num)
- {
+int
+BIO_nwrite(BIO *bio, char **buf, int num)
+{
int ret;
- if (!bio->init)
- {
+ if (!bio->init) {
BIOerr(BIO_F_BIO_NWRITE, BIO_R_UNINITIALIZED);
return -2;
- }
+ }
ret = BIO_ctrl(bio, BIO_C_NWRITE, num, buf);
if (ret > 0)
bio->num_write += ret;
return ret;
- }
+}