cmdline: fix warning for unused return value
[dpdk.git] / lib / librte_cmdline / cmdline.c
index e61c4f2..d749165 100644 (file)
@@ -65,6 +65,7 @@
 #include <stdarg.h>
 #include <inttypes.h>
 #include <fcntl.h>
+#include <poll.h>
 #include <errno.h>
 #include <termios.h>
 #include <netinet/in.h>
@@ -129,6 +130,7 @@ struct cmdline *
 cmdline_new(cmdline_parse_ctx_t *ctx, const char *prompt, int s_in, int s_out)
 {
        struct cmdline *cl;
+       int ret;
 
        if (!ctx || !prompt)
                return NULL;
@@ -141,8 +143,13 @@ cmdline_new(cmdline_parse_ctx_t *ctx, const char *prompt, int s_in, int s_out)
        cl->s_out = s_out;
        cl->ctx = ctx;
 
-       rdline_init(&cl->rdl, cmdline_write_char,
-                   cmdline_valid_buffer, cmdline_complete_buffer);
+       ret = rdline_init(&cl->rdl, cmdline_write_char, cmdline_valid_buffer,
+                       cmdline_complete_buffer);
+       if (ret != 0) {
+               free(cl);
+               return NULL;
+       }
+
        cl->rdl.opaque = cl;
        cmdline_set_prompt(cl, prompt);
        rdline_newline(&cl->rdl, cl->prompt);
@@ -192,11 +199,14 @@ cmdline_printf(const struct cmdline *cl, const char *fmt, ...)
        va_start(ap, fmt);
        ret = vsnprintf(buf, BUFSIZ, fmt, ap);
        va_end(ap);
-       if (ret < 0)
+       if (ret < 0) {
+               free(buf);
                return;
+       }
        if (ret >= BUFSIZ)
                ret = BUFSIZ - 1;
-       write(cl->s_out, buf, ret);
+       ret = write(cl->s_out, buf, ret);
+       (void)ret;
        free(buf);
 #endif
 }
@@ -246,6 +256,40 @@ cmdline_quit(struct cmdline *cl)
        rdline_quit(&cl->rdl);
 }
 
+int
+cmdline_poll(struct cmdline *cl)
+{
+       struct pollfd pfd;
+       int status;
+       ssize_t read_status;
+       char c;
+
+       if (!cl)
+               return -EINVAL;
+       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);
+       if (status < 0)
+               return status;
+       else if (status > 0) {
+               c = -1;
+               read_status = read(cl->s_in, &c, 1);
+               if (read_status < 0)
+                       return read_status;
+
+               status = cmdline_in(cl, &c, 1);
+               if (status < 0 && cl->rdl.status != RDLINE_EXITED)
+                       return status;
+       }
+
+       return cl->rdl.status;
+}
+
 void
 cmdline_interact(struct cmdline *cl)
 {