Skip to content
Snippets Groups Projects
Commit 1c147abb authored by James Johnston's avatar James Johnston
Browse files

Directory: Use Windows API wherever possible and port to Embarcadero

Otherwise on e.g. MinGW or Embarcadero it would use POSIX functions
which works only for ASCII paths.

Change-Id: Ib95c79f0bc649e3befb646c6820380ef86108c8a
parent 9d1dbd95
No related branches found
No related tags found
No related merge requests found
......@@ -84,9 +84,9 @@ void Directory::Clear()
} // namespace KWSYS_NAMESPACE
// First microsoft compilers
// First Windows platforms
#if defined(_MSC_VER) || defined(__WATCOMC__)
#if defined(_WIN32) && !defined(__CYGWIN__)
#include <windows.h>
#include <io.h>
#include <ctype.h>
......@@ -97,15 +97,25 @@ void Directory::Clear()
#include <sys/stat.h>
#include <sys/types.h>
// Wide function names can vary depending on compiler:
#ifdef __BORLANDC__
# define _wfindfirst_func __wfindfirst
# define _wfindnext_func __wfindnext
#else
# define _wfindfirst_func _wfindfirst
# define _wfindnext_func _wfindnext
#endif
namespace KWSYS_NAMESPACE
{
bool Directory::Load(const std::string& name)
{
this->Clear();
#if _MSC_VER < 1300
#if (defined(_MSC_VER) && _MSC_VER < 1300) || defined(__BORLANDC__)
// Older Visual C++ and Embarcadero compilers.
long srchHandle;
#else
#else // Newer Visual C++
intptr_t srchHandle;
#endif
char* buf;
......@@ -132,7 +142,7 @@ bool Directory::Load(const std::string& name)
struct _wfinddata_t data; // data of current file
// Now put them into the file array
srchHandle = _wfindfirst((wchar_t*)Encoding::ToWide(buf).c_str(), &data);
srchHandle = _wfindfirst_func((wchar_t*)Encoding::ToWide(buf).c_str(), &data);
delete [] buf;
if ( srchHandle == -1 )
......@@ -145,16 +155,17 @@ bool Directory::Load(const std::string& name)
{
this->Internal->Files.push_back(Encoding::ToNarrow(data.name));
}
while ( _wfindnext(srchHandle, &data) != -1 );
while ( _wfindnext_func(srchHandle, &data) != -1 );
this->Internal->Path = name;
return _findclose(srchHandle) != -1;
}
unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name)
{
#if _MSC_VER < 1300
#if (defined(_MSC_VER) && _MSC_VER < 1300) || defined(__BORLANDC__)
// Older Visual C++ and Embarcadero compilers.
long srchHandle;
#else
#else // Newer Visual C++
intptr_t srchHandle;
#endif
char* buf;
......@@ -172,7 +183,7 @@ unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name)
struct _wfinddata_t data; // data of current file
// Now put them into the file array
srchHandle = _wfindfirst((wchar_t*)Encoding::ToWide(buf).c_str(), &data);
srchHandle = _wfindfirst_func((wchar_t*)Encoding::ToWide(buf).c_str(), &data);
delete [] buf;
if ( srchHandle == -1 )
......@@ -186,7 +197,7 @@ unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name)
{
count++;
}
while ( _wfindnext(srchHandle, &data) != -1 );
while ( _wfindnext_func(srchHandle, &data) != -1 );
_findclose(srchHandle);
return count;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment