From 6d54cfb030c337e3c29814cd530913d99635ff5b Mon Sep 17 00:00:00 2001 From: Brad King Date: Sun, 19 Jan 2003 11:42:37 -0500 Subject: [PATCH] ENH: Improved CopyFile error messages. --- Source/cmSystemTools.cxx | 52 ++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index e67708fc4..6b10ab2b8 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -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()); } }