wreadln: move poll() call to WaitUserInput.hxx
authorMax Kellermann <max@musicpd.org>
Tue, 9 Apr 2019 21:17:07 +0000 (23:17 +0200)
committerMax Kellermann <max@musicpd.org>
Tue, 9 Apr 2019 21:17:07 +0000 (23:17 +0200)
src/WaitUserInput.hxx [new file with mode: 0644]
src/wreadln.cxx

diff --git a/src/WaitUserInput.hxx b/src/WaitUserInput.hxx
new file mode 100644 (file)
index 0000000..e6a29a1
--- /dev/null
@@ -0,0 +1,45 @@
+/* ncmpc (Ncurses MPD Client)
+ * (c) 2004-2019 The Music Player Daemon Project
+ * Project homepage: http://musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef WAIT_USER_INPUT_HXX
+#define WAIT_USER_INPUT_HXX
+
+#include <sys/poll.h>
+#include <unistd.h>
+
+class WaitUserInput {
+       struct pollfd pfd;
+
+public:
+       WaitUserInput() noexcept {
+               pfd.fd = STDIN_FILENO;
+               pfd.events = POLLIN;
+       }
+
+       bool IsReady() noexcept {
+               return Poll(0);
+       }
+
+private:
+       bool Poll(int timeout) noexcept {
+               return poll(&pfd, 1, timeout) > 0;
+       }
+};
+
+#endif
index 8d9edf3..f036f7f 100644 (file)
@@ -1,5 +1,5 @@
 /* ncmpc (Ncurses MPD Client)
- * (c) 2004-2018 The Music Player Daemon Project
+ * (c) 2004-2019 The Music Player Daemon Project
  * Project homepage: http://musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -32,7 +32,7 @@
 #include <string.h>
 
 #if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(_WIN32)
-#include <sys/poll.h>
+#include "WaitUserInput.hxx"
 #endif
 
 #define KEY_CTRL_A   1
@@ -229,11 +229,7 @@ wreadln::InsertByte(int key) noexcept
        size_t length = 1;
 #if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(_WIN32)
        char buffer[32] = { (char)key };
-       struct pollfd pfd = {
-               .fd = 0,
-               .events = POLLIN,
-               .revents = 0,
-       };
+       WaitUserInput wui;
 
        /* wide version: try to complete the multibyte sequence */
 
@@ -244,7 +240,7 @@ wreadln::InsertByte(int key) noexcept
 
                /* poll for more bytes on stdin, without timeout */
 
-               if (poll(&pfd, 1, 0) <= 0)
+               if (!wui.IsReady())
                        /* no more input from keyboard */
                        break;