1  // SPDX-License-Identifier: GPL-2.0
2  /*
3   * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{linux.intel,addtoit}.com)
4   */
5  
6  #include <stddef.h>
7  #include <errno.h>
8  #include <fcntl.h>
9  #include "chan_user.h"
10  #include <os.h>
11  
12  /* This address is used only as a unique identifier */
13  static int null_chan;
14  
null_init(char * str,int device,const struct chan_opts * opts)15  static void *null_init(char *str, int device, const struct chan_opts *opts)
16  {
17  	return &null_chan;
18  }
19  
null_open(int input,int output,int primary,void * d,char ** dev_out)20  static int null_open(int input, int output, int primary, void *d,
21  		     char **dev_out)
22  {
23  	int fd;
24  
25  	*dev_out = NULL;
26  
27  	fd = open(DEV_NULL, O_RDWR);
28  	return (fd < 0) ? -errno : fd;
29  }
30  
null_read(int fd,char * c_out,void * unused)31  static int null_read(int fd, char *c_out, void *unused)
32  {
33  	return -ENODEV;
34  }
35  
null_free(void * data)36  static void null_free(void *data)
37  {
38  }
39  
40  const struct chan_ops null_ops = {
41  	.type		= "null",
42  	.init		= null_init,
43  	.open		= null_open,
44  	.close		= generic_close,
45  	.read		= null_read,
46  	.write		= generic_write,
47  	.console_write	= generic_console_write,
48  	.window_size	= generic_window_size,
49  	.free		= null_free,
50  	.winch		= 0,
51  };
52