ENH: Added methods to cmSystemTools to save and restore file modification times.
This commit is contained in:
parent
ce0f575473
commit
703b8c8225
|
@ -56,6 +56,18 @@
|
|||
# include "cmELF.h"
|
||||
#endif
|
||||
|
||||
class cmSystemToolsFileTime
|
||||
{
|
||||
public:
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
FILETIME timeCreation;
|
||||
FILETIME timeLastAccess;
|
||||
FILETIME timeLastWrite;
|
||||
#else
|
||||
struct utimbuf timeBuf;
|
||||
#endif
|
||||
};
|
||||
|
||||
#if defined(__sgi) && !defined(__GNUC__)
|
||||
# pragma set woff 1375 /* base class destructor not virtual */
|
||||
#endif
|
||||
|
@ -2110,6 +2122,67 @@ bool cmSystemTools::CopyFileTime(const char* fromFile, const char* toFile)
|
|||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmSystemToolsFileTime* cmSystemTools::FileTimeNew()
|
||||
{
|
||||
return new cmSystemToolsFileTime;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmSystemTools::FileTimeDelete(cmSystemToolsFileTime* t)
|
||||
{
|
||||
delete t;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmSystemTools::FileTimeGet(const char* fname, cmSystemToolsFileTime* t)
|
||||
{
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
cmSystemToolsWindowsHandle h =
|
||||
CreateFile(fname, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
|
||||
if(!h)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!GetFileTime(h, &t->timeCreation, &t->timeLastAccess, &t->timeLastWrite))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
struct stat st;
|
||||
if(stat(fname, &st) < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
t->timeBuf.actime = st.st_atime;
|
||||
t->timeBuf.modtime = st.st_mtime;
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmSystemTools::FileTimeSet(const char* fname, cmSystemToolsFileTime* t)
|
||||
{
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
cmSystemToolsWindowsHandle h =
|
||||
CreateFile(toFile, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
|
||||
if(!h)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!SetFileTime(h, &t->timeCreation, &t->timeLastAccess, &t->timeLastWrite))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
if(utime(fname, &t->timeBuf) < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static std::string cmSystemToolsExecutableDirectory;
|
||||
void cmSystemTools::FindExecutableDirectory(const char* argv0)
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include <cmsys/SystemTools.hxx>
|
||||
#include <cmsys/Process.h>
|
||||
|
||||
|
||||
class cmSystemToolsFileTime;
|
||||
|
||||
/** \class cmSystemTools
|
||||
* \brief A collection of useful functions for CMake.
|
||||
|
@ -363,6 +363,12 @@ public:
|
|||
the first argument to that named by the second. */
|
||||
static bool CopyFileTime(const char* fromFile, const char* toFile);
|
||||
|
||||
/** Save and restore file times. */
|
||||
static cmSystemToolsFileTime* FileTimeNew();
|
||||
static void FileTimeDelete(cmSystemToolsFileTime*);
|
||||
static bool FileTimeGet(const char* fname, cmSystemToolsFileTime* t);
|
||||
static bool FileTimeSet(const char* fname, cmSystemToolsFileTime* t);
|
||||
|
||||
/** Find the directory containing the running executable. Save it
|
||||
in a global location to be queried by GetExecutableDirectory
|
||||
later. */
|
||||
|
|
Loading…
Reference in New Issue