Unverified Commit 9a3f9799 authored by Dmitry Kalinkin's avatar Dmitry Kalinkin
Browse files

Directory: implement error reporting

parent 83118a93
......@@ -103,7 +103,7 @@ void Directory::Clear()
namespace KWSYS_NAMESPACE {
bool Directory::Load(const std::string& name)
bool Directory::Load(const std::string& name, std::string* errorMessage)
{
this->Clear();
# if (defined(_MSC_VER) && _MSC_VER < 1300) || defined(__BORLANDC__)
......@@ -146,7 +146,8 @@ bool Directory::Load(const std::string& name)
return _findclose(srchHandle) != -1;
}
unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name)
unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name,
std::string* errorMessage)
{
# if (defined(_MSC_VER) && _MSC_VER < 1300) || defined(__BORLANDC__)
// Older Visual C++ and Embarcadero compilers.
......@@ -192,6 +193,8 @@ unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name)
# include <sys/types.h>
# include <dirent.h>
# include <errno.h>
# include <string.h>
// PGI with glibc has trouble with dirent and large file support:
// http://www.pgroup.com/userforum/viewtopic.php?
......@@ -209,29 +212,46 @@ unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name)
namespace KWSYS_NAMESPACE {
bool Directory::Load(const std::string& name)
bool Directory::Load(const std::string& name, std::string* errorMessage)
{
this->Clear();
errno = 0;
DIR* dir = opendir(name.c_str());
if (!dir) {
if (errorMessage != nullptr) {
*errorMessage = std::string(strerror(errno));
}
return false;
}
errno = 0;
for (kwsys_dirent* d = readdir(dir); d; d = readdir(dir)) {
this->Internal->Files.emplace_back(d->d_name);
}
if (errno != 0) {
if (errorMessage != nullptr) {
*errorMessage = std::string(strerror(errno));
}
return false;
}
this->Internal->Path = name;
closedir(dir);
return true;
}
unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name)
unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name,
std::string* errorMessage)
{
errno = 0;
DIR* dir = opendir(name.c_str());
if (!dir) {
if (errorMessage != nullptr) {
*errorMessage = std::string(strerror(errno));
}
return 0;
}
......@@ -239,6 +259,13 @@ unsigned long Directory::GetNumberOfFilesInDirectory(const std::string& name)
for (kwsys_dirent* d = readdir(dir); d; d = readdir(dir)) {
count++;
}
if (errno != 0) {
if (errorMessage != nullptr) {
*errorMessage = std::string(strerror(errno));
}
return false;
}
closedir(dir);
return count;
}
......
......@@ -35,7 +35,7 @@ public:
* in that directory. 0 is returned if the directory can not be
* opened, 1 if it is opened.
*/
bool Load(const std::string&);
bool Load(const std::string&, std::string* errorMessage = nullptr);
/**
* Return the number of files in the current directory.
......@@ -46,7 +46,8 @@ public:
* Return the number of files in the specified directory.
* A higher performance static method.
*/
static unsigned long GetNumberOfFilesInDirectory(const std::string&);
static unsigned long GetNumberOfFilesInDirectory(
const std::string&, std::string* errorMessage = nullptr);
/**
* Return the file at the given index, the indexing is 0 based
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment