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"
|
# include "cmELF.h"
|
||||||
#endif
|
#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__)
|
#if defined(__sgi) && !defined(__GNUC__)
|
||||||
# pragma set woff 1375 /* base class destructor not virtual */
|
# pragma set woff 1375 /* base class destructor not virtual */
|
||||||
#endif
|
#endif
|
||||||
|
@ -2110,6 +2122,67 @@ bool cmSystemTools::CopyFileTime(const char* fromFile, const char* toFile)
|
||||||
return true;
|
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;
|
static std::string cmSystemToolsExecutableDirectory;
|
||||||
void cmSystemTools::FindExecutableDirectory(const char* argv0)
|
void cmSystemTools::FindExecutableDirectory(const char* argv0)
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include <cmsys/SystemTools.hxx>
|
#include <cmsys/SystemTools.hxx>
|
||||||
#include <cmsys/Process.h>
|
#include <cmsys/Process.h>
|
||||||
|
|
||||||
|
class cmSystemToolsFileTime;
|
||||||
|
|
||||||
/** \class cmSystemTools
|
/** \class cmSystemTools
|
||||||
* \brief A collection of useful functions for CMake.
|
* \brief A collection of useful functions for CMake.
|
||||||
|
@ -363,6 +363,12 @@ public:
|
||||||
the first argument to that named by the second. */
|
the first argument to that named by the second. */
|
||||||
static bool CopyFileTime(const char* fromFile, const char* toFile);
|
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
|
/** Find the directory containing the running executable. Save it
|
||||||
in a global location to be queried by GetExecutableDirectory
|
in a global location to be queried by GetExecutableDirectory
|
||||||
later. */
|
later. */
|
||||||
|
|
Loading…
Reference in New Issue