1dbddf429SAlex Dewar // SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds /*
3e99525f9SJeff Dike * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{linux.intel,addtoit}.com)
41da177e4SLinus Torvalds */
51da177e4SLinus Torvalds
6e99525f9SJeff Dike #include <stddef.h>
71da177e4SLinus Torvalds #include <errno.h>
8e99525f9SJeff Dike #include <fcntl.h>
9e99525f9SJeff Dike #include "chan_user.h"
1037185b33SAl Viro #include <os.h>
111da177e4SLinus Torvalds
12b60745b9SSimon Arlott /* This address is used only as a unique identifier */
131da177e4SLinus Torvalds static int null_chan;
141da177e4SLinus Torvalds
null_init(char * str,int device,const struct chan_opts * opts)155e7672ecSJeff Dike static void *null_init(char *str, int device, const struct chan_opts *opts)
161da177e4SLinus Torvalds {
17e99525f9SJeff Dike return &null_chan;
181da177e4SLinus Torvalds }
191da177e4SLinus Torvalds
null_open(int input,int output,int primary,void * d,char ** dev_out)201da177e4SLinus Torvalds static int null_open(int input, int output, int primary, void *d,
211da177e4SLinus Torvalds char **dev_out)
221da177e4SLinus Torvalds {
23e99525f9SJeff Dike int fd;
24e99525f9SJeff Dike
251da177e4SLinus Torvalds *dev_out = NULL;
26e99525f9SJeff Dike
27e99525f9SJeff Dike fd = open(DEV_NULL, O_RDWR);
28e99525f9SJeff Dike return (fd < 0) ? -errno : fd;
291da177e4SLinus Torvalds }
301da177e4SLinus Torvalds
null_read(int fd,char * c_out,void * unused)311da177e4SLinus Torvalds static int null_read(int fd, char *c_out, void *unused)
321da177e4SLinus Torvalds {
33e99525f9SJeff Dike return -ENODEV;
341da177e4SLinus Torvalds }
351da177e4SLinus Torvalds
null_free(void * data)361da177e4SLinus Torvalds static void null_free(void *data)
371da177e4SLinus Torvalds {
381da177e4SLinus Torvalds }
391da177e4SLinus Torvalds
405e7672ecSJeff Dike const struct chan_ops null_ops = {
411da177e4SLinus Torvalds .type = "null",
421da177e4SLinus Torvalds .init = null_init,
431da177e4SLinus Torvalds .open = null_open,
441da177e4SLinus Torvalds .close = generic_close,
451da177e4SLinus Torvalds .read = null_read,
461da177e4SLinus Torvalds .write = generic_write,
471da177e4SLinus Torvalds .console_write = generic_console_write,
481da177e4SLinus Torvalds .window_size = generic_window_size,
491da177e4SLinus Torvalds .free = null_free,
501da177e4SLinus Torvalds .winch = 0,
511da177e4SLinus Torvalds };
52