xref: /dpdk/lib/cmdline/cmdline_os_unix.c (revision 50b567c66da268bcc7206dab92f690148d57ad8f)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2020 Dmitry Kozlyuk
3  */
4 
5 #include <poll.h>
6 #include <string.h>
7 #include <unistd.h>
8 
9 #include "cmdline_private.h"
10 
11 void
12 terminal_adjust(struct cmdline *cl)
13 {
14 	struct termios term;
15 
16 	tcgetattr(0, &cl->oldterm);
17 
18 	memcpy(&term, &cl->oldterm, sizeof(term));
19 	term.c_lflag &= ~(ICANON | ECHO | ISIG);
20 	tcsetattr(0, TCSANOW, &term);
21 
22 	setbuf(stdin, NULL);
23 }
24 
25 void
26 terminal_restore(const struct cmdline *cl)
27 {
28 	tcsetattr(fileno(stdin), TCSANOW, &cl->oldterm);
29 }
30 
31 int
32 cmdline_poll_char(struct cmdline *cl)
33 {
34 	struct pollfd pfd;
35 
36 	pfd.fd = cl->s_in;
37 	pfd.events = POLLIN;
38 	pfd.revents = 0;
39 
40 	return poll(&pfd, 1, 0);
41 }
42 
43 ssize_t
44 cmdline_read_char(struct cmdline *cl, char *c)
45 {
46 	return read(cl->s_in, c, 1);
47 }
48 
49 int
50 cmdline_vdprintf(int fd, const char *format, va_list op)
51 {
52 	return vdprintf(fd, format, op);
53 }
54 
55 /* This function is not needed on Linux, instead use sigaction() */
56 void
57 cmdline_cancel(__rte_unused struct cmdline *cl)
58 {
59 }
60