summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-09-23 19:34:26 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2019-09-23 19:34:26 +0000
commita7d186c796455fd5fc400c4b06e4b70554b77353 (patch)
tree6034fdc4d98c1c12fe2fdffb238b4600260df494
parent869ef0a627952545437fab77c3b97854a189625b (diff)
downloadbcm5719-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.cpp2
-rw-r--r--lldb/unittests/Host/CMakeLists.txt1
-rw-r--r--lldb/unittests/Host/FileTest.cpp36
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);
+}
OpenPOWER on IntegriCloud