Fixed #2344 (FileLister Unix: Don't convert to absolute paths)

This commit is contained in:
Daniel Marjamäki 2010-12-22 21:01:51 +01:00
parent be46d453c4
commit b89f486d0d
2 changed files with 24 additions and 6 deletions

View File

@ -37,7 +37,10 @@
////// This code is POSIX-style systems ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void FileListerUnix::recursiveAddFiles(std::vector<std::string> &filenames, const std::string &path)
void FileListerUnix::recursiveAddFiles2(std::vector<std::string> &relative,
std::vector<std::string> &absolute,
const std::string &path)
{
std::ostringstream oss;
oss << path;
@ -59,26 +62,37 @@ void FileListerUnix::recursiveAddFiles(std::vector<std::string> &filenames, cons
if (!fname)
continue;
if (std::find(filenames.begin(), filenames.end(), std::string(fname)) != filenames.end())
// Does absolute path exist? then bail out
if (std::find(absolute.begin(), absolute.end(), std::string(fname)) != absolute.end())
{
free(fname);
continue;
}
if (sameFileName(path,fname) || FileLister::acceptFile(filename))
filenames.push_back(fname);
if (sameFileName(path,filename) || FileListerUnix::acceptFile(filename))
{
relative.push_back(filename);
absolute.push_back(fname);
}
free(fname);
}
else
{
// Directory
getFileLister()->recursiveAddFiles(filenames, filename);
recursiveAddFiles2(relative, absolute, filename);
}
}
globfree(&glob_results);
}
void FileListerUnix::recursiveAddFiles(std::vector<std::string> &filenames, const std::string &path)
{
std::vector<std::string> abs;
recursiveAddFiles2(filenames, abs, path);
}
bool FileListerUnix::sameFileName(const std::string &fname1, const std::string &fname2)
{
#if defined(__linux__) || defined(__sun)

View File

@ -34,7 +34,11 @@ public:
virtual bool sameFileName(const std::string &fname1, const std::string &fname2);
// virtual static bool acceptFile(const std::string &filename);
private:
#ifndef _WIN32
void recursiveAddFiles2(std::vector<std::string> &relative,
std::vector<std::string> &absolute,
const std::string &path);
#endif
};
/// @}