summaryrefslogtreecommitdiff
path: root/source/Host/common/File.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Host/common/File.cpp')
-rw-r--r--source/Host/common/File.cpp132
1 files changed, 7 insertions, 125 deletions
diff --git a/source/Host/common/File.cpp b/source/Host/common/File.cpp
index 3c3d55df2207..810c15588402 100644
--- a/source/Host/common/File.cpp
+++ b/source/Host/common/File.cpp
@@ -27,9 +27,10 @@
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/Errno.h"
#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/Process.h" // for llvm::sys::Process::FileDescriptorHasColors()
+#include "llvm/Support/Process.h"
#include "lldb/Host/Config.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Host/Host.h"
#include "lldb/Utility/DataBufferHeap.h"
#include "lldb/Utility/FileSpec.h"
@@ -71,26 +72,6 @@ static const char *GetStreamOpenModeFromOptions(uint32_t options) {
int File::kInvalidDescriptor = -1;
FILE *File::kInvalidStream = NULL;
-File::File(const char *path, uint32_t options, uint32_t permissions)
- : IOObject(eFDTypeFile, false), m_descriptor(kInvalidDescriptor),
- m_stream(kInvalidStream), m_options(), m_own_stream(false),
- m_is_interactive(eLazyBoolCalculate),
- m_is_real_terminal(eLazyBoolCalculate) {
- Open(path, options, permissions);
-}
-
-File::File(const FileSpec &filespec, uint32_t options, uint32_t permissions)
- : IOObject(eFDTypeFile, false), m_descriptor(kInvalidDescriptor),
- m_stream(kInvalidStream), m_options(0), m_own_stream(false),
- m_is_interactive(eLazyBoolCalculate),
- m_is_real_terminal(eLazyBoolCalculate)
-
-{
- if (filespec) {
- Open(filespec.GetPath().c_str(), options, permissions);
- }
-}
-
File::~File() { Close(); }
int File::GetDescriptor() const {
@@ -159,108 +140,6 @@ void File::SetStream(FILE *fh, bool transfer_ownership) {
m_own_stream = transfer_ownership;
}
-static int DoOpen(const char *path, int flags, int mode) {
-#ifdef _MSC_VER
- std::wstring wpath;
- if (!llvm::ConvertUTF8toWide(path, wpath))
- return -1;
- int result;
- ::_wsopen_s(&result, wpath.c_str(), flags, _SH_DENYNO, mode);
- return result;
-#else
- return ::open(path, flags, mode);
-#endif
-}
-
-Status File::Open(const char *path, uint32_t options, uint32_t permissions) {
- Status error;
- if (IsValid())
- Close();
-
- int oflag = 0;
- const bool read = options & eOpenOptionRead;
- const bool write = options & eOpenOptionWrite;
- if (write) {
- if (read)
- oflag |= O_RDWR;
- else
- oflag |= O_WRONLY;
-
- if (options & eOpenOptionAppend)
- oflag |= O_APPEND;
-
- if (options & eOpenOptionTruncate)
- oflag |= O_TRUNC;
-
- if (options & eOpenOptionCanCreate)
- oflag |= O_CREAT;
-
- if (options & eOpenOptionCanCreateNewOnly)
- oflag |= O_CREAT | O_EXCL;
- } else if (read) {
- oflag |= O_RDONLY;
-
-#ifndef _WIN32
- if (options & eOpenOptionDontFollowSymlinks)
- oflag |= O_NOFOLLOW;
-#endif
- }
-
-#ifndef _WIN32
- if (options & eOpenOptionNonBlocking)
- oflag |= O_NONBLOCK;
- if (options & eOpenOptionCloseOnExec)
- oflag |= O_CLOEXEC;
-#else
- oflag |= O_BINARY;
-#endif
-
- mode_t mode = 0;
- if (oflag & O_CREAT) {
- if (permissions & lldb::eFilePermissionsUserRead)
- mode |= S_IRUSR;
- if (permissions & lldb::eFilePermissionsUserWrite)
- mode |= S_IWUSR;
- if (permissions & lldb::eFilePermissionsUserExecute)
- mode |= S_IXUSR;
- if (permissions & lldb::eFilePermissionsGroupRead)
- mode |= S_IRGRP;
- if (permissions & lldb::eFilePermissionsGroupWrite)
- mode |= S_IWGRP;
- if (permissions & lldb::eFilePermissionsGroupExecute)
- mode |= S_IXGRP;
- if (permissions & lldb::eFilePermissionsWorldRead)
- mode |= S_IROTH;
- if (permissions & lldb::eFilePermissionsWorldWrite)
- mode |= S_IWOTH;
- if (permissions & lldb::eFilePermissionsWorldExecute)
- mode |= S_IXOTH;
- }
-
- m_descriptor = llvm::sys::RetryAfterSignal(-1, DoOpen, path, oflag, mode);
- if (!DescriptorIsValid())
- error.SetErrorToErrno();
- else {
- m_should_close_fd = true;
- m_options = options;
- }
-
- return error;
-}
-
-uint32_t File::GetPermissions(const FileSpec &file_spec, Status &error) {
- if (file_spec) {
- error.Clear();
- auto Perms = llvm::sys::fs::getPermissions(file_spec.GetPath());
- if (Perms)
- return *Perms;
- error = Status(Perms.getError());
- return 0;
- } else
- error.SetErrorString("empty file spec");
- return 0;
-}
-
uint32_t File::GetPermissions(Status &error) const {
int fd = GetDescriptor();
if (fd != kInvalidDescriptor) {
@@ -315,7 +194,7 @@ Status File::GetFileSpec(FileSpec &file_spec) const {
if (::fcntl(GetDescriptor(), F_GETPATH, path) == -1)
error.SetErrorToErrno();
else
- file_spec.SetFile(path, false, FileSpec::Style::native);
+ file_spec.SetFile(path, FileSpec::Style::native);
} else {
error.SetErrorString("invalid file handle");
}
@@ -330,7 +209,7 @@ Status File::GetFileSpec(FileSpec &file_spec) const {
error.SetErrorToErrno();
else {
path[len] = '\0';
- file_spec.SetFile(path, false, FileSpec::Style::native);
+ file_spec.SetFile(path, FileSpec::Style::native);
}
}
#else
@@ -806,6 +685,9 @@ void File::CalculateInteractiveAndTerminal() {
if (_isatty(fd)) {
m_is_interactive = eLazyBoolYes;
m_is_real_terminal = eLazyBoolYes;
+#if defined(ENABLE_VIRTUAL_TERMINAL_PROCESSING)
+ m_supports_colors = eLazyBoolYes;
+#endif
}
#else
if (isatty(fd)) {