diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-09-23 19:34:26 +0000 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-09-23 19:34:26 +0000 |
commit | a7d186c796455fd5fc400c4b06e4b70554b77353 (patch) | |
tree | 6034fdc4d98c1c12fe2fdffb238b4600260df494 | |
parent | 869ef0a627952545437fab77c3b97854a189625b (diff) | |
download | bcm5719-llvm-a7d186c796455fd5fc400c4b06e4b70554b77353.tar.gz bcm5719-llvm-a7d186c796455fd5fc400c4b06e4b70554b77353.zip |
[Host] File::GetWaitableHandle() should call fileno()
If the file has m_stream, it may not have a m_descriptor.
GetWaitableHandle() should call GetDescriptor(), which will call
fileno(), so it will get waitable descriptor whenever one is available.
Patch by: Lawrence D'Anna
Differential revision: https://reviews.llvm.org/D67789
llvm-svn: 372644
-rw-r--r-- | lldb/source/Host/common/File.cpp | 2 | ||||
-rw-r--r-- | lldb/unittests/Host/CMakeLists.txt | 1 | ||||
-rw-r--r-- | lldb/unittests/Host/FileTest.cpp | 36 |
3 files changed, 38 insertions, 1 deletions
diff --git a/lldb/source/Host/common/File.cpp b/lldb/source/Host/common/File.cpp index 269548974d1..78b384b66cd 100644 --- a/lldb/source/Host/common/File.cpp +++ b/lldb/source/Host/common/File.cpp @@ -91,7 +91,7 @@ int File::GetDescriptor() const { return kInvalidDescriptor; } -IOObject::WaitableHandle File::GetWaitableHandle() { return m_descriptor; } +IOObject::WaitableHandle File::GetWaitableHandle() { return GetDescriptor(); } void File::SetDescriptor(int fd, bool transfer_ownership) { if (IsValid()) diff --git a/lldb/unittests/Host/CMakeLists.txt b/lldb/unittests/Host/CMakeLists.txt index cf7c7cacfe2..b88aa97a900 100644 --- a/lldb/unittests/Host/CMakeLists.txt +++ b/lldb/unittests/Host/CMakeLists.txt @@ -2,6 +2,7 @@ set (FILES ConnectionFileDescriptorTest.cpp FileActionTest.cpp FileSystemTest.cpp + FileTest.cpp HostInfoTest.cpp HostTest.cpp MainLoopTest.cpp diff --git a/lldb/unittests/Host/FileTest.cpp b/lldb/unittests/Host/FileTest.cpp new file mode 100644 index 00000000000..4f7d0e2b218 --- /dev/null +++ b/lldb/unittests/Host/FileTest.cpp @@ -0,0 +1,36 @@ +//===-- FileTest.cpp --------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "lldb/Host/File.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/FileUtilities.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Program.h" +#include "gtest/gtest.h" + +using namespace lldb; +using namespace lldb_private; + +TEST(File, GetWaitableHandleFileno) { + const auto *Info = testing::UnitTest::GetInstance()->current_test_info(); + + llvm::SmallString<128> name; + int fd; + llvm::sys::fs::createTemporaryFile(llvm::Twine(Info->test_case_name()) + "-" + + Info->name(), + "test", fd, name); + llvm::FileRemover remover(name); + ASSERT_GE(fd, 0); + + FILE *stream = fdopen(fd, "r"); + ASSERT_TRUE(stream); + + File file(stream, true); + EXPECT_EQ(file.GetWaitableHandle(), fd); +} |