diff options
author | Pavel Labath <labath@google.com> | 2017-03-07 13:19:15 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2017-03-07 13:19:15 +0000 |
commit | 30e6cbfcfca4836c2b3497d84ffc2043b548b2a6 (patch) | |
tree | 3b24106c96c514a5490b04bfe541e2e6a2ac5518 /lldb | |
parent | 3d0af578ccc071dc1f9fc1672af55a969e0beb5a (diff) | |
download | bcm5719-llvm-30e6cbfcfca4836c2b3497d84ffc2043b548b2a6.tar.gz bcm5719-llvm-30e6cbfcfca4836c2b3497d84ffc2043b548b2a6.zip |
Revert "Use LLVM for all stat-related functionality."
this reverts r297116 because it breaks the unittests and
TestCompDirSymlink. The ModuleCache unit test is trivially fixable, but
the CompDirSymlink failure is a symptom of a deeper problem: llvm's stat
functionality is not a drop-in replacement for lldb's. The former is
based on stat(2) (which does symlink resolution), while the latter is
based on lstat(2) (which does not).
This also reverts subsequent build fixes (r297128, r297120, 297117) and
r297119 (Remove FileSpec dependency on FileSystem) which builds on top
of this.
llvm-svn: 297139
Diffstat (limited to 'lldb')
38 files changed, 289 insertions, 261 deletions
diff --git a/lldb/include/lldb/Host/FileSpec.h b/lldb/include/lldb/Host/FileSpec.h index 0072822b813..755fa034189 100644 --- a/lldb/include/lldb/Host/FileSpec.h +++ b/lldb/include/lldb/Host/FileSpec.h @@ -22,7 +22,6 @@ #include "lldb/lldb-private.h" #include "llvm/ADT/Triple.h" -#include "llvm/Support/FileSystem.h" #include "llvm/Support/FormatVariadic.h" namespace lldb_private { @@ -47,6 +46,17 @@ namespace lldb_private { //---------------------------------------------------------------------- class FileSpec { public: + typedef enum FileType { + eFileTypeInvalid = -1, + eFileTypeUnknown = 0, + eFileTypeDirectory, + eFileTypePipe, + eFileTypeRegular, + eFileTypeSocket, + eFileTypeSymbolicLink, + eFileTypeOther + } FileType; + enum PathSyntax { ePathSyntaxPosix, ePathSyntaxWindows, @@ -445,6 +455,8 @@ public: //------------------------------------------------------------------ ConstString GetFileNameStrippingExtension() const; + FileType GetFileType() const; + //------------------------------------------------------------------ /// Return the current permissions of the path. /// @@ -459,6 +471,20 @@ public: //------------------------------------------------------------------ uint32_t GetPermissions() const; + bool IsDirectory() const { + return GetFileType() == FileSpec::eFileTypeDirectory; + } + + bool IsPipe() const { return GetFileType() == FileSpec::eFileTypePipe; } + + bool IsRegularFile() const { + return GetFileType() == FileSpec::eFileTypeRegular; + } + + bool IsSocket() const { return GetFileType() == FileSpec::eFileTypeSocket; } + + bool IsSymbolicLink() const; + //------------------------------------------------------------------ /// Get the memory cost of this object. /// @@ -570,7 +596,7 @@ public: }; typedef EnumerateDirectoryResult (*EnumerateDirectoryCallbackType)( - void *baton, llvm::sys::fs::file_type file_type, const FileSpec &spec); + void *baton, FileType file_type, const FileSpec &spec); static EnumerateDirectoryResult EnumerateDirectory(llvm::StringRef dir_path, bool find_directories, @@ -578,8 +604,8 @@ public: EnumerateDirectoryCallbackType callback, void *callback_baton); - typedef std::function<EnumerateDirectoryResult( - llvm::sys::fs::file_type file_type, const FileSpec &spec)> + typedef std::function<EnumerateDirectoryResult(FileType file_type, + const FileSpec &spec)> DirectoryCallback; static EnumerateDirectoryResult diff --git a/lldb/source/API/SBPlatform.cpp b/lldb/source/API/SBPlatform.cpp index 0f1b99236a7..33d430de8f9 100644 --- a/lldb/source/API/SBPlatform.cpp +++ b/lldb/source/API/SBPlatform.cpp @@ -19,8 +19,6 @@ #include "lldb/Target/Target.h" #include "lldb/Utility/Error.h" -#include "llvm/Support/FileSystem.h" - #include <functional> using namespace lldb; @@ -365,7 +363,7 @@ SBError SBPlatform::Put(SBFileSpec &src, SBFileSpec &dst) { if (src.Exists()) { uint32_t permissions = src.ref().GetPermissions(); if (permissions == 0) { - if (llvm::sys::fs::is_directory(src.ref().GetPath())) + if (src.ref().GetFileType() == FileSpec::eFileTypeDirectory) permissions = eFilePermissionsDirectoryDefault; else permissions = eFilePermissionsFileDefault; diff --git a/lldb/source/Commands/CommandCompletions.cpp b/lldb/source/Commands/CommandCompletions.cpp index 9e277db0c5e..10c1a2429bb 100644 --- a/lldb/source/Commands/CommandCompletions.cpp +++ b/lldb/source/Commands/CommandCompletions.cpp @@ -33,7 +33,6 @@ #include "lldb/Utility/CleanUp.h" #include "llvm/ADT/SmallString.h" -#include "llvm/Support/FileSystem.h" using namespace lldb_private; @@ -110,7 +109,7 @@ typedef struct DiskFilesOrDirectoriesBaton { } DiskFilesOrDirectoriesBaton; FileSpec::EnumerateDirectoryResult -DiskFilesOrDirectoriesCallback(void *baton, llvm::sys::fs::file_type file_type, +DiskFilesOrDirectoriesCallback(void *baton, FileSpec::FileType file_type, const FileSpec &spec) { const char *name = spec.GetFilename().AsCString(); @@ -139,10 +138,10 @@ DiskFilesOrDirectoriesCallback(void *baton, llvm::sys::fs::file_type file_type, strcpy(end_ptr, name); bool isa_directory = false; - if (file_type == llvm::sys::fs::file_type::directory_file) + if (file_type == FileSpec::eFileTypeDirectory) isa_directory = true; - else if (file_type == llvm::sys::fs::file_type::symlink_file) { - if (llvm::sys::fs::is_directory(partial_name_copy)) + else if (file_type == FileSpec::eFileTypeSymbolicLink) { + if (FileSpec(partial_name_copy, false).IsDirectory()) isa_directory = true; } diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp index c8871c8de6e..37dec184805 100644 --- a/lldb/source/Commands/CommandObjectTarget.cpp +++ b/lldb/source/Commands/CommandObjectTarget.cpp @@ -50,8 +50,6 @@ #include "lldb/Target/Thread.h" #include "lldb/Target/ThreadSpec.h" -#include "llvm/Support/FileSystem.h" - // C Includes // C++ Includes #include <cerrno> @@ -4138,21 +4136,20 @@ protected: module_sp->SetSymbolFileFileSpec(FileSpec()); } - namespace fs = llvm::sys::fs; if (module_spec.GetUUID().IsValid()) { StreamString ss_symfile_uuid; module_spec.GetUUID().Dump(&ss_symfile_uuid); result.AppendErrorWithFormat( "symbol file '%s' (%s) does not match any existing module%s\n", symfile_path, ss_symfile_uuid.GetData(), - !fs::is_regular_file(symbol_fspec.GetPath()) + (symbol_fspec.GetFileType() != FileSpec::eFileTypeRegular) ? "\n please specify the full path to the symbol file" : ""); } else { result.AppendErrorWithFormat( "symbol file '%s' does not match any existing module%s\n", symfile_path, - !fs::is_regular_file(symbol_fspec.GetPath()) + (symbol_fspec.GetFileType() != FileSpec::eFileTypeRegular) ? "\n please specify the full path to the symbol file" : ""); } diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp index 8af2bad2255..7d4f94af68a 100644 --- a/lldb/source/Core/Debugger.cpp +++ b/lldb/source/Core/Debugger.cpp @@ -557,7 +557,7 @@ bool Debugger::LoadPlugin(const FileSpec &spec, Error &error) { } static FileSpec::EnumerateDirectoryResult -LoadPluginCallback(void *baton, llvm::sys::fs::file_type ft, +LoadPluginCallback(void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { Error error; @@ -569,13 +569,13 @@ LoadPluginCallback(void *baton, llvm::sys::fs::file_type ft, Debugger *debugger = (Debugger *)baton; - namespace fs = llvm::sys::fs; // If we have a regular file, a symbolic link or unknown file type, try // and process the file. We must handle unknown as sometimes the directory // enumeration might be enumerating a file system that doesn't have correct // file type information. - if (ft == fs::file_type::regular_file || ft == fs::file_type::symlink_file || - ft == fs::file_type::type_unknown) { + if (file_type == FileSpec::eFileTypeRegular || + file_type == FileSpec::eFileTypeSymbolicLink || + file_type == FileSpec::eFileTypeUnknown) { FileSpec plugin_file_spec(file_spec); plugin_file_spec.ResolvePath(); @@ -588,9 +588,9 @@ LoadPluginCallback(void *baton, llvm::sys::fs::file_type ft, debugger->LoadPlugin(plugin_file_spec, plugin_load_error); return FileSpec::eEnumerateDirectoryResultNext; - } else if (ft == fs::file_type::directory_file || - ft == fs::file_type::symlink_file || - ft == fs::file_type::type_unknown) { + } else if (file_type == FileSpec::eFileTypeUnknown || + file_type == FileSpec::eFileTypeDirectory || + file_type == FileSpec::eFileTypeSymbolicLink) { // Try and recurse into anything that a directory or symbolic link. // We must also do this for unknown as sometimes the directory enumeration // might be enumerating a file system that doesn't have correct file type diff --git a/lldb/source/Core/FileSpecList.cpp b/lldb/source/Core/FileSpecList.cpp index 828aef9c6cd..2f2713af336 100644 --- a/lldb/source/Core/FileSpecList.cpp +++ b/lldb/source/Core/FileSpecList.cpp @@ -16,7 +16,6 @@ // Other libraries and framework includes // Project includes #include "lldb/Utility/Stream.h" -#include "llvm/Support/FileSystem.h" using namespace lldb_private; using namespace std; @@ -151,23 +150,32 @@ size_t FileSpecList::GetFilesMatchingPartialPath(const char *path, FileSpecList &matches) { #if 0 // FIXME: Just sketching... matches.Clear(); - using namespace llvm::sys::fs; - file_status stats; - if (status(path, stats)) - return 0; - if (exists(stats)) { - if (stats.type() == file_type::symlink_file) { - // Shouldn't there be a method that realpath's a file? - } - if (is_regular_file(stats) || (is_directory(stats) && dir_okay)) { - matches.Append(FileSpec(path)); - return 1; - } else if (is_directory(stats)) { - // Fill the match list with all the files in the directory: - } else { - return 0; - } - } else { + FileSpec path_spec = FileSpec (path); + if (path_spec.Exists ()) + { + FileSpec::FileType type = path_spec.GetFileType(); + if (type == FileSpec::eFileTypeSymbolicLink) + // Shouldn't there be a Resolve on a file spec that real-path's it? + { + } + + if (type == FileSpec::eFileTypeRegular + || (type == FileSpec::eFileTypeDirectory && dir_okay)) + { + matches.Append (path_spec); + return 1; + } + else if (type == FileSpec::eFileTypeDirectory) + { + // Fill the match list with all the files in the directory: + } + else + { + return 0; + } + } + else + { ConstString dir_name = path_spec.GetDirectory(); ConstString file_name = GetFilename(); if (dir_name == nullptr) diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp index d2034d6518d..c8afb61e37b 100644 --- a/lldb/source/Core/Module.cpp +++ b/lldb/source/Core/Module.cpp @@ -12,7 +12,6 @@ // C Includes // C++ Includes // Other libraries and framework includes -#include "llvm/Support/FileSystem.h" #include "llvm/Support/Signals.h" #include "llvm/Support/raw_os_ostream.h" @@ -1440,7 +1439,7 @@ void Module::SetSymbolFileFileSpec(const FileSpec &file) { // ("/tmp/a.out.dSYM/Contents/Resources/DWARF/a.out"). So we need to // check this - if (llvm::sys::fs::is_directory(file.GetPath())) { + if (file.IsDirectory()) { std::string new_path(file.GetPath()); std::string old_path(obj_file->GetFileSpec().GetPath()); if (old_path.find(new_path) == 0) { diff --git a/lldb/source/Core/ModuleList.cpp b/lldb/source/Core/ModuleList.cpp index 0262185eed0..8ec3047dce8 100644 --- a/lldb/source/Core/ModuleList.cpp +++ b/lldb/source/Core/ModuleList.cpp @@ -26,7 +26,6 @@ #include "lldb/Symbol/VariableList.h" #include "lldb/Utility/Log.h" -#include "llvm/Support/FileSystem.h" #include "llvm/Support/Threading.h" using namespace lldb; @@ -767,8 +766,7 @@ Error ModuleList::GetSharedModule(const ModuleSpec &module_spec, auto search_path_spec = module_search_paths_ptr->GetFileSpecAtIndex(idx); if (!search_path_spec.ResolvePath()) continue; - namespace fs = llvm::sys::fs; - if (!fs::is_directory(search_path_spec.GetPath())) + if (!search_path_spec.Exists() || !search_path_spec.IsDirectory()) continue; search_path_spec.AppendPathComponent( module_spec.GetFileSpec().GetFilename().AsCString()); diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp index 136d722e9bc..71a0f6eccea 100644 --- a/lldb/source/Core/PluginManager.cpp +++ b/lldb/source/Core/PluginManager.cpp @@ -79,18 +79,18 @@ template <typename FPtrTy> static FPtrTy CastToFPtr(void *VPtr) { } static FileSpec::EnumerateDirectoryResult -LoadPluginCallback(void *baton, llvm::sys::fs::file_type ft, +LoadPluginCallback(void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { // PluginManager *plugin_manager = (PluginManager *)baton; Error error; - namespace fs = llvm::sys::fs; // If we have a regular file, a symbolic link or unknown file type, try // and process the file. We must handle unknown as sometimes the directory // enumeration might be enumerating a file system that doesn't have correct // file type information. - if (ft == fs::file_type::regular_file || ft == fs::file_type::symlink_file || - ft == fs::file_type::type_unknown) { + if (file_type == FileSpec::eFileTypeRegular || + file_type == FileSpec::eFileTypeSymbolicLink || + file_type == FileSpec::eFileTypeUnknown) { FileSpec plugin_file_spec(file_spec); plugin_file_spec.ResolvePath(); @@ -135,8 +135,9 @@ LoadPluginCallback(void *baton, llvm::sys::fs::file_type ft, } } - if (ft == fs::file_type::directory_file || - ft == fs::file_type::symlink_file || ft == fs::file_type::type_unknown) { + if (file_type == FileSpec::eFileTypeUnknown || + file_type == FileSpec::eFileTypeDirectory || + file_type == FileSpec::eFileTypeSymbolicLink) { // Try and recurse into anything that a directory or symbolic link. // We must also do this for unknown as sometimes the directory enumeration // might be enumerating a file system that doesn't have correct file type diff --git a/lldb/source/Host/common/FileSpec.cpp b/lldb/source/Host/common/FileSpec.cpp index 29fa6d1c091..10bbea448e0 100644 --- a/lldb/source/Host/common/FileSpec.cpp +++ b/lldb/source/Host/common/FileSpec.cpp @@ -27,6 +27,7 @@ #include "lldb/Core/StringList.h" #include "lldb/Host/FileSpec.h" +#include "lldb/Host/FileSystem.h" #include "lldb/Utility/CleanUp.h" #include "lldb/Utility/RegularExpression.h" #include "lldb/Utility/Stream.h" @@ -44,18 +45,10 @@ using namespace lldb_private; namespace { -static constexpr FileSpec::PathSyntax GetNativeSyntax() { -#if defined(LLVM_ON_WIN32) - return FileSpec::ePathSyntaxWindows; -#else - return FileSpec::ePathSyntaxPosix; -#endif -} - bool PathSyntaxIsPosix(FileSpec::PathSyntax syntax) { return (syntax == FileSpec::ePathSyntaxPosix || (syntax == FileSpec::ePathSyntaxHostNative && - GetNativeSyntax() == FileSpec::ePathSyntaxPosix)); + FileSystem::GetNativePathSyntax() == FileSpec::ePathSyntaxPosix)); } const char *GetPathSeparators(FileSpec::PathSyntax syntax) { @@ -91,6 +84,13 @@ void Denormalize(llvm::SmallVectorImpl<char> &path, std::replace(path.begin(), path.end(), '/', '\\'); } +bool GetFileStats(const FileSpec *file_spec, struct stat *stats_ptr) { + char resolved_path[PATH_MAX]; + if (file_spec->GetPath(resolved_path, sizeof(resolved_path))) + return FileSystem::Stat(resolved_path, stats_ptr) == 0; + return false; +} + size_t FilenamePos(llvm::StringRef str, FileSpec::PathSyntax syntax) { if (str.size() == 2 && IsPathSeparator(str[0], syntax) && str[0] == str[1]) return 0; @@ -273,7 +273,7 @@ void FileSpec::Resolve(llvm::SmallVectorImpl<char> &path) { } } -FileSpec::FileSpec() : m_syntax(GetNativeSyntax()) {} +FileSpec::FileSpec() : m_syntax(FileSystem::GetNativePathSyntax()) {} //------------------------------------------------------------------ // Default constructor that can take an optional full path to a @@ -336,7 +336,9 @@ void FileSpec::SetFile(llvm::StringRef pathname, bool resolve, m_filename.Clear(); m_directory.Clear(); m_is_resolved = false; - m_syntax = (syntax == ePathSyntaxHostNative) ? GetNativeSyntax() : syntax; + m_syntax = (syntax == ePathSyntaxHostNative) + ? FileSystem::GetNativePathSyntax() + : syntax; if (pathname.empty()) return; @@ -613,10 +615,16 @@ void FileSpec::Dump(Stream *s) const { //------------------------------------------------------------------ // Returns true if the file exists. //------------------------------------------------------------------ -bool FileSpec::Exists() const { return llvm::sys::fs::exists(GetPath()); } +bool FileSpec::Exists() const { + struct stat file_stats; + return GetFileStats(this, &file_stats); +} bool FileSpec::Readable() const { - return GetPermissions() & llvm::sys::fs::perms::all_read; + const uint32_t permissions = GetPermissions(); + if (permissions & eFilePermissionsEveryoneR) + return true; + return false; } bool FileSpec::ResolveExecutableLocation() { @@ -669,21 +677,67 @@ bool FileSpec::ResolvePath() { } uint64_t FileSpec::GetByteSize() const { - uint64_t Size = 0; - if (llvm::sys::fs::file_size(GetPath(), Size)) - return 0; - return Size; + struct stat file_stats; + if (GetFileStats(this, &file_stats)) + return file_stats.st_size; + return 0; } FileSpec::PathSyntax FileSpec::GetPathSyntax() const { return m_syntax; } -uint32_t FileSpec::GetPermissions() const { - namespace fs = llvm::sys::fs; - fs::file_status st; - if (fs::status(GetPath(), st)) - return fs::perms::perms_not_known; +FileSpec::FileType FileSpec::GetFileType() const { + struct stat file_stats; + if (GetFileStats(this, &file_stats)) { + mode_t file_type = file_stats.st_mode & S_IFMT; + switch (file_type) { + case S_IFDIR: + return eFileTypeDirectory; + case S_IFREG: + return eFileTypeRegular; +#ifndef _WIN32 + case S_IFIFO: + return eFileTypePipe; + case S_IFSOCK: + return eFileTypeSocket; + case S_IFLNK: + return eFileTypeSymbolicLink; +#endif + default: + break; + } + return eFileTypeUnknown; + } + return eFileTypeInvalid; +} + +bool FileSpec::IsSymbolicLink() const { + char resolved_path[PATH_MAX]; + if (!GetPath(resolved_path, sizeof(resolved_path))) + return false; + +#ifdef _WIN32 + std::wstring wpath; + if (!llvm::ConvertUTF8toWide(resolved_path, wpath)) + return false; + auto attrs = ::GetFileAttributesW(wpath.c_str()); + if (attrs == INVALID_FILE_ATTRIBUTES) + return false; - return st.permissions(); + return (attrs & FILE_ATTRIBUTE_REPARSE_POINT); +#else + struct stat file_stats; + if (::lstat(resolved_path, &file_stats) != 0) + return false; + + return (file_stats.st_mode & S_IFMT) == S_IFLNK; +#endif +} + +uint32_t FileSpec::GetPermissions() const { + uint32_t file_permissions = 0; + if (*this) + FileSystem::GetFilePermissions(*this, file_permissions); + return file_permissions; } //------------------------------------------------------------------ @@ -799,8 +853,7 @@ FileSpec::ForEachItemInDirectory(llvm::StringRef dir_path, } do { - namespace fs = llvm::sys::fs; - fs::file_type ft = fs::file_type::type_unknown; + FileSpec::FileType file_type = eFileTypeUnknown; if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { size_t len = wcslen(ffd.cFileName); @@ -810,11 +863,11 @@ FileSpec::ForEachItemInDirectory(llvm::StringRef dir_path, if (len == 2 && ffd.cFileName[0] == L'.' && ffd.cFileName[1] == L'.') continue; - ft = fs::file_type::directory_file; + file_type = eFileTypeDirectory; } else if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DEVICE) { - ft = fs::file_type::type_unknown; + file_type = eFileTypeOther; } else { - ft = fs::file_type::regular_file; + file_type = eFileTypeRegular; } std::string fileName; @@ -826,7 +879,7 @@ FileSpec::ForEachItemInDirectory(llvm::StringRef dir_path, // Don't resolve the file type or path FileSpec child_path_spec(child_path.data(), false); - EnumerateDirectoryResult result = callback(ft, child_path_spec); + EnumerateDirectoryResult result = callback(file_type, child_path_spec); switch (result) { case eEnumerateDirectoryResultNext: @@ -887,38 +940,37 @@ FileSpec::ForEachItemInDirectory(llvm::StringRef dir_path, continue; } - using namespace llvm::sys::fs; - file_type ft = file_type::type_unknown; + FileSpec::FileType file_type = eFileTypeUnknown; switch (dp->d_type) { default: case DT_UNKNOWN: - ft = file_type::type_unknown; + file_type = eFileTypeUnknown; break; case DT_FIFO: - ft = file_type::fifo_file; + file_type = eFileTypePipe; break; case DT_CHR: - ft = file_type::character_file; + file_type = eFileTypeOther; break; case DT_DIR: - ft = file_type::directory_file; + file_type = eFileTypeDirectory; break; case DT_BLK: - ft = file_type::block_file; + file_type = eFileTypeOther; break; case DT_REG: - ft = file_type::regular_file; + file_type = eFileTypeRegular; break; case DT_LNK: - ft = file_type::symlink_file; + file_type = eFileTypeSymbolicLink; break; case DT_SOCK: - ft = file_type::socket_file; + file_type = eFileTypeSocket; break; #if !defined(__OpenBSD__) case DT_WHT: - ft = file_type::type_unknown; + file_type = eFileTypeOther; break; #endif } @@ -933,7 +985,8 @@ FileSpec::ForEachItemInDirectory(llvm::StringRef dir_path, // Don't resolve the file type or path FileSpec child_path_spec(child_path, false); - EnumerateDirectoryResult result = callback(ft, child_path_spec); + EnumerateDirectoryResult result = + callback(file_type, child_path_spec); switch (result) { case eEnumerateDirectoryResultNext: @@ -987,14 +1040,14 @@ FileSpec::EnumerateDirectory(llvm::StringRef dir_path, bool find_directories, void *callback_baton) { return ForEachItemInDirectory( dir_path, - [&find_directories, &find_files, &find_other, &callback, &callback_baton]( - llvm::sys::fs::file_type file_type, const FileSpec &file_spec) { + [&find_directories, &find_files, &find_other, &callback, + &callback_baton](FileType file_type, const FileSpec &file_spec) { switch (file_type) { - case llvm::sys::fs::file_type::directory_file: + case FileType::eFileTypeDirectory: if (find_directories) return callback(callback_baton, file_type, file_spec); break; - case llvm::sys::fs::file_type::regular_file: + case FileType::eFileTypeRegular: if (find_files) return callback(callback_baton, file_type, file_spec); break; diff --git a/lldb/source/Host/common/MonitoringProcessLauncher.cpp b/lldb/source/Host/common/MonitoringProcessLauncher.cpp index 2fca750f9c6..b94c3d24283 100644 --- a/lldb/source/Host/common/MonitoringProcessLauncher.cpp +++ b/lldb/source/Host/common/MonitoringProcessLauncher.cpp @@ -17,8 +17,6 @@ #include "lldb/Utility/Error.h" #include "lldb/Utility/Log.h" -#include "llvm/Support/FileSystem.h" - using namespace lldb; using namespace lldb_private; @@ -40,8 +38,8 @@ MonitoringProcessLauncher::LaunchProcess(const ProcessLaunchInfo &launch_info, FileSpec exe_spec(resolved_info.GetExecutableFile()); - llvm::sys::fs::file_status stats; - if (status(exe_spec.GetPath(), stats) || !is_regular_file(stats)) { + FileSpec::FileType file_type = exe_spec.GetFileType(); + if (file_type != FileSpec::eFileTypeRegular) { ModuleSpec module_spec(exe_spec, arch_spec); lldb::ModuleSP exe_module_sp; error = @@ -54,7 +52,7 @@ MonitoringProcessLauncher::LaunchProcess(const ProcessLaunchInfo &launch_info, exe_spec = exe_module_sp->GetFileSpec(); } - if (exists(stats)) { + if (exe_spec.Exists()) { exe_spec.GetPath(exe_path, sizeof(exe_path)); } else { resolved_info.GetExecutableFile().GetPath(exe_path, sizeof(exe_path)); diff --git a/lldb/source/Host/common/Symbols.cpp b/lldb/source/Host/common/Symbols.cpp index e3d5bdfab7b..9850625cbc4 100644 --- a/lldb/source/Host/common/Symbols.cpp +++ b/lldb/source/Host/common/Symbols.cpp @@ -229,7 +229,7 @@ FileSpec Symbols::LocateExecutableSymbolFile(const ModuleSpec &module_spec) { for (size_t idx = 0; idx < num_directories; ++idx) { FileSpec dirspec = debug_file_search_paths.GetFileSpecAtIndex(idx); dirspec.ResolvePath(); - if (!llvm::sys::fs::is_directory(dirspec.GetPath())) + if (!dirspec.Exists() || !dirspec.IsDirectory()) continue; std::vector<std::string> files; diff --git a/lldb/source/Host/macosx/Host.mm b/lldb/source/Host/macosx/Host.mm index 2e29d87e967..1ecf62da4ef 100644 --- a/lldb/source/Host/macosx/Host.mm +++ b/lldb/source/Host/macosx/Host.mm @@ -75,8 +75,6 @@ #include "lldb/Utility/NameMatches.h" #include "lldb/Utility/StreamString.h" -#include "llvm/Support/FileSystem.h" - #include "cfcpp/CFCBundle.h" #include "cfcpp/CFCMutableArray.h" #include "cfcpp/CFCMutableDictionary.h" @@ -103,7 +101,7 @@ using namespace lldb_private; bool Host::GetBundleDirectory(const FileSpec &file, FileSpec &bundle_directory) { #if defined(__APPLE__) - if (llvm::sys::fs::is_directory(file.GetPath())) { + if (file.GetFileType() == FileSpec::eFileTypeDirectory) { char path[PATH_MAX]; if (file.GetPath(path, sizeof(path))) { CFCBundle bundle(path); @@ -120,7 +118,7 @@ bool Host::GetBundleDirectory(const FileSpec &file, bool Host::ResolveExecutableInBundle(FileSpec &file) { #if defined(__APPLE__) - if (llvm::sys::fs::is_directory(file.GetPath())) { + if (file.GetFileType() == FileSpec::eFileTypeDirectory) { char path[PATH_MAX]; if (file.GetPath(path, sizeof(path))) { CFCBundle bundle(path); @@ -1186,8 +1184,8 @@ Error Host::LaunchProcess(ProcessLaunchInfo &launch_info) { ModuleSpec exe_module_spec(launch_info.GetExecutableFile(), launch_info.GetArchitecture()); - if (!llvm::sys::fs::is_regular_file( - exe_module_spec.GetFileSpec().GetPath())) { + FileSpec::FileType file_type = exe_module_spec.GetFileSpec().GetFileType(); + if (file_type != FileSpec::eFileTypeRegular) { lldb::ModuleSP exe_module_sp; error = host_platform_sp->ResolveExecutable(exe_module_spec, exe_module_sp, NULL); diff --git a/lldb/source/Host/macosx/HostInfoMacOSX.mm b/lldb/source/Host/macosx/HostInfoMacOSX.mm index 5bfac343f46..ba90a01eefb 100644 --- a/lldb/source/Host/macosx/HostInfoMacOSX.mm +++ b/lldb/source/Host/macosx/HostInfoMacOSX.mm @@ -18,7 +18,6 @@ #include "lldb/Utility/SafeMachO.h" #include "llvm/ADT/SmallString.h" -#include "llvm/Support/FileSystem.h" #include "llvm/Support/raw_ostream.h" // C++ Includes @@ -153,7 +152,7 @@ bool HostInfoMacOSX::ComputeSupportExeDirectory(FileSpec &file_spec) { // the lldb driver. raw_path.append("/../bin"); FileSpec support_dir_spec(raw_path, true); - if (!llvm::sys::fs::is_directory(support_dir_spec.GetPath())) { + if (!support_dir_spec.Exists() || !support_dir_spec.IsDirectory()) { Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); if (log) log->Printf("HostInfoMacOSX::%s(): failed to find support directory", diff --git a/lldb/source/Host/macosx/Symbols.cpp b/lldb/source/Host/macosx/Symbols.cpp index 17a130236e8..ff4b8e972be 100644 --- a/lldb/source/Host/macosx/Symbols.cpp +++ b/lldb/source/Host/macosx/Symbols.cpp @@ -38,8 +38,6 @@ #include "lldb/Utility/UUID.h" #include "mach/machine.h" -#include "llvm/Support/FileSystem.h" - using namespace lldb; using namespace lldb_private; using namespace llvm::MachO; @@ -103,7 +101,7 @@ int LocateMacOSXFilesUsingDebugSymbols(const ModuleSpec &module_spec, } FileSpec dsym_filespec(path, path[0] == '~'); - if (llvm::sys::fs::is_directory(dsym_filespec.GetPath())) { + if (dsym_filespec.GetFileType() == FileSpec::eFileTypeDirectory) { dsym_filespec = Symbols::FindSymbolFileInBundle(dsym_filespec, uuid, arch); ++items_found; @@ -166,10 +164,8 @@ int LocateMacOSXFilesUsingDebugSymbols(const ModuleSpec &module_spec, FileSpec file_spec(path, true); ModuleSpecList module_specs; ModuleSpec matched_module_spec; - using namespace llvm::sys::fs; - switch (get_file_type(file_spec.GetPath())) { - - case file_type::directory_file: // Bundle directory? + switch (file_spec.GetFileType()) { + case FileSpec::eFileTypeDirectory: // Bundle directory? { CFCBundle bundle(path); CFCReleaser<CFURLRef> bundle_exe_url( @@ -197,17 +193,15 @@ int LocateMacOSXFilesUsingDebugSymbols(const ModuleSpec &module_spec, } } break; - case file_type::fifo_file: // Forget pipes - case file_type::socket_file: // We can't process socket files - case file_type::file_not_found: // File doesn't exist... - case file_type::status_error: + case FileSpec::eFileTypePipe: // Forget pipes + case FileSpec::eFileTypeSocket: // We can't process socket files + case FileSpec::eFileTypeInvalid: // File doesn't exist... break; - case file_type::type_unknown: - case file_type::regular_file: - case file_type::symlink_file: - case file_type::block_file: - case file_type::character_file: + case FileSpec::eFileTypeUnknown: + case FileSpec::eFileTypeRegular: + case FileSpec::eFileTypeSymbolicLink: + case FileSpec::eFileTypeOther: if (ObjectFile::GetModuleSpecifications(file_spec, 0, 0, module_specs) && module_specs.FindMatchingModuleSpec(module_spec, diff --git a/lldb/source/Host/posix/FileSystem.cpp b/lldb/source/Host/posix/FileSystem.cpp index b5264d10097..fa38f07665b 100644 --- a/lldb/source/Host/posix/FileSystem.cpp +++ b/lldb/source/Host/posix/FileSystem.cpp @@ -29,8 +29,6 @@ #include "lldb/Utility/Error.h" #include "lldb/Utility/StreamString.h" -#include "llvm/Support/FileSystem.h" - using namespace lldb; using namespace lldb_private; @@ -63,7 +61,7 @@ Error FileSystem::MakeDirectory(const FileSpec &file_spec, return error; } break; case EEXIST: { - if (llvm::sys::fs::is_directory(file_spec.GetPath())) + if (file_spec.IsDirectory()) return Error(); // It is a directory and it already exists } break; } @@ -85,9 +83,9 @@ Error FileSystem::DeleteDirectory(const FileSpec &file_spec, bool recurse) { FileSpec::ForEachItemInDirectory( file_spec.GetCString(), [&error, &sub_directories]( - llvm::sys::fs::file_type ft, + FileSpec::FileType file_type, const FileSpec &spec) -> FileSpec::EnumerateDirectoryResult { - if (ft == llvm::sys::fs::file_type::directory_file) { + if (file_type == FileSpec::eFileTypeDirectory) { // Save all directorires and process them after iterating through // this directory sub_directories.push_back(spec); diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp index 135c1ac9446..3f450b79126 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp @@ -20,7 +20,6 @@ #include "clang/Parse/Parser.h" #include "clang/Sema/Lookup.h" #include "clang/Serialization/ASTReader.h" -#include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" #include "llvm/Support/Threading.h" @@ -607,7 +606,7 @@ ClangModulesDeclVendor::Create(Target &target) { { FileSpec clang_resource_dir = GetResourceDir(); - if (llvm::sys::fs::is_directory(clang_resource_dir.GetPath())) { + if (clang_resource_dir.IsDirectory()) { compiler_invocation_arguments.push_back("-resource-dir"); compiler_invocation_arguments.push_back(clang_resource_dir.GetPath()); } diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp index 23e836430eb..645952fadb2 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp @@ -28,8 +28,6 @@ #include "lldb/Utility/Log.h" #include "lldb/Utility/StreamString.h" -#include "llvm/Support/FileSystem.h" - using namespace lldb; using namespace lldb_private; @@ -248,9 +246,9 @@ Error PlatformAppleTVSimulator::ResolveExecutable( } static FileSpec::EnumerateDirectoryResult -EnumerateDirectoryCallback(void *baton, llvm::sys::fs::file_type ft, +EnumerateDirectoryCallback(void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { - if (ft == llvm::sys::fs::file_type::directory_file) { + if (file_type == FileSpec::eFileTypeDirectory) { const char *filename = file_spec.GetFilename().GetCString(); if (filename && strncmp(filename, "AppleTVSimulator", strlen("AppleTVSimulator")) == diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp index 944e55d9e52..7063cf86e21 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp @@ -248,9 +248,9 @@ Error PlatformAppleWatchSimulator::ResolveExecutable( } static FileSpec::EnumerateDirectoryResult -EnumerateDirectoryCallback(void *baton, llvm::sys::fs::file_type ft, +EnumerateDirectoryCallback(void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { - if (ft == llvm::sys::fs::file_type::directory_file) { + if (file_type == FileSpec::eFileTypeDirectory) { const char *filename = file_spec.GetFilename().GetCString(); if (filename && strncmp(filename, "AppleWatchSimulator", diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp index bb6d9c697f1..75311078f74 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -41,7 +41,6 @@ #include "lldb/Utility/Error.h" #include "lldb/Utility/Log.h" #include "llvm/ADT/STLExtras.h" -#include "llvm/Support/FileSystem.h" #include "llvm/Support/Threading.h" #if defined(__APPLE__) @@ -202,15 +201,8 @@ Error PlatformDarwin::ResolveSymbolFile(Target &target, FileSpec &sym_file) { Error error; sym_file = sym_spec.GetSymbolFileSpec(); - - llvm::sys::fs::file_status st; - if (status(sym_file.GetPath(), st)) { - error.SetErrorString("Could not stat file!"); - return error; - } - - if (exists(st)) { - if (is_directory(st)) { + if (sym_file.Exists()) { + if (sym_file.GetFileType() == FileSpec::eFileTypeDirectory) { sym_file = Symbols::FindSymbolFileInBundle( sym_file, sym_spec.GetUUIDPtr(), sym_spec.GetArchitecturePtr()); } @@ -1202,7 +1194,7 @@ const char *PlatformDarwin::GetDeveloperDirectory() { developer_dir_path[i] = '\0'; FileSpec devel_dir(developer_dir_path, false); - if (llvm::sys::fs::is_directory(devel_dir.GetPath())) { + if (devel_dir.Exists() && devel_dir.IsDirectory()) { developer_dir_path_valid = true; } } @@ -1447,8 +1439,9 @@ bool PlatformDarwin::SDKSupportsModules(SDKType desired_type, return false; } -FileSpec::EnumerateDirectoryResult PlatformDarwin::DirectoryEnumerator( - void *baton, llvm::sys::fs::file_type file_type, const FileSpec &spec) { +FileSpec::EnumerateDirectoryResult +PlatformDarwin::DirectoryEnumerator(void *baton, FileSpec::FileType file_type, + const FileSpec &spec) { SDKEnumeratorInfo *enumerator_info = static_cast<SDKEnumeratorInfo *>(baton); if (SDKSupportsModules(enumerator_info->sdk_type, spec)) { @@ -1463,9 +1456,8 @@ FileSpec PlatformDarwin::FindSDKInXcodeForModules(SDKType sdk_type, const FileSpec &sdks_spec) { // Look inside Xcode for the required installed iOS SDK version - if (!llvm::sys::fs::is_directory(sdks_spec.GetPath())) { + if (!sdks_spec.IsDirectory()) return FileSpec(); - } const bool find_directories = true; const bool find_files = false; @@ -1479,7 +1471,7 @@ FileSpec PlatformDarwin::FindSDKInXcodeForModules(SDKType sdk_type, find_files, find_other, DirectoryEnumerator, &enumerator_info); - if (llvm::sys::fs::is_directory(enumerator_info.found_path.GetPath())) + if (enumerator_info.found_path.IsDirectory()) return enumerator_info.found_path; else return FileSpec(); @@ -1638,7 +1630,7 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType( sysroot_spec = GetSDKDirectoryForModules(sdk_type); } - if (llvm::sys::fs::is_directory(sysroot_spec.GetPath())) { + if (sysroot_spec.IsDirectory()) { options.push_back("-isysroot"); options.push_back(sysroot_spec.GetPath()); } diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h index 1d9025d1b6c..ffc8194f713 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h @@ -18,7 +18,6 @@ #include "Plugins/Platform/POSIX/PlatformPOSIX.h" #include "lldb/Host/FileSpec.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/FileSystem.h" #include <string> #include <tuple> @@ -113,7 +112,7 @@ protected: }; static lldb_private::FileSpec::EnumerateDirectoryResult - DirectoryEnumerator(void *baton, llvm::sys::fs::file_type file_type, + DirectoryEnumerator(void *baton, lldb_private::FileSpec::FileType file_type, const lldb_private::FileSpec &spec); static lldb_private::FileSpec diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp index af54ab7202e..0b4dd7d84c9 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp @@ -36,8 +36,6 @@ #include "lldb/Utility/Log.h" #include "lldb/Utility/StreamString.h" -#include "llvm/Support/FileSystem.h" - #include <CoreFoundation/CoreFoundation.h> #include "Host/macosx/cfcpp/CFCBundle.h" @@ -383,7 +381,7 @@ void PlatformDarwinKernel::CollectKextAndKernelDirectories() { // Add simple directory /Applications/Xcode.app/Contents/Developer/../Symbols FileSpec possible_dir(developer_dir + "/../Symbols", true); - if (llvm::sys::fs::is_directory(possible_dir.GetPath())) + if (possible_dir.Exists() && possible_dir.IsDirectory()) m_search_directories.push_back(possible_dir); // Add simple directory of the current working directory @@ -398,7 +396,7 @@ void PlatformDarwinKernel::GetUserSpecifiedDirectoriesToSearch() { for (uint32_t i = 0; i < user_dirs_count; i++) { FileSpec dir = user_dirs.GetFileSpecAtIndex(i); dir.ResolvePath(); - if (llvm::sys::fs::is_directory(dir.GetPath())) { + if (dir.Exists() && dir.IsDirectory()) { m_search_directories.push_back(dir); } } @@ -414,7 +412,7 @@ void PlatformDarwinKernel::AddRootSubdirsToSearchPaths( nullptr}; for (int i = 0; subdirs[i] != nullptr; i++) { FileSpec testdir(dir + subdirs[i], true); - if (llvm::sys::fs::is_directory(testdir.GetPath())) + if (testdir.Exists() && testdir.IsDirectory()) thisp->m_search_directories.push_back(testdir); } @@ -437,12 +435,12 @@ void PlatformDarwinKernel::AddSDKSubdirsToSearchPaths(const std::string &dir) { // Helper function to find *.sdk and *.kdk directories in a given directory. FileSpec::EnumerateDirectoryResult PlatformDarwinKernel::FindKDKandSDKDirectoriesInDirectory( - void *baton, llvm::sys::fs::file_type ft, const FileSpec &file_spec) { + void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { static ConstString g_sdk_suffix = ConstString("sdk"); static ConstString g_kdk_suffix = ConstString("kdk"); PlatformDarwinKernel *thisp = (PlatformDarwinKernel *)baton; - if (ft == llvm::sys::fs::file_type::directory_file && + if (file_type == FileSpec::eFileTypeDirectory && (file_spec.GetFileNameExtension() == g_sdk_suffix || file_spec.GetFileNameExtension() == g_kdk_suffix)) { AddRootSubdirsToSearchPaths(thisp, file_spec.GetPath()); @@ -488,19 +486,20 @@ void PlatformDarwinKernel::SearchForKextsAndKernelsRecursively() { FileSpec::EnumerateDirectoryResult PlatformDarwinKernel::GetKernelsAndKextsInDirectoryWithRecursion( - void *baton, llvm::sys::fs::file_type ft, const FileSpec &file_spec) { - return GetKernelsAndKextsInDirectoryHelper(baton, ft, file_spec, true); + void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { + return GetKernelsAndKextsInDirectoryHelper(baton, file_type, file_spec, true); } FileSpec::EnumerateDirectoryResult PlatformDarwinKernel::GetKernelsAndKextsInDirectoryNoRecursion( - void *baton, llvm::sys::fs::file_type ft, const FileSpec &file_spec) { - return GetKernelsAndKextsInDirectoryHelper(baton, ft, file_spec, false); + void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { + return GetKernelsAndKextsInDirectoryHelper(baton, file_type, file_spec, + false); } FileSpec::EnumerateDirectoryResult PlatformDarwinKernel::GetKernelsAndKextsInDirectoryHelper( - void *baton, llvm::sys::fs::file_type ft, const FileSpec &file_spec, + void *baton, FileSpec::FileType file_type, const FileSpec &file_spec, bool recurse) { static ConstString g_kext_suffix = ConstString("kext"); static ConstString g_dsym_suffix = ConstString("dSYM"); @@ -513,8 +512,8 @@ PlatformDarwinKernel::GetKernelsAndKextsInDirectoryHelper( file_spec.GetPath().c_str()); PlatformDarwinKernel *thisp = (PlatformDarwinKernel *)baton; - if (ft == llvm::sys::fs::file_type::regular_file || - ft == llvm::sys::fs::file_type::symlink_file) { + if (file_type == FileSpec::eFileTypeRegular || + file_type == FileSpec::eFileTypeSymbolicLink) { ConstString filename = file_spec.GetFilename(); if ((strncmp(filename.GetCString(), "kernel", 6) == 0 || strncmp(filename.GetCString(), "mach", 4) == 0) && @@ -525,17 +524,17 @@ PlatformDarwinKernel::GetKernelsAndKextsInDirectoryHelper( thisp->m_kernel_binaries_without_dsyms.push_back(file_spec); return FileSpec::eEnumerateDirectoryResultNext; } - } else if (ft == llvm::sys::fs::file_type::directory_file && + } else if (file_type == FileSpec::eFileTypeDirectory && file_spec_extension == g_kext_suffix) { AddKextToMap(thisp, file_spec); // Look to see if there is a PlugIns subdir with more kexts FileSpec contents_plugins(file_spec.GetPath() + "/Contents/PlugIns", false); std::string search_here_too; - if (llvm::sys::fs::is_directory(contents_plugins.GetPath())) { + if (contents_plugins.Exists() && contents_plugins.IsDirectory()) { search_here_too = contents_plugins.GetPath(); } else { FileSpec plugins(file_spec.GetPath() + "/PlugIns", false); - if (llvm::sys::fs::is_directory(plugins.GetPath())) { + if (plugins.Exists() && plugins.IsDirectory()) { search_here_too = plugins.GetPath(); } } @@ -592,7 +591,7 @@ bool PlatformDarwinKernel::KextHasdSYMSibling( std::string filename = dsym_fspec.GetFilename().AsCString(); filename += ".dSYM"; dsym_fspec.GetFilename() = ConstString(filename); - if (llvm::sys::fs::is_directory(dsym_fspec.GetPath())) { + if (dsym_fspec.Exists() && dsym_fspec.IsDirectory()) { return true; } // Should probably get the CFBundleExecutable here or call @@ -606,7 +605,7 @@ bool PlatformDarwinKernel::KextHasdSYMSibling( deep_bundle_str += executable_name.AsCString(); deep_bundle_str += ".dSYM"; dsym_fspec.SetFile(deep_bundle_str, true); - if (llvm::sys::fs::is_directory(dsym_fspec.GetPath())) { + if (dsym_fspec.Exists() && dsym_fspec.IsDirectory()) { return true; } @@ -616,7 +615,7 @@ bool PlatformDarwinKernel::KextHasdSYMSibling( shallow_bundle_str += executable_name.AsCString(); shallow_bundle_str += ".dSYM"; dsym_fspec.SetFile(shallow_bundle_str, true); - if (llvm::sys::fs::is_directory(dsym_fspec.GetPath())) { + if (dsym_fspec.Exists() && dsym_fspec.IsDirectory()) { return true; } return false; @@ -630,7 +629,7 @@ bool PlatformDarwinKernel::KernelHasdSYMSibling(const FileSpec &kernel_binary) { std::string filename = kernel_binary.GetFilename().AsCString(); filename += ".dSYM"; kernel_dsym.GetFilename() = ConstString(filename); - if (llvm::sys::fs::is_directory(kernel_dsym.GetPath())) { + if (kernel_dsym.Exists() && kernel_dsym.IsDirectory()) { return true; } return false; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h index e5ac2606b5b..f1ecc162fdc 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h @@ -20,8 +20,6 @@ // Other libraries and framework includes #include "lldb/Host/FileSpec.h" -#include "llvm/Support/FileSystem.h" - // Project includes #include "PlatformDarwin.h" @@ -107,25 +105,26 @@ protected: void AddSDKSubdirsToSearchPaths(const std::string &dir); static lldb_private::FileSpec::EnumerateDirectoryResult - FindKDKandSDKDirectoriesInDirectory(void *baton, llvm::sys::fs::file_type ft, - const lldb_private::FileSpec &file_spec); + FindKDKandSDKDirectoriesInDirectory( + void *baton, lldb_private::FileSpec::FileType file_type, + const lldb_private::FileSpec &file_spec); void SearchForKextsAndKernelsRecursively(); static lldb_private::FileSpec::EnumerateDirectoryResult GetKernelsAndKextsInDirectoryWithRecursion( - void *baton, llvm::sys::fs::file_type ft, + void *baton, lldb_private::FileSpec::FileType file_type, const lldb_private::FileSpec &file_spec); static lldb_private::FileSpec::EnumerateDirectoryResult GetKernelsAndKextsInDirectoryNoRecursion( - void *baton, llvm::sys::fs::file_type ft, + void *baton, lldb_private::FileSpec::FileType file_type, const lldb_private::FileSpec &file_spec); static lldb_private::FileSpec::EnumerateDirectoryResult - GetKernelsAndKextsInDirectoryHelper(void *baton, llvm::sys::fs::file_type ft, - const lldb_private::FileSpec &file_spec, - bool recurse); + GetKernelsAndKextsInDirectoryHelper( + void *baton, lldb_private::FileSpec::FileType file_type, + const lldb_private::FileSpec &file_spec, bool recurse); static void AddKextToMap(PlatformDarwinKernel *thisp, const lldb_private::FileSpec &file_spec); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp index 972fd8d1b26..9e0352a4f3c 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp @@ -250,7 +250,7 @@ Error PlatformRemoteAppleTV::ResolveExecutable( FileSpec::EnumerateDirectoryResult PlatformRemoteAppleTV::GetContainedFilesIntoVectorOfStringsCallback( - void *baton, llvm::sys::fs::file_type ft, const FileSpec &file_spec) { + void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { ((PlatformRemoteAppleTV::SDKDirectoryInfoCollection *)baton) ->push_back(PlatformRemoteAppleTV::SDKDirectoryInfo(file_spec)); return FileSpec::eEnumerateDirectoryResultNext; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h index 3ff4b0bd284..388ea578d06 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h @@ -18,8 +18,6 @@ // Project includes #include "lldb/Host/FileSpec.h" -#include "llvm/Support/FileSystem.h" - #include "PlatformDarwin.h" class PlatformRemoteAppleTV : public PlatformDarwin { @@ -118,7 +116,7 @@ protected: static lldb_private::FileSpec::EnumerateDirectoryResult GetContainedFilesIntoVectorOfStringsCallback( - void *baton, llvm::sys::fs::file_type ft, + void *baton, lldb_private::FileSpec::FileType file_type, const lldb_private::FileSpec &file_spec); uint32_t FindFileInAllSDKs(const char *platform_file_path, diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp index e957188d35c..2f7da298390 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp @@ -260,7 +260,7 @@ Error PlatformRemoteAppleWatch::ResolveExecutable( FileSpec::EnumerateDirectoryResult PlatformRemoteAppleWatch::GetContainedFilesIntoVectorOfStringsCallback( - void *baton, llvm::sys::fs::file_type ft, const FileSpec &file_spec) { + void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { ((PlatformRemoteAppleWatch::SDKDirectoryInfoCollection *)baton) ->push_back(PlatformRemoteAppleWatch::SDKDirectoryInfo(file_spec)); return FileSpec::eEnumerateDirectoryResultNext; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h index 4b585dc2d58..0b388af329a 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h @@ -21,8 +21,6 @@ #include "PlatformDarwin.h" -#include "llvm/Support/FileSystem.h" - class PlatformRemoteAppleWatch : public PlatformDarwin { public: PlatformRemoteAppleWatch(); @@ -120,7 +118,7 @@ protected: static lldb_private::FileSpec::EnumerateDirectoryResult GetContainedFilesIntoVectorOfStringsCallback( - void *baton, llvm::sys::fs::file_type ft, + void *baton, lldb_private::FileSpec::FileType file_type, const lldb_private::FileSpec &file_spec); uint32_t FindFileInAllSDKs(const char *platform_file_path, diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp index 6c6485e539d..b4b20a00098 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp @@ -255,7 +255,7 @@ Error PlatformRemoteiOS::ResolveExecutable( FileSpec::EnumerateDirectoryResult PlatformRemoteiOS::GetContainedFilesIntoVectorOfStringsCallback( - void *baton, llvm::sys::fs::file_type ft, const FileSpec &file_spec) { + void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { ((PlatformRemoteiOS::SDKDirectoryInfoCollection *)baton) ->push_back(PlatformRemoteiOS::SDKDirectoryInfo(file_spec)); return FileSpec::eEnumerateDirectoryResultNext; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h index 88cf6a54c12..4d88a9e4103 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h @@ -19,8 +19,6 @@ #include "PlatformDarwin.h" #include "lldb/Host/FileSpec.h" -#include "llvm/Support/FileSystem.h" - class PlatformRemoteiOS : public PlatformDarwin { public: PlatformRemoteiOS(); @@ -116,7 +114,7 @@ protected: static lldb_private::FileSpec::EnumerateDirectoryResult GetContainedFilesIntoVectorOfStringsCallback( - void *baton, llvm::sys::fs::file_type ft, + void *baton, lldb_private::FileSpec::FileType file_type, const lldb_private::FileSpec &file_spec); uint32_t FindFileInAllSDKs(const char *platform_file_path, diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp index 8e922b4d8fd..c1fd08c3c46 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp @@ -29,8 +29,6 @@ #include "lldb/Utility/Log.h" #include "lldb/Utility/StreamString.h" -#include "llvm/Support/FileSystem.h" - using namespace lldb; using namespace lldb_private; @@ -254,9 +252,9 @@ Error PlatformiOSSimulator::ResolveExecutable( } static FileSpec::EnumerateDirectoryResult -EnumerateDirectoryCallback(void *baton, llvm::sys::fs::file_type ft, +EnumerateDirectoryCallback(void *baton, FileSpec::FileType file_type, const FileSpec &file_spec) { - if (ft == llvm::sys::fs::file_type::directory_file) { + if (file_type == FileSpec::eFileTypeDirectory) { const char *filename = file_spec.GetFilename().GetCString(); if (filename && strncmp(filename, "iPhoneSimulator", strlen("iPhoneSimulator")) == 0) { diff --git a/lldb/source/Plugins/Process/Darwin/NativeProcessDarwin.cpp b/lldb/source/Plugins/Process/Darwin/NativeProcessDarwin.cpp index 65ab12fe1ad..b231f259208 100644 --- a/lldb/source/Plugins/Process/Darwin/NativeProcessDarwin.cpp +++ b/lldb/source/Plugins/Process/Darwin/NativeProcessDarwin.cpp @@ -31,8 +31,6 @@ #include "MachException.h" -#include "llvm/Support/FileSystem.h" - using namespace lldb; using namespace lldb_private; using namespace lldb_private::process_darwin; @@ -65,7 +63,7 @@ Error NativeProcessProtocol::Launch( FileSpec working_dir(launch_info.GetWorkingDirectory()); if (working_dir && (!working_dir.ResolvePath() || - !llvm::sys::fs::is_directory(working_dir.GetPath())) { + working_dir.GetFileType() != FileSpec::eFileTypeDirectory)) { error.SetErrorStringWithFormat("No such file or directory: %s", working_dir.GetCString()); return error; diff --git a/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp b/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp index 1f02385d50d..f0a62e85458 100644 --- a/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp +++ b/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp @@ -46,7 +46,6 @@ #include "lldb/Host/posix/Fcntl.h" -#include "llvm/Support/FileSystem.h" #include "llvm/Support/Threading.h" using namespace lldb; @@ -362,9 +361,9 @@ Error ProcessFreeBSD::DoLaunch(Module *module, ProcessLaunchInfo &launch_info) { assert(m_monitor == NULL); FileSpec working_dir = launch_info.GetWorkingDirectory(); - namespace fs = llvm::sys::fs; - if (working_dir && (!working_dir.ResolvePath() || - !fs::is_directory(working_dir.GetPath()))) { + if (working_dir && + (!working_dir.ResolvePath() || + working_dir.GetFileType() != FileSpec::eFileTypeDirectory)) { error.SetErrorStringWithFormat("No such file or directory: %s", working_dir.GetCString()); return error; diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp index a3df09cdc4f..05276294f0e 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -49,7 +49,6 @@ #include "ProcFileReader.h" #include "Procfs.h" -#include "llvm/Support/FileSystem.h" #include "llvm/Support/Threading.h" #include <linux/unistd.h> @@ -225,8 +224,9 @@ Error NativeProcessProtocol::Launch( // Verify the working directory is valid if one was specified. FileSpec working_dir{launch_info.GetWorkingDirectory()}; - if (working_dir && (!working_dir.ResolvePath() || - !llvm::sys::fs::is_directory(working_dir.GetPath()))) { + if (working_dir && + (!working_dir.ResolvePath() || + working_dir.GetFileType() != FileSpec::eFileTypeDirectory)) { error.SetErrorStringWithFormat("No such file or directory: %s", working_dir.GetCString()); return error; diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp index a34c9b89227..fdc13fbc8ac 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -51,7 +51,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/FileSystem.h" using namespace lldb; using namespace lldb_private; @@ -2576,13 +2575,9 @@ bool ScriptInterpreterPython::LoadScriptingModule( Locker::NoSTDIN, Locker::FreeAcquiredLock | (init_session ? Locker::TearDownSession : 0)); - namespace fs = llvm::sys::fs; - fs::file_status st; - std::error_code ec = status(target_file.GetPath(), st); - if (ec || st.type() == fs::file_type::status_error || - st.type() == fs::file_type::type_unknown || - st.type() == fs::file_type::file_not_found) { + if (target_file.GetFileType() == FileSpec::eFileTypeInvalid || + target_file.GetFileType() == FileSpec::eFileTypeUnknown) { // if not a valid file of any sort, check if it might be a filename still // dot can't be used but / and \ can, and if either is found, reject if (strchr(pathname, '\\') || strchr(pathname, '/')) { @@ -2591,8 +2586,9 @@ bool ScriptInterpreterPython::LoadScriptingModule( } basename = pathname; // not a filename, probably a package of some sort, // let it go through - } else if (is_directory(st) || fs::is_regular_file(st) || - st.type() == fs::file_type::symlink_file) { + } else if (target_file.GetFileType() == FileSpec::eFileTypeDirectory || + target_file.GetFileType() == FileSpec::eFileTypeRegular || + target_file.GetFileType() == FileSpec::eFileTypeSymbolicLink) { std::string directory = target_file.GetDirectory().GetCString(); replace_all(directory, "\\", "\\\\"); replace_all(directory, "'", "\\'"); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 937831d2b6e..860956a1ad6 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -72,8 +72,6 @@ #include "SymbolFileDWARFDebugMap.h" #include "SymbolFileDWARFDwo.h" -#include "llvm/Support/FileSystem.h" - #include <map> #include <ctype.h> @@ -193,9 +191,7 @@ static const char *resolveCompDir(const char *path_from_dwarf) { if (!is_symlink) return local_path; - namespace fs = llvm::sys::fs; - if (fs::get_file_type(local_path_spec.GetPath()) != - fs::file_type::symlink_file) + if (!local_path_spec.IsSymbolicLink()) return local_path; FileSpec resolved_local_path_spec; diff --git a/lldb/source/Target/ModuleCache.cpp b/lldb/source/Target/ModuleCache.cpp index 123b6876af2..d01307c23e8 100644 --- a/lldb/source/Target/ModuleCache.cpp +++ b/lldb/source/Target/ModuleCache.cpp @@ -59,19 +59,15 @@ public: void Delete(); }; -static FileSpec JoinPath(const FileSpec &path1, const char *path2) { +FileSpec JoinPath(const FileSpec &path1, const char *path2) { FileSpec result_spec(path1); result_spec.AppendPathComponent(path2); return result_spec; } -static Error MakeDirectory(const FileSpec &dir_path) { - llvm::sys::fs::file_status st; - if (status(dir_path.GetPath(), st)) - return Error("Could not stat path"); - - if (exists(st)) { - if (!is_directory(st)) +Error MakeDirectory(const FileSpec &dir_path) { + if (dir_path.Exists()) { + if (!dir_path.IsDirectory()) return Error("Invalid existing path"); return Error(); diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp index 7e179c03899..64ee3733ca8 100644 --- a/lldb/source/Target/Platform.cpp +++ b/lldb/source/Target/Platform.cpp @@ -42,8 +42,6 @@ #include "lldb/Utility/Error.h" #include "lldb/Utility/Log.h" -#include "llvm/Support/FileSystem.h" - // Define these constants from POSIX mman.h rather than include the file // so that they will be correct even when compiled on Linux. #define MAP_PRIVATE 2 @@ -543,18 +541,17 @@ struct RecurseCopyBaton { }; static FileSpec::EnumerateDirectoryResult -RecurseCopy_Callback(void *baton, llvm::sys::fs::file_type ft, +RecurseCopy_Callback(void *baton, FileSpec::FileType file_type, const FileSpec &src) { RecurseCopyBaton *rc_baton = (RecurseCopyBaton *)baton; - namespace fs = llvm::sys::fs; - switch (ft) { - case fs::file_type::fifo_file: - case fs::file_type::socket_file: + switch (file_type) { + case FileSpec::eFileTypePipe: + case FileSpec::eFileTypeSocket: // we have no way to copy pipes and sockets - ignore them and continue return FileSpec::eEnumerateDirectoryResultNext; break; - case fs::file_type::directory_file: { + case FileSpec::eFileTypeDirectory: { // make the new directory and get in there FileSpec dst_dir = rc_baton->dst; if (!dst_dir.GetFilename()) @@ -584,7 +581,7 @@ RecurseCopy_Callback(void *baton, llvm::sys::fs::file_type ft, return FileSpec::eEnumerateDirectoryResultNext; } break; - case fs::file_type::symlink_file: { + case FileSpec::eFileTypeSymbolicLink: { // copy the file and keep going FileSpec dst_file = rc_baton->dst; if (!dst_file.GetFilename()) @@ -606,7 +603,7 @@ RecurseCopy_Callback(void *baton, llvm::sys::fs::file_type ft, return FileSpec::eEnumerateDirectoryResultNext; } break; - case fs::file_type::regular_file: { + case FileSpec::eFileTypeRegular: { // copy the file and keep going FileSpec dst_file = rc_baton->dst; if (!dst_file.GetFilename()) @@ -619,13 +616,15 @@ RecurseCopy_Callback(void *baton, llvm::sys::fs::file_type ft, return FileSpec::eEnumerateDirectoryResultNext; } break; - default: + case FileSpec::eFileTypeInvalid: + case FileSpec::eFileTypeOther: + case FileSpec::eFileTypeUnknown: rc_baton->error.SetErrorStringWithFormat( "invalid file detected during copy: %s", src.GetPath().c_str()); return FileSpec::eEnumerateDirectoryResultQuit; // got an error, bail out break; } - llvm_unreachable("Unhandled file_type!"); + llvm_unreachable("Unhandled FileSpec::FileType!"); } Error Platform::Install(const FileSpec &src, const FileSpec &dst) { @@ -693,9 +692,8 @@ Error Platform::Install(const FileSpec &src, const FileSpec &dst) { if (GetSupportsRSync()) { error = PutFile(src, dst); } else { - namespace fs = llvm::sys::fs; - switch (fs::get_file_type(src.GetPath())) { - case fs::file_type::directory_file: { + switch (src.GetFileType()) { + case FileSpec::eFileTypeDirectory: { if (GetFileExists(fixed_dst)) Unlink(fixed_dst); uint32_t permissions = src.GetPermissions(); @@ -715,13 +713,13 @@ Error Platform::Install(const FileSpec &src, const FileSpec &dst) { } } break; - case fs::file_type::regular_file: + case FileSpec::eFileTypeRegular: if (GetFileExists(fixed_dst)) Unlink(fixed_dst); error = PutFile(src, fixed_dst); break; - case fs::file_type::symlink_file: { + case FileSpec::eFileTypeSymbolicLink: { if (GetFileExists(fixed_dst)) Unlink(fixed_dst); FileSpec src_resolved; @@ -729,13 +727,15 @@ Error Platform::Install(const FileSpec &src, const FileSpec &dst) { if (error.Success()) error = CreateSymlink(dst, src_resolved); } break; - case fs::file_type::fifo_file: + case FileSpec::eFileTypePipe: error.SetErrorString("platform install doesn't handle pipes"); break; - case fs::file_type::socket_file: + case FileSpec::eFileTypeSocket: error.SetErrorString("platform install doesn't handle sockets"); break; - default: + case FileSpec::eFileTypeInvalid: + case FileSpec::eFileTypeUnknown: + case FileSpec::eFileTypeOther: error.SetErrorString( "platform install doesn't handle non file or directory items"); break; @@ -1236,8 +1236,7 @@ Error Platform::PutFile(const FileSpec &source, const FileSpec &destination, uint32_t source_open_options = File::eOpenOptionRead | File::eOpenOptionCloseOnExec; - namespace fs = llvm::sys::fs; - if (fs::get_file_type(source.GetPath()) == fs::file_type::symlink_file) + if (source.GetFileType() == FileSpec::eFileTypeSymbolicLink) source_open_options |= File::eOpenOptionDontFollowSymlinks; File source_file(source, source_open_options, lldb::eFilePermissionsUserRW); diff --git a/lldb/source/Target/TargetList.cpp b/lldb/source/Target/TargetList.cpp index 0156ab17357..56fb83a77e8 100644 --- a/lldb/source/Target/TargetList.cpp +++ b/lldb/source/Target/TargetList.cpp @@ -362,7 +362,7 @@ Error TargetList::CreateTargetInternal(Debugger &debugger, char resolved_bundle_exe_path[PATH_MAX]; resolved_bundle_exe_path[0] = '\0'; if (file) { - if (llvm::sys::fs::is_directory(file.GetPath())) + if (file.GetFileType() == FileSpec::eFileTypeDirectory) user_exe_path_is_bundle = true; if (file.IsRelative() && !user_exe_path.empty()) { |