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