]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-ssl-iostream: iostream-openssl - Move error handling out of openssl_iostream_bio_...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 23 Sep 2020 21:58:12 +0000 (23:58 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 30 Sep 2021 17:08:11 +0000 (17:08 +0000)
Makes the next commit clearer.

src/lib-ssl-iostream/iostream-openssl.c

index 469cbc9ace95275418211193e8ca94818f3442eb..b3a426f8a483908473a03eb42873bdd04b417986 100644 (file)
@@ -389,7 +389,7 @@ static void openssl_iostream_destroy(struct ssl_iostream *ssl_io)
        ssl_iostream_unref(&ssl_io);
 }
 
-static int openssl_iostream_bio_output(struct ssl_iostream *ssl_io)
+static int openssl_iostream_bio_output_real(struct ssl_iostream *ssl_io)
 {
        size_t bytes, max_bytes;
        ssize_t sent;
@@ -424,13 +424,6 @@ static int openssl_iostream_bio_output(struct ssl_iostream *ssl_io)
                   fully succeed or completely fail due to some error. */
                sent = o_stream_send(ssl_io->plain_output, buffer, bytes);
                if (sent < 0) {
-                       i_assert(ssl_io->plain_output->stream_errno != 0);
-                       i_free(ssl_io->plain_stream_errstr);
-                       ssl_io->plain_stream_errstr =
-                               i_strdup(o_stream_get_error(ssl_io->plain_output));
-                       ssl_io->plain_stream_errno =
-                               ssl_io->plain_output->stream_errno;
-                       ssl_io->closed = TRUE;
                        result = -1;
                        break;
                }
@@ -441,6 +434,23 @@ static int openssl_iostream_bio_output(struct ssl_iostream *ssl_io)
        return result;
 }
 
+static int openssl_iostream_bio_output(struct ssl_iostream *ssl_io)
+{
+       int ret;
+
+       ret = openssl_iostream_bio_output_real(ssl_io);
+       if (ret < 0) {
+               i_assert(ssl_io->plain_output->stream_errno != 0);
+               i_free(ssl_io->plain_stream_errstr);
+               ssl_io->plain_stream_errstr =
+                       i_strdup(o_stream_get_error(ssl_io->plain_output));
+               ssl_io->plain_stream_errno =
+                       ssl_io->plain_output->stream_errno;
+               ssl_io->closed = TRUE;
+       }
+       return ret;
+}
+
 static ssize_t
 openssl_iostream_read_more(struct ssl_iostream *ssl_io,
                           enum openssl_iostream_sync_type type, size_t wanted,