merge from open-source master

Change-Id: I58175b59d0121deaac90375be1dc720889eaf339
This commit is contained in:
The Android Open Source Project 2010-07-09 16:02:46 -07:00
commit 07dfca2ee9
1 changed files with 18 additions and 0 deletions

View File

@ -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)));