merge from open-source master
Change-Id: I58175b59d0121deaac90375be1dc720889eaf339
This commit is contained in:
commit
07dfca2ee9
|
@ -62,6 +62,22 @@ static bool isSourceNewer(const struct stat* pSrcStat, const struct stat* pDstSt
|
|||
(pSrcStat->st_size != pDstStat->st_size);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if the source file has high resolution modification
|
||||
* date. Cygwin doesn't support st_mtim in normal build, so always
|
||||
* return false.
|
||||
*/
|
||||
static bool isHiresMtime(const struct stat* pSrcStat)
|
||||
{
|
||||
#if defined(WIN32_EXE) || defined(USE_MINGW)
|
||||
return 0;
|
||||
#elif defined(MACOSX_RSRC)
|
||||
return pSrcStat->st_mtimespec.tv_nsec > 0;
|
||||
#else
|
||||
return pSrcStat->st_mtim.tv_nsec > 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if the source and destination files are actually the
|
||||
* same thing. We detect this by checking the inode numbers, which seems
|
||||
|
@ -151,6 +167,8 @@ static int setPermissions(const char* dst, const struct stat* pSrcStat, unsigned
|
|||
*/
|
||||
ut.actime = pSrcStat->st_atime;
|
||||
ut.modtime = pSrcStat->st_mtime;
|
||||
if (isHiresMtime(pSrcStat))
|
||||
ut.modtime += 1;
|
||||
if (utime(dst, &ut) != 0) {
|
||||
DBUG(("--- unable to set timestamps on '%s': %s\n",
|
||||
dst, strerror(errno)));
|
||||
|
|
Loading…
Reference in New Issue