diff options
| author | Zachary Turner <zturner@google.com> | 2016-10-05 17:07:34 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2016-10-05 17:07:34 +0000 |
| commit | 5a8ad4591bb688760c018b4f2e3ec51b3bb3c783 (patch) | |
| tree | 31b2c619792632567e165cf0d45e710f350c9fce /lldb/source/Utility/SelectHelper.cpp | |
| parent | d6ef28462bd17c39edef192a1298060910b0e15b (diff) | |
| download | bcm5719-llvm-5a8ad4591bb688760c018b4f2e3ec51b3bb3c783.tar.gz bcm5719-llvm-5a8ad4591bb688760c018b4f2e3ec51b3bb3c783.zip | |
Make lldb -Werror clean on Windows.
Differential Revision: https://reviews.llvm.org/D25247
llvm-svn: 283344
Diffstat (limited to 'lldb/source/Utility/SelectHelper.cpp')
| -rw-r--r-- | lldb/source/Utility/SelectHelper.cpp | 73 |
1 files changed, 41 insertions, 32 deletions
diff --git a/lldb/source/Utility/SelectHelper.cpp b/lldb/source/Utility/SelectHelper.cpp index cd9a0f6e68b..805bcf2c795 100644 --- a/lldb/source/Utility/SelectHelper.cpp +++ b/lldb/source/Utility/SelectHelper.cpp @@ -45,13 +45,19 @@ void SelectHelper::SetTimeout(const std::chrono::microseconds &timeout) { m_end_time = steady_clock::time_point(steady_clock::now() + timeout); } -void SelectHelper::FDSetRead(int fd) { m_fd_map[fd].read_set = true; } +void SelectHelper::FDSetRead(lldb::socket_t fd) { + m_fd_map[fd].read_set = true; +} -void SelectHelper::FDSetWrite(int fd) { m_fd_map[fd].write_set = true; } +void SelectHelper::FDSetWrite(lldb::socket_t fd) { + m_fd_map[fd].write_set = true; +} -void SelectHelper::FDSetError(int fd) { m_fd_map[fd].error_set = true; } +void SelectHelper::FDSetError(lldb::socket_t fd) { + m_fd_map[fd].error_set = true; +} -bool SelectHelper::FDIsSetRead(int fd) const { +bool SelectHelper::FDIsSetRead(lldb::socket_t fd) const { auto pos = m_fd_map.find(fd); if (pos != m_fd_map.end()) return pos->second.read_is_set; @@ -59,7 +65,7 @@ bool SelectHelper::FDIsSetRead(int fd) const { return false; } -bool SelectHelper::FDIsSetWrite(int fd) const { +bool SelectHelper::FDIsSetWrite(lldb::socket_t fd) const { auto pos = m_fd_map.find(fd); if (pos != m_fd_map.end()) return pos->second.write_is_set; @@ -67,7 +73,7 @@ bool SelectHelper::FDIsSetWrite(int fd) const { return false; } -bool SelectHelper::FDIsSetError(int fd) const { +bool SelectHelper::FDIsSetError(lldb::socket_t fd) const { auto pos = m_fd_map.find(fd); if (pos != m_fd_map.end()) return pos->second.error_is_set; @@ -75,6 +81,14 @@ bool SelectHelper::FDIsSetError(int fd) const { return false; } +static void updateMaxFd(llvm::Optional<lldb::socket_t> &vold, + lldb::socket_t vnew) { + if (!vold.hasValue()) + vold = vnew; + else + vold = std::max(*vold, vnew); +} + lldb_private::Error SelectHelper::Select() { lldb_private::Error error; #ifdef _MSC_VER @@ -85,13 +99,13 @@ lldb_private::Error SelectHelper::Select() { return lldb_private::Error("Too many file descriptors for select()"); #endif - int max_read_fd = -1; - int max_write_fd = -1; - int max_error_fd = -1; - int max_fd = -1; + llvm::Optional<lldb::socket_t> max_read_fd; + llvm::Optional<lldb::socket_t> max_write_fd; + llvm::Optional<lldb::socket_t> max_error_fd; + llvm::Optional<lldb::socket_t> max_fd; for (auto &pair : m_fd_map) { pair.second.PrepareForSelect(); - const int fd = pair.first; + const lldb::socket_t fd = pair.first; #if !defined(__APPLE__) && !defined(_MSC_VER) lldbassert(fd < FD_SETSIZE); if (fd >= FD_SETSIZE) { @@ -99,26 +113,21 @@ lldb_private::Error SelectHelper::Select() { return error; } #endif - if (pair.second.read_set) { - max_read_fd = std::max<int>(fd, max_read_fd); - max_fd = std::max<int>(fd, max_fd); - } - if (pair.second.write_set) { - max_write_fd = std::max<int>(fd, max_write_fd); - max_fd = std::max<int>(fd, max_fd); - } - if (pair.second.error_set) { - max_error_fd = std::max<int>(fd, max_error_fd); - max_fd = std::max<int>(fd, max_fd); - } + if (pair.second.read_set) + updateMaxFd(max_read_fd, fd); + if (pair.second.write_set) + updateMaxFd(max_write_fd, fd); + if (pair.second.error_set) + updateMaxFd(max_error_fd, fd); + updateMaxFd(max_fd, fd); } - if (max_fd == -1) { + if (!max_fd.hasValue()) { error.SetErrorString("no valid file descriptors"); return error; } - const int nfds = max_fd + 1; + const unsigned nfds = static_cast<unsigned>(*max_fd) + 1; fd_set *read_fdset_ptr = nullptr; fd_set *write_fdset_ptr = nullptr; fd_set *error_fdset_ptr = nullptr; @@ -130,15 +139,15 @@ lldb_private::Error SelectHelper::Select() { llvm::SmallVector<fd_set, 1> write_fdset; llvm::SmallVector<fd_set, 1> error_fdset; - if (max_read_fd >= 0) { + if (max_read_fd.hasValue()) { read_fdset.resize((nfds / FD_SETSIZE) + 1); read_fdset_ptr = read_fdset.data(); } - if (max_write_fd >= 0) { + if (max_write_fd.hasValue()) { write_fdset.resize((nfds / FD_SETSIZE) + 1); write_fdset_ptr = write_fdset.data(); } - if (max_error_fd >= 0) { + if (max_error_fd.hasValue()) { error_fdset.resize((nfds / FD_SETSIZE) + 1); error_fdset_ptr = error_fdset.data(); } @@ -153,15 +162,15 @@ lldb_private::Error SelectHelper::Select() { fd_set write_fdset; fd_set error_fdset; - if (max_read_fd >= 0) { + if (max_read_fd.hasValue()) { FD_ZERO(&read_fdset); read_fdset_ptr = &read_fdset; } - if (max_write_fd >= 0) { + if (max_write_fd.hasValue()) { FD_ZERO(&write_fdset); write_fdset_ptr = &write_fdset; } - if (max_error_fd >= 0) { + if (max_error_fd.hasValue()) { FD_ZERO(&error_fdset); error_fdset_ptr = &error_fdset; } @@ -170,7 +179,7 @@ lldb_private::Error SelectHelper::Select() { // Set the FD bits in the fdsets for read/write/error //---------------------------------------------------------------------- for (auto &pair : m_fd_map) { - const int fd = pair.first; + const lldb::socket_t fd = pair.first; if (pair.second.read_set) FD_SET(fd, read_fdset_ptr); |

