2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
13 #include "internal/cryptlib.h"
16 * BIO_put and BIO_get both add to the digest, BIO_gets returns the digest
19 static int nullf_write(BIO *h, const char *buf, int num);
20 static int nullf_read(BIO *h, char *buf, int size);
21 static int nullf_puts(BIO *h, const char *str);
22 static int nullf_gets(BIO *h, char *str, int size);
23 static long nullf_ctrl(BIO *h, int cmd, long arg1, void *arg2);
24 static int nullf_new(BIO *h);
25 static int nullf_free(BIO *data);
26 static long nullf_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp);
27 static const BIO_METHOD methods_nullf = {
31 /* TODO: Convert to new style read function */
42 const BIO_METHOD *BIO_f_null(void)
44 return (&methods_nullf);
47 static int nullf_new(BIO *bi)
55 static int nullf_free(BIO *a)
67 static int nullf_read(BIO *b, char *out, int outl)
73 if (b->next_bio == NULL)
75 ret = BIO_read(b->next_bio, out, outl);
76 BIO_clear_retry_flags(b);
77 BIO_copy_next_retry(b);
81 static int nullf_write(BIO *b, const char *in, int inl)
85 if ((in == NULL) || (inl <= 0))
87 if (b->next_bio == NULL)
89 ret = BIO_write(b->next_bio, in, inl);
90 BIO_clear_retry_flags(b);
91 BIO_copy_next_retry(b);
95 static long nullf_ctrl(BIO *b, int cmd, long num, void *ptr)
99 if (b->next_bio == NULL)
102 case BIO_C_DO_STATE_MACHINE:
103 BIO_clear_retry_flags(b);
104 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
105 BIO_copy_next_retry(b);
111 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
116 static long nullf_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)
120 if (b->next_bio == NULL)
124 ret = BIO_callback_ctrl(b->next_bio, cmd, fp);
130 static int nullf_gets(BIO *bp, char *buf, int size)
132 if (bp->next_bio == NULL)
134 return (BIO_gets(bp->next_bio, buf, size));
137 static int nullf_puts(BIO *bp, const char *str)
139 if (bp->next_bio == NULL)
141 return (BIO_puts(bp->next_bio, str));