ENH: Improved CopyFile error messages.

This commit is contained in:
Brad King 2003-01-19 11:42:37 -05:00
parent f18e47c40a
commit 6d54cfb030
1 changed files with 34 additions and 18 deletions

View File

@ -1064,12 +1064,13 @@ void cmSystemTools::cmCopyFile(const char* source,
std::ifstream fin(source);
#endif
if(!fin)
{
std::string m = "CopyFile failed to open input file \"";
{
int e = errno;
std::string m = "CopyFile failed to open source file \"";
m += source;
m += "\"";
m += " System Error: ";
m += strerror(errno);
m += strerror(e);
cmSystemTools::Error(m.c_str());
return;
}
@ -1083,11 +1084,12 @@ void cmSystemTools::cmCopyFile(const char* source,
#endif
if(!fout)
{
std::string m = "CopyFile failed to open output file \"";
int e = errno;
std::string m = "CopyFile failed to open destination file \"";
m += destination;
m += "\"";
m += " System Error: ";
m += strerror(errno);
m += strerror(e);
cmSystemTools::Error(m.c_str());
return;
}
@ -1114,23 +1116,37 @@ void cmSystemTools::cmCopyFile(const char* source,
fin.close();
fout.close();
// More checks
// More checks.
struct stat statSource, statDestination;
if (stat(source, &statSource) != 0 ||
stat(destination, &statDestination) != 0)
statSource.st_size = 12345;
statDestination.st_size = 12345;
if(stat(source, &statSource) != 0)
{
cmSystemTools::Error("CopyFile failed to copy files!");
int e = errno;
std::string m = "CopyFile failed to stat source file \"";
m += source;
m += "\"";
m += " System Error: ";
m += strerror(e);
cmSystemTools::Error(m.c_str());
}
else
else if(stat(destination, &statDestination) != 0)
{
if (statSource.st_size != statDestination.st_size)
{
cmOStringStream msg;
msg << "CopyFile failed to copy files (sizes differ, source: "
<< statSource.st_size << " , dest: " << statDestination.st_size;
cmSystemTools::Error(msg.str().c_str());
}
int e = errno;
std::string m = "CopyFile failed to stat destination file \"";
m += source;
m += "\"";
m += " System Error: ";
m += strerror(e);
cmSystemTools::Error(m.c_str());
}
else if(statSource.st_size != statDestination.st_size)
{
cmOStringStream msg;
msg << "CopyFile failed to copy files: source \""
<< source << "\", size " << statSource.st_size << ", destination \""
<< destination << "\", size " << statDestination.st_size;
cmSystemTools::Error(msg.str().c_str());
}
}