INTEGRATION: CWS vgbugs04 (1.1.2); FILE ADDED
2006/09/15 15:19:53 vg 1.1.2.4: #i69015# -n switsh for windows-native slashes 2006/08/23 13:54:39 vg 1.1.2.3: #137785# case insensitive paths for Windows 2006/08/23 13:43:49 vg 1.1.2.2: #137785# case insensitive paths for Windows 2006/07/04 10:37:13 vg 1.1.2.1: #137785# optimize makedepend
This commit is contained in:
parent
d8a02a76b8
commit
a6d5936851
1 changed files with 79 additions and 0 deletions
79
soltools/mkdepend/collectdircontent.cxx
Executable file
79
soltools/mkdepend/collectdircontent.cxx
Executable file
|
@ -0,0 +1,79 @@
|
|||
#include "collectdircontent.hxx"
|
||||
|
||||
PathFilePair IncludesCollection::split_path(const string& filePath) {
|
||||
string sepU = "/";
|
||||
string sepW = "\\";
|
||||
string::size_type pos = filePath.rfind (sepU);
|
||||
string::size_type posW = filePath.rfind (sepW);
|
||||
if ((posW != string::npos) && ((posW > pos) || (pos == string::npos))) pos = posW;
|
||||
if (pos != string::npos) {
|
||||
string dirName = filePath.substr(0, pos);
|
||||
return PathFilePair(dirName, filePath.substr(pos + 1, filePath.length()));
|
||||
} else
|
||||
return PathFilePair(".", filePath);
|
||||
};
|
||||
|
||||
void IncludesCollection::add_to_collection(const string& dirPath) {
|
||||
DirContent dirContent;
|
||||
#if defined( WNT )
|
||||
WIN32_FIND_DATA FindFileData;
|
||||
HANDLE hFind;
|
||||
hFind = FindFirstFile((dirPath + "\\*").c_str(), &FindFileData);
|
||||
if (hFind == INVALID_HANDLE_VALUE) {
|
||||
// Invalid File Handle - no need to try it anymore
|
||||
allIncludes.insert(EntriesPair(dirPath, DirContent()));
|
||||
return;
|
||||
};
|
||||
do {
|
||||
string winFileName(FindFileData.cFileName);
|
||||
transform(winFileName.begin(), winFileName.end(), winFileName.begin(), tolower);
|
||||
dirContent.insert(winFileName);
|
||||
} while (FindNextFile(hFind, &FindFileData));
|
||||
#else
|
||||
DIR *pdir;
|
||||
dirent *pent;
|
||||
pdir = opendir(dirPath.c_str()); //"." refers to the current dir
|
||||
if (!pdir) {
|
||||
// Invalid File Handle - no need to try it anymore
|
||||
allIncludes.insert(EntriesPair(dirPath, DirContent()));
|
||||
return;
|
||||
}
|
||||
while ((pent = readdir(pdir))) {
|
||||
dirContent.insert(pent->d_name);
|
||||
};
|
||||
#endif // defined( WNT )
|
||||
allIncludes.insert(EntriesPair(dirPath, dirContent));
|
||||
};
|
||||
|
||||
bool IncludesCollection::exists(string filePath) {
|
||||
#if defined( WNT )
|
||||
transform(filePath.begin(), filePath.end(), filePath.begin(), tolower);
|
||||
#endif // defined( WNT )
|
||||
PathFilePair dirFile = split_path(filePath);
|
||||
string dirPath = dirFile.first;
|
||||
string fileName = dirFile.second;
|
||||
DirMap::iterator mapIter = allIncludes.find(dirPath);
|
||||
if (mapIter == allIncludes.end()) {
|
||||
add_to_collection(dirPath);
|
||||
mapIter = allIncludes.find(dirPath);
|
||||
};
|
||||
DirContent dirContent = (*mapIter).second;
|
||||
DirContent::iterator dirIter = dirContent.find(fileName);
|
||||
if (dirIter == dirContent.end()) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
};
|
||||
return false;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
|
||||
IncludesCollection * create_IncludesCollection() {
|
||||
return new IncludesCollection;
|
||||
}
|
||||
|
||||
int call_IncludesCollection_exists(IncludesCollection* m, const char * filePath) {
|
||||
return m->exists(filePath);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue