diff options
author | Brad King <brad.king@kitware.com> | 2009-04-15 09:57:57 -0400 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-04-15 09:57:57 -0400 |
commit | d3363beb2f5b4bedee95aae6f6697f059ed3f48b (patch) | |
tree | f18969c5c589724ed99eab30f38607f63a9ae116 /Source/cmGeneratedFileStream.cxx | |
parent | 6218a1a7863ce3040ed7b7a724f10731973d6683 (diff) | |
download | cmake-d3363beb2f5b4bedee95aae6f6697f059ed3f48b.tar.gz |
ENH: Move RenameFile to cmSystemTools
This moves the cmGeneratedFileStream::RenameFile method implementation
into cmSystemTools. It works only within a single filesystem volume,
but is atomic when the operating system permits.
Diffstat (limited to 'Source/cmGeneratedFileStream.cxx')
-rw-r--r-- | Source/cmGeneratedFileStream.cxx | 54 |
1 files changed, 1 insertions, 53 deletions
diff --git a/Source/cmGeneratedFileStream.cxx b/Source/cmGeneratedFileStream.cxx index 1bd8669d26..0a7bab0592 100644 --- a/Source/cmGeneratedFileStream.cxx +++ b/Source/cmGeneratedFileStream.cxx @@ -18,14 +18,6 @@ #include "cmSystemTools.h" -// Includes needed for implementation of RenameFile. This is not in -// system tools because it is not implemented robustly enough to move -// files across directories. -#ifdef _WIN32 -# include <windows.h> -# include <sys/stat.h> -#endif - #if defined(CMAKE_BUILD_WITH_CMAKE) # include <cm_zlib.h> #endif @@ -254,51 +246,7 @@ int cmGeneratedFileStreamBase::CompressFile(const char*, const char*) int cmGeneratedFileStreamBase::RenameFile(const char* oldname, const char* newname) { -#ifdef _WIN32 - /* On Windows the move functions will not replace existing files. - Check if the destination exists. */ - struct stat newFile; - if(stat(newname, &newFile) == 0) - { - /* The destination exists. We have to replace it carefully. The - MoveFileEx function does what we need but is not available on - Win9x. */ - OSVERSIONINFO osv; - DWORD attrs; - - /* Make sure the destination is not read only. */ - attrs = GetFileAttributes(newname); - if(attrs & FILE_ATTRIBUTE_READONLY) - { - SetFileAttributes(newname, attrs & ~FILE_ATTRIBUTE_READONLY); - } - - /* Check the windows version number. */ - osv.dwOSVersionInfoSize = sizeof(osv); - GetVersionEx(&osv); - if(osv.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) - { - /* This is Win9x. There is no MoveFileEx implementation. We - cannot quite rename the file atomically. Just delete the - destination and then move the file. */ - DeleteFile(newname); - return MoveFile(oldname, newname); - } - else - { - /* This is not Win9x. Use the MoveFileEx implementation. */ - return MoveFileEx(oldname, newname, MOVEFILE_REPLACE_EXISTING); - } - } - else - { - /* The destination does not exist. Just move the file. */ - return MoveFile(oldname, newname); - } -#else - /* On UNIX we have an OS-provided call to do this atomically. */ - return rename(oldname, newname) == 0; -#endif + return cmSystemTools::RenameFile(oldname, newname); } //---------------------------------------------------------------------------- |