mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Fix a problem in getDirectoryContents where sub-directory names were
appended to a path string that didn't end in a slash, yielding invalid path names. Path contribute by Nicholas Riley. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22539 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a4433e1b31
commit
3be872ed59
@ -53,6 +53,13 @@
|
||||
# undef HAVE_MKDTEMP
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
inline bool lastIsSlash(const std::string& path) {
|
||||
return !path.empty() && path[path.length() - 1] == '/';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
using namespace sys;
|
||||
|
||||
@ -437,11 +444,15 @@ Path::getDirectoryContents(std::set<Path>& result) const {
|
||||
if (direntries == 0)
|
||||
ThrowErrno(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(path + (const char*)de->d_name);
|
||||
Path aPath(dirPath + (const char*)de->d_name);
|
||||
struct stat buf;
|
||||
if (0 != stat(aPath.path.c_str(), &buf)) {
|
||||
int stat_errno = errno;
|
||||
@ -477,11 +488,8 @@ Path::appendComponent(const std::string& name) {
|
||||
if (name.empty())
|
||||
return false;
|
||||
std::string save(path);
|
||||
if (!path.empty()) {
|
||||
size_t last = path.size() - 1;
|
||||
if (path[last] != '/')
|
||||
path += '/';
|
||||
}
|
||||
if (!lastIsSlash(path))
|
||||
path += '/';
|
||||
path += name;
|
||||
if (!isValid()) {
|
||||
path = save;
|
||||
|
Loading…
Reference in New Issue
Block a user