[Lldb-commits] [lldb] 13dea03 - [lldb] Fix some bugs in the Pipe class and add tests

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Sun Jan 10 12:59:27 PST 2021


Author: Pavel Labath
Date: 2021-01-10T21:59:16+01:00
New Revision: 13dea030b3d794d05a08dd0080c35844c9ca1b30

URL: https://github.com/llvm/llvm-project/commit/13dea030b3d794d05a08dd0080c35844c9ca1b30
DIFF: https://github.com/llvm/llvm-project/commit/13dea030b3d794d05a08dd0080c35844c9ca1b30.diff

LOG: [lldb] Fix some bugs in the Pipe class and add tests

- s/createUniqueFile/createUniquePath -- we don't want to create the file,
  just the file name
- s/data()/str().c_str()/ -- paths given to system apis must be
  null-terminated

Added: 
    lldb/unittests/Host/PipeTest.cpp

Modified: 
    lldb/source/Host/posix/PipePosix.cpp
    lldb/unittests/Host/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/lldb/source/Host/posix/PipePosix.cpp b/lldb/source/Host/posix/PipePosix.cpp
index 780222dffbf8..7cd05a1ad2eb 100644
--- a/lldb/source/Host/posix/PipePosix.cpp
+++ b/lldb/source/Host/posix/PipePosix.cpp
@@ -117,7 +117,7 @@ Status PipePosix::CreateNew(llvm::StringRef name, bool child_process_inherit) {
     return Status("Pipe is already opened");
 
   Status error;
-  if (::mkfifo(name.data(), 0660) != 0)
+  if (::mkfifo(name.str().c_str(), 0660) != 0)
     error.SetErrorToErrno();
 
   return error;
@@ -138,8 +138,8 @@ Status PipePosix::CreateWithUniqueName(llvm::StringRef prefix,
   // try again.
   Status error;
   do {
-    llvm::sys::fs::createUniqueFile(tmpdir_file_spec.GetPath(),
-                                    named_pipe_path);
+    llvm::sys::fs::createUniquePath(tmpdir_file_spec.GetPath(), named_pipe_path,
+                                    /*MakeAbsolute=*/false);
     error = CreateNew(named_pipe_path, child_process_inherit);
   } while (error.GetError() == EEXIST);
 
@@ -158,7 +158,7 @@ Status PipePosix::OpenAsReader(llvm::StringRef name,
     flags |= O_CLOEXEC;
 
   Status error;
-  int fd = llvm::sys::RetryAfterSignal(-1, ::open, name.data(), flags);
+  int fd = llvm::sys::RetryAfterSignal(-1, ::open, name.str().c_str(), flags);
   if (fd != -1)
     m_fds[READ] = fd;
   else
@@ -189,7 +189,7 @@ PipePosix::OpenAsWriterWithTimeout(llvm::StringRef name,
     }
 
     errno = 0;
-    int fd = ::open(name.data(), flags);
+    int fd = ::open(name.str().c_str(), flags);
     if (fd == -1) {
       const auto errno_copy = errno;
       // We may get ENXIO if a reader side of the pipe hasn't opened yet.

diff  --git a/lldb/unittests/Host/CMakeLists.txt b/lldb/unittests/Host/CMakeLists.txt
index 663645c986f0..1cc0cb081e49 100644
--- a/lldb/unittests/Host/CMakeLists.txt
+++ b/lldb/unittests/Host/CMakeLists.txt
@@ -7,6 +7,7 @@ set (FILES
   HostTest.cpp
   MainLoopTest.cpp
   NativeProcessProtocolTest.cpp
+  PipeTest.cpp
   ProcessLaunchInfoTest.cpp
   SocketAddressTest.cpp
   SocketTest.cpp

diff  --git a/lldb/unittests/Host/PipeTest.cpp b/lldb/unittests/Host/PipeTest.cpp
new file mode 100644
index 000000000000..e8d2c49c4490
--- /dev/null
+++ b/lldb/unittests/Host/PipeTest.cpp
@@ -0,0 +1,48 @@
+//===-- PipeTest.cpp ------------------------------------------------------===//
+//
+// 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/Pipe.h"
+#include "TestingSupport/SubsystemRAII.h"
+#include "lldb/Host/FileSystem.h"
+#include "lldb/Host/HostInfo.h"
+#include "gtest/gtest.h"
+
+using namespace lldb_private;
+
+class PipeTest : public testing::Test {
+public:
+  SubsystemRAII<FileSystem, HostInfo> subsystems;
+};
+
+TEST_F(PipeTest, CreateWithUniqueName) {
+  Pipe pipe;
+  llvm::SmallString<0> name;
+  ASSERT_THAT_ERROR(pipe.CreateWithUniqueName("PipeTest-CreateWithUniqueName",
+                                              /*child_process_inherit=*/false,
+                                              name)
+                        .ToError(),
+                    llvm::Succeeded());
+}
+
+TEST_F(PipeTest, OpenAsReader) {
+  Pipe pipe;
+  llvm::SmallString<0> name;
+  ASSERT_THAT_ERROR(pipe.CreateWithUniqueName("PipeTest-OpenAsReader",
+                                              /*child_process_inherit=*/false,
+                                              name)
+                        .ToError(),
+                    llvm::Succeeded());
+
+  // Ensure name is not null-terminated
+  size_t name_len = name.size();
+  name += "foobar";
+  llvm::StringRef name_ref(name.data(), name_len);
+  ASSERT_THAT_ERROR(
+      pipe.OpenAsReader(name_ref, /*child_process_inherit=*/false).ToError(),
+      llvm::Succeeded());
+}


        


More information about the lldb-commits mailing list