1 /* 2 * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (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 8 */ 9 10 #include <stdio.h> 11 #include <errno.h> 12 #include "bio_local.h" 13 #include "internal/cryptlib.h" 14 15 static int null_write(BIO *h, const char *buf, int num); 16 static int null_read(BIO *h, char *buf, int size); 17 static int null_puts(BIO *h, const char *str); 18 static int null_gets(BIO *h, char *str, int size); 19 static long null_ctrl(BIO *h, int cmd, long arg1, void *arg2); 20 static const BIO_METHOD null_method = { 21 BIO_TYPE_NULL, 22 "NULL", 23 bwrite_conv, 24 null_write, 25 bread_conv, 26 null_read, 27 null_puts, 28 null_gets, 29 null_ctrl, 30 NULL, 31 NULL, 32 NULL, /* null_callback_ctrl */ 33 }; 34 35 const BIO_METHOD *BIO_s_null(void) 36 { 37 return &null_method; 38 } 39 40 static int null_read(BIO *b, char *out, int outl) 41 { 42 return 0; 43 } 44 45 static int null_write(BIO *b, const char *in, int inl) 46 { 47 return inl; 48 } 49 50 static long null_ctrl(BIO *b, int cmd, long num, void *ptr) 51 { 52 long ret = 1; 53 54 switch (cmd) { 55 case BIO_CTRL_RESET: 56 case BIO_CTRL_EOF: 57 case BIO_CTRL_SET: 58 case BIO_CTRL_SET_CLOSE: 59 case BIO_CTRL_FLUSH: 60 case BIO_CTRL_DUP: 61 ret = 1; 62 break; 63 case BIO_CTRL_GET_CLOSE: 64 case BIO_CTRL_INFO: 65 case BIO_CTRL_GET: 66 case BIO_CTRL_PENDING: 67 case BIO_CTRL_WPENDING: 68 default: 69 ret = 0; 70 break; 71 } 72 return ret; 73 } 74 75 static int null_gets(BIO *bp, char *buf, int size) 76 { 77 return 0; 78 } 79 80 static int null_puts(BIO *bp, const char *str) 81 { 82 if (str == NULL) 83 return 0; 84 return strlen(str); 85 } 86