forked from OSchip/llvm-project
parent
76993a01c9
commit
02d0ec8e70
|
@ -17,7 +17,6 @@
|
|||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/TimeValue.h"
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
@ -263,15 +262,6 @@ namespace sys {
|
|||
/// @brief Determines if the file is a regular file
|
||||
bool isRegularFile() const;
|
||||
|
||||
/// This function builds a list of paths that are the names of the
|
||||
/// files and directories in a directory.
|
||||
/// @returns true if an error occurs, true otherwise
|
||||
/// @brief Build a list of directory's contents.
|
||||
bool getDirectoryContents(
|
||||
std::set<Path> &paths, ///< The resulting list of file & directory names
|
||||
std::string* ErrMsg ///< Optional place to return an error message.
|
||||
) const;
|
||||
|
||||
/// @}
|
||||
/// @name Path Mutators
|
||||
/// @{
|
||||
|
|
|
@ -389,36 +389,6 @@ bool Path::makeWriteableOnDisk(std::string* ErrMsg) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Path::getDirectoryContents(std::set<Path>& result, std::string* ErrMsg) const {
|
||||
DIR* direntries = ::opendir(path.c_str());
|
||||
if (direntries == 0)
|
||||
return MakeErrMsg(ErrMsg, path + ": can't open directory");
|
||||
|
||||
std::string dirPath = path;
|
||||
if (!lastIsSlash(dirPath))
|
||||
dirPath += '/';
|
||||
|
||||
result.clear();
|
||||
struct dirent* de = ::readdir(direntries);
|
||||
for ( ; de != 0; de = ::readdir(direntries)) {
|
||||
if (de->d_name[0] != '.') {
|
||||
Path aPath(dirPath + (const char*)de->d_name);
|
||||
struct stat st;
|
||||
if (0 != lstat(aPath.path.c_str(), &st)) {
|
||||
if (S_ISLNK(st.st_mode))
|
||||
continue; // dangling symlink -- ignore
|
||||
return MakeErrMsg(ErrMsg,
|
||||
aPath.path + ": can't determine file object type");
|
||||
}
|
||||
result.insert(aPath);
|
||||
}
|
||||
}
|
||||
|
||||
closedir(direntries);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Path::set(StringRef a_path) {
|
||||
if (a_path.empty())
|
||||
|
|
|
@ -301,54 +301,6 @@ bool Path::makeWriteableOnDisk(std::string* ErrMsg) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Path::getDirectoryContents(std::set<Path>& result, std::string* ErrMsg) const {
|
||||
WIN32_FILE_ATTRIBUTE_DATA fi;
|
||||
if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi)) {
|
||||
MakeErrMsg(ErrMsg, path + ": can't get status of file");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
|
||||
if (ErrMsg)
|
||||
*ErrMsg = path + ": not a directory";
|
||||
return true;
|
||||
}
|
||||
|
||||
result.clear();
|
||||
WIN32_FIND_DATA fd;
|
||||
std::string searchpath = path;
|
||||
if (path.size() == 0 || searchpath[path.size()-1] == '/')
|
||||
searchpath += "*";
|
||||
else
|
||||
searchpath += "/*";
|
||||
|
||||
HANDLE h = FindFirstFile(searchpath.c_str(), &fd);
|
||||
if (h == INVALID_HANDLE_VALUE) {
|
||||
if (GetLastError() == ERROR_FILE_NOT_FOUND)
|
||||
return true; // not really an error, now is it?
|
||||
MakeErrMsg(ErrMsg, path + ": Can't read directory: ");
|
||||
return true;
|
||||
}
|
||||
|
||||
do {
|
||||
if (fd.cFileName[0] == '.')
|
||||
continue;
|
||||
Path aPath(path);
|
||||
aPath.appendComponent(&fd.cFileName[0]);
|
||||
result.insert(aPath);
|
||||
} while (FindNextFile(h, &fd));
|
||||
|
||||
DWORD err = GetLastError();
|
||||
FindClose(h);
|
||||
if (err != ERROR_NO_MORE_FILES) {
|
||||
SetLastError(err);
|
||||
MakeErrMsg(ErrMsg, path + ": Can't read directory: ");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Path::set(StringRef a_path) {
|
||||
if (a_path.empty())
|
||||
|
|
Loading…
Reference in New Issue