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);
|
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 UTIL_setFileStat(const char *filename, const stat_t *statbuf)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
@ -168,25 +191,7 @@ int UTIL_setFileStat(const char *filename, const stat_t *statbuf)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* set access and modification times */
|
/* set access and modification times */
|
||||||
/* We check that st_mtime is a macro here in order to give us confidence
|
res += UTIL_utime(filename, statbuf);
|
||||||
* 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
|
|
||||||
|
|
||||||
#if !defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
res += chown(filename, statbuf->st_uid, statbuf->st_gid); /* Copy ownership */
|
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);
|
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
|
* These helpers operate on a pre-populated stat_t, i.e., the result of
|
||||||
* calling one of the above functions.
|
* calling one of the above functions.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user