From: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
To: dev@dpdk.org
Cc: "Kinsella, Ray" <mdr@ashroe.eu>, Khoa To <khot@microsoft.com>,
Stephen Hemminger <stephen@networkplumber.org>,
Ferruh Yigit <ferruh.yigit@intel.com>,
Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,
Olivier Matz <olivier.matz@6wind.com>
Subject: [dpdk-dev] [PATCH v3 3/7] cmdline: add internal wrappers for character input
Date: Tue, 29 Sep 2020 00:50:48 +0300 [thread overview]
Message-ID: <20200928215052.23627-4-dmitry.kozliuk@gmail.com> (raw)
In-Reply-To: <20200928215052.23627-1-dmitry.kozliuk@gmail.com>
poll(3) is a purely Unix facility, so it cannot be directly used by
common code. read(2) is limited in device support outside of Unix.
Create wrapper functions and implement them for Unix.
Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
lib/librte_cmdline/cmdline.c | 14 ++++----------
lib/librte_cmdline/cmdline_os_unix.c | 20 ++++++++++++++++++++
lib/librte_cmdline/cmdline_private.h | 6 ++++++
3 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c
index 41f50cc56..0b2e1e30b 100644
--- a/lib/librte_cmdline/cmdline.c
+++ b/lib/librte_cmdline/cmdline.c
@@ -11,13 +11,12 @@
#include <stdarg.h>
#include <inttypes.h>
#include <fcntl.h>
-#include <poll.h>
#include <errno.h>
#include <netinet/in.h>
#include <rte_string_fns.h>
-#include "cmdline.h"
+#include "cmdline_private.h"
static void
cmdline_valid_buffer(struct rdline *rdl, const char *buf,
@@ -184,7 +183,6 @@ cmdline_quit(struct cmdline *cl)
int
cmdline_poll(struct cmdline *cl)
{
- struct pollfd pfd;
int status;
ssize_t read_status;
char c;
@@ -194,16 +192,12 @@ cmdline_poll(struct cmdline *cl)
else if (cl->rdl.status == RDLINE_EXITED)
return RDLINE_EXITED;
- pfd.fd = cl->s_in;
- pfd.events = POLLIN;
- pfd.revents = 0;
-
- status = poll(&pfd, 1, 0);
+ status = cmdline_poll_char(cl);
if (status < 0)
return status;
else if (status > 0) {
c = -1;
- read_status = read(cl->s_in, &c, 1);
+ read_status = cmdline_read_char(cl, &c);
if (read_status < 0)
return read_status;
@@ -225,7 +219,7 @@ cmdline_interact(struct cmdline *cl)
c = -1;
while (1) {
- if (read(cl->s_in, &c, 1) <= 0)
+ if (cmdline_read_char(cl, &c) <= 0)
break;
if (cmdline_in(cl, &c, 1) < 0)
break;
diff --git a/lib/librte_cmdline/cmdline_os_unix.c b/lib/librte_cmdline/cmdline_os_unix.c
index d50eb1c65..a4916c197 100644
--- a/lib/librte_cmdline/cmdline_os_unix.c
+++ b/lib/librte_cmdline/cmdline_os_unix.c
@@ -2,7 +2,9 @@
* Copyright (c) 2020 Dmitry Kozlyuk
*/
+#include <poll.h>
#include <string.h>
+#include <unistd.h>
#include "cmdline_private.h"
@@ -25,3 +27,21 @@ terminal_restore(const struct cmdline *cl)
{
tcsetattr(fileno(stdin), TCSANOW, &cl->oldterm);
}
+
+int
+cmdline_poll_char(struct cmdline *cl)
+{
+ struct pollfd pfd;
+
+ pfd.fd = cl->s_in;
+ pfd.events = POLLIN;
+ pfd.revents = 0;
+
+ return poll(&pfd, 1, 0);
+}
+
+ssize_t
+cmdline_read_char(struct cmdline *cl, char *c)
+{
+ return read(cl->s_in, c, 1);
+}
diff --git a/lib/librte_cmdline/cmdline_private.h b/lib/librte_cmdline/cmdline_private.h
index 50326e8a4..ac10de4f8 100644
--- a/lib/librte_cmdline/cmdline_private.h
+++ b/lib/librte_cmdline/cmdline_private.h
@@ -13,4 +13,10 @@ void terminal_adjust(struct cmdline *cl);
/* Restore terminal settings form oldterm. */
void terminal_restore(const struct cmdline *cl);
+/* Check if a single character can be read from input. */
+int cmdline_poll_char(struct cmdline *cl);
+
+/* Read one character from input. */
+ssize_t cmdline_read_char(struct cmdline *cl, char *c);
+
#endif
--
2.28.0
next prev parent reply other threads:[~2020-09-28 21:52 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-20 21:05 [dpdk-dev] [PATCH 0/7] cmdline: support Windows Dmitry Kozlyuk
2020-06-20 21:05 ` [dpdk-dev] [PATCH 1/7] cmdline: make implementation opaque Dmitry Kozlyuk
2020-06-20 21:05 ` [dpdk-dev] [PATCH 2/7] cmdline: add internal wrappers for terminal handling Dmitry Kozlyuk
2020-06-20 21:05 ` [dpdk-dev] [PATCH 3/7] cmdline: add internal wrappers for character input Dmitry Kozlyuk
2020-06-20 21:05 ` [dpdk-dev] [PATCH 4/7] cmdline: add internal wrapper for vdprintf Dmitry Kozlyuk
2020-06-20 21:05 ` [dpdk-dev] [PATCH 5/7] eal/windows: improve compatibility networking headers Dmitry Kozlyuk
2020-06-20 21:05 ` [dpdk-dev] [PATCH 6/7] cmdline: support Windows Dmitry Kozlyuk
2020-06-28 14:20 ` Fady Bader
2020-06-29 6:23 ` Ranjit Menon
2020-06-29 7:42 ` Dmitry Kozlyuk
2020-06-29 8:12 ` Tal Shnaiderman
2020-06-29 23:56 ` Dmitry Kozlyuk
2020-07-08 1:09 ` Dmitry Kozlyuk
2020-06-20 21:05 ` [dpdk-dev] [PATCH 7/7] examples/cmdline: build on Windows Dmitry Kozlyuk
2020-07-17 22:16 ` [dpdk-dev] [PATCH 0/7] cmdline: support Windows Narcisa Ana Maria Vasile
2020-07-30 18:08 ` Kadam, Pallavi
2020-07-30 21:06 ` [dpdk-dev] [PATCH v2 " Dmitry Kozlyuk
2020-07-30 21:06 ` [dpdk-dev] [PATCH v2 1/7] cmdline: make implementation opaque Dmitry Kozlyuk
2020-08-05 9:31 ` Kinsella, Ray
2020-08-05 11:17 ` Dmitry Kozlyuk
2020-09-30 8:11 ` Kinsella, Ray
2020-09-30 15:26 ` Dmitry Kozlyuk
2020-09-17 13:34 ` Olivier Matz
2020-09-17 17:05 ` Stephen Hemminger
2020-09-18 8:33 ` Bruce Richardson
2020-09-18 12:13 ` Ferruh Yigit
2020-09-18 13:23 ` Kinsella, Ray
2020-09-17 23:13 ` Dmitry Kozlyuk
2020-09-18 13:31 ` Kinsella, Ray
2020-07-30 21:06 ` [dpdk-dev] [PATCH v2 2/7] cmdline: add internal wrappers for terminal handling Dmitry Kozlyuk
2020-07-30 21:06 ` [dpdk-dev] [PATCH v2 3/7] cmdline: add internal wrappers for character input Dmitry Kozlyuk
2020-07-30 21:06 ` [dpdk-dev] [PATCH v2 4/7] cmdline: add internal wrapper for vdprintf Dmitry Kozlyuk
2020-07-30 21:06 ` [dpdk-dev] [PATCH v2 5/7] eal/windows: improve compatibility networking headers Dmitry Kozlyuk
2020-07-30 21:06 ` [dpdk-dev] [PATCH v2 6/7] cmdline: support Windows Dmitry Kozlyuk
2020-07-30 21:06 ` [dpdk-dev] [PATCH v2 7/7] examples/cmdline: build on Windows Dmitry Kozlyuk
2020-09-26 1:33 ` [dpdk-dev] [EXTERNAL] " Narcisa Ana Maria Vasile
2020-09-26 6:03 ` Khoa To
2020-09-28 21:50 ` [dpdk-dev] [PATCH v3 0/7] cmdline: support Windows Dmitry Kozlyuk
2020-09-28 21:50 ` [dpdk-dev] [PATCH v3 1/7] cmdline: make implementation logically opaque Dmitry Kozlyuk
2020-09-30 8:12 ` Kinsella, Ray
2020-09-28 21:50 ` [dpdk-dev] [PATCH v3 2/7] cmdline: add internal wrappers for terminal handling Dmitry Kozlyuk
2020-09-28 21:50 ` Dmitry Kozlyuk [this message]
2020-09-28 21:50 ` [dpdk-dev] [PATCH v3 4/7] cmdline: add internal wrapper for vdprintf Dmitry Kozlyuk
2020-09-28 21:50 ` [dpdk-dev] [PATCH v3 5/7] eal/windows: improve compatibility networking headers Dmitry Kozlyuk
2020-09-28 21:50 ` [dpdk-dev] [PATCH v3 6/7] cmdline: support Windows Dmitry Kozlyuk
2020-10-14 22:31 ` Thomas Monjalon
2020-09-28 21:50 ` [dpdk-dev] [PATCH v3 7/7] examples/cmdline: build on Windows Dmitry Kozlyuk
2020-10-14 22:33 ` Thomas Monjalon
2020-10-05 15:33 ` [dpdk-dev] [PATCH v3 0/7] cmdline: support Windows Olivier Matz
2020-10-14 22:41 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200928215052.23627-4-dmitry.kozliuk@gmail.com \
--to=dmitry.kozliuk@gmail.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=khot@microsoft.com \
--cc=mdr@ashroe.eu \
--cc=olivier.matz@6wind.com \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).