FIX: fix UMR

This commit is contained in:
Sebastien Barre 2002-04-12 09:57:17 -04:00
parent ea7888c11b
commit 4307df12ac
1 changed files with 31 additions and 7 deletions

View File

@ -957,28 +957,52 @@ bool cmSystemTools::FilesDiffer(const char* source,
{
return true;
}
struct stat statDestination;
if (stat(destination, &statDestination) != 0)
{
return true;
}
if(statSource.st_size != statDestination.st_size)
{
return true;
}
#ifdef _WIN32
std::ifstream finSource(source, std::ios::binary | std::ios::in);
std::ifstream finDestination(destination, std::ios::binary | std::ios::in);
#else
std::ifstream finSource(source);
std::ifstream finDestination(destination);
#endif
if(!finSource || !finDestination)
{
return true;
}
char* buffer1 = new char[statSource.st_size];
char* buffer2 = new char[statSource.st_size];
finSource.read(buffer1, statSource.st_size);
finDestination.read(buffer2, statSource.st_size);
int ret = memcmp(buffer1, buffer2, statSource.st_size);
delete [] buffer2;
delete [] buffer1;
char* source_buf = new char[statSource.st_size];
char* dest_buf = new char[statSource.st_size];
finSource.read(source_buf, statSource.st_size);
finDestination.read(dest_buf, statSource.st_size);
if(statSource.st_size != finSource.gcount() ||
statSource.st_size != finDestination.gcount())
{
cmSystemTools::Error("FilesDiffer failed reading files!");
delete [] dest_buf;
delete [] source_buf;
return false;
}
int ret = memcmp((const void*)source_buf,
(const void*)dest_buf,
statSource.st_size);
delete [] dest_buf;
delete [] source_buf;
return ret != 0;
}