From e9d5a3cbbb47eb0f785a409d836225b592b250f3 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Tue, 30 Jul 2019 22:13:51 -0700 Subject: [PATCH] util.h: Remove deprecated utime for non-Windows utime was deprecated in POSIX 2008. --- programs/platform.h | 2 +- programs/util.h | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/programs/platform.h b/programs/platform.h index c0b38402..7e2cb58f 100644 --- a/programs/platform.h +++ b/programs/platform.h @@ -86,7 +86,7 @@ extern "C" { # else # if defined(__linux__) || defined(__linux) # ifndef _POSIX_C_SOURCE -# define _POSIX_C_SOURCE 200112L /* use feature test macro */ +# define _POSIX_C_SOURCE 200809L /* use feature test macro */ # endif # endif # include /* declares _POSIX_VERSION */ diff --git a/programs/util.h b/programs/util.h index 1dd515ce..112dddbf 100644 --- a/programs/util.h +++ b/programs/util.h @@ -37,12 +37,17 @@ extern "C" { #include #include /* stat, utime */ #include /* stat */ -#if defined(_MSC_VER) +#if defined(_WIN32) # include /* utime */ # include /* _chmod */ #else # include /* chown, stat */ +#if PLATFORM_POSIX_VERSION < 200809L # include /* utime */ +#else +# include /* AT_FDCWD */ +# include /* for utimensat */ +#endif #endif #include /* time */ #include /* INT_MAX */ @@ -287,14 +292,24 @@ UTIL_STATIC int UTIL_isRegFile(const char* infilename); UTIL_STATIC int UTIL_setFileStat(const char *filename, stat_t *statbuf) { int res = 0; +#if defined(_WIN32) || (PLATFORM_POSIX_VERSION < 200809L) struct utimbuf timebuf; +#else + struct timespec timebuf[2] = {}; +#endif if (!UTIL_isRegFile(filename)) return -1; +#if defined(_WIN32) || (PLATFORM_POSIX_VERSION < 200809L) timebuf.actime = time(NULL); timebuf.modtime = statbuf->st_mtime; res += utime(filename, &timebuf); /* set access and modification times */ +#else + timebuf[0].tv_nsec = UTIME_NOW; + timebuf[1].tv_sec = statbuf->st_mtime; + res += utimensat(AT_FDCWD, filename, timebuf, 0); /* set access and modification times */ +#endif #if !defined(_WIN32) res += chown(filename, statbuf->st_uid, statbuf->st_gid); /* Copy ownership */