Pull utime()
Call into Helper
This commit is contained in:
parent
ead41bcb4e
commit
a719edbbc3
@ -159,6 +159,29 @@ int UTIL_chmod(char const* filename, const stat_t* statbuf, mode_t permissions)
|
||||
return chmod(filename, permissions);
|
||||
}
|
||||
|
||||
/* set access and modification times */
|
||||
int UTIL_utime(const char* filename, const stat_t *statbuf)
|
||||
{
|
||||
int ret;
|
||||
/* We check that st_mtime is a macro here in order to give us confidence
|
||||
* that struct stat has a struct timespec st_mtim member. We need this
|
||||
* check because there are some platforms that claim to be POSIX 2008
|
||||
* compliant but which do not have st_mtim... */
|
||||
#if (PLATFORM_POSIX_VERSION >= 200809L) && defined(st_mtime)
|
||||
/* (atime, mtime) */
|
||||
struct timespec timebuf[2] = { {0, UTIME_NOW} };
|
||||
timebuf[1] = statbuf->st_mtim;
|
||||
ret = utimensat(AT_FDCWD, filename, timebuf, 0);
|
||||
#else
|
||||
struct utimbuf timebuf;
|
||||
timebuf.actime = time(NULL);
|
||||
timebuf.modtime = statbuf->st_mtime;
|
||||
ret = utime(filename, &timebuf);
|
||||
#endif
|
||||
errno = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int UTIL_setFileStat(const char *filename, const stat_t *statbuf)
|
||||
{
|
||||
int res = 0;
|
||||
@ -168,25 +191,7 @@ int UTIL_setFileStat(const char *filename, const stat_t *statbuf)
|
||||
return -1;
|
||||
|
||||
/* set access and modification times */
|
||||
/* We check that st_mtime is a macro here in order to give us confidence
|
||||
* that struct stat has a struct timespec st_mtim member. We need this
|
||||
* check because there are some platforms that claim to be POSIX 2008
|
||||
* compliant but which do not have st_mtim... */
|
||||
#if (PLATFORM_POSIX_VERSION >= 200809L) && defined(st_mtime)
|
||||
{
|
||||
/* (atime, mtime) */
|
||||
struct timespec timebuf[2] = { {0, UTIME_NOW} };
|
||||
timebuf[1] = statbuf->st_mtim;
|
||||
res += utimensat(AT_FDCWD, filename, timebuf, 0);
|
||||
}
|
||||
#else
|
||||
{
|
||||
struct utimbuf timebuf;
|
||||
timebuf.actime = time(NULL);
|
||||
timebuf.modtime = statbuf->st_mtime;
|
||||
res += utime(filename, &timebuf);
|
||||
}
|
||||
#endif
|
||||
res += UTIL_utime(filename, statbuf);
|
||||
|
||||
#if !defined(_WIN32)
|
||||
res += chown(filename, statbuf->st_uid, statbuf->st_gid); /* Copy ownership */
|
||||
|
@ -136,6 +136,14 @@ int UTIL_stat(const char* filename, stat_t* statbuf);
|
||||
*/
|
||||
int UTIL_setFileStat(const char* filename, const stat_t* statbuf);
|
||||
|
||||
/**
|
||||
* Set atime to now and mtime to the st_mtim in statbuf.
|
||||
*
|
||||
* Directly wraps utime() or utimensat(). Returns -1 on error.
|
||||
* Does not validate filename is valid.
|
||||
*/
|
||||
int UTIL_utime(const char* filename, const stat_t *statbuf);
|
||||
|
||||
/*
|
||||
* These helpers operate on a pre-populated stat_t, i.e., the result of
|
||||
* calling one of the above functions.
|
||||
|
Loading…
x
Reference in New Issue
Block a user