From c89cdc68067ae7b05b5621377de7c587dda5c290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=BCller?= Date: Mon, 23 Aug 2021 13:28:50 +0200 Subject: [PATCH] add fs_file_time --- src/base/system.cpp | 28 ++++++++++++++++++++++++++++ src/base/system.h | 17 +++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/base/system.cpp b/src/base/system.cpp index 55c6b4e9f..15ab7012c 100644 --- a/src/base/system.cpp +++ b/src/base/system.cpp @@ -2347,6 +2347,34 @@ int fs_rename(const char *oldname, const char *newname) return 0; } +int fs_file_time(const char *name, time_t *created, time_t *modified) +{ +#if defined(CONF_FAMILY_WINDOWS) + WIN32_FIND_DATAW finddata; + HANDLE handle; + WCHAR wBuffer[IO_MAX_PATH_LENGTH]; + + MultiByteToWideChar(CP_UTF8, 0, name, IO_MAX_PATH_LENGTH, wBuffer, IO_MAX_PATH_LENGTH); + handle = FindFirstFileW(wBuffer, &finddata); + if(handle == INVALID_HANDLE_VALUE) + return 1; + + *created = filetime_to_unixtime(&finddata.ftCreationTime); + *modified = filetime_to_unixtime(&finddata.ftLastWriteTime); +#elif defined(CONF_FAMILY_UNIX) + struct stat sb; + if(stat(name, &sb)) + return 1; + + *created = sb.st_ctime; + *modified = sb.st_mtime; +#else + #error not implemented +#endif + + return 0; +} + void swap_endian(void *data, unsigned elem_size, unsigned num) { char *src = (char *)data; diff --git a/src/base/system.h b/src/base/system.h index a4170c476..6b9242944 100644 --- a/src/base/system.h +++ b/src/base/system.h @@ -1760,6 +1760,23 @@ int fs_remove(const char *filename); */ int fs_rename(const char *oldname, const char *newname); +/* + Function: fs_file_time + Gets the creation and the last modification date of a file. + + Parameters: + name - The filename. + created - Pointer to time_t + modified - Pointer to time_t + + Returns: + 0 on success non-zero on failure + + Remarks: + - Returned time is in seconds since UNIX Epoch +*/ +int fs_file_time(const char *name, time_t *created, time_t *modified); + /* Group: Undocumented */