From 8a854ba309a591254935559e72c44dca98c9a05e Mon Sep 17 00:00:00 2001 From: Ariel Don Date: Tue, 3 May 2022 14:52:08 -0500 Subject: Kernel+LibC: Implement futimens(3) Implement futimes() in terms of utimensat(). Now, utimensat() strays from POSIX compliance because it also accepts a combination of a file descriptor of a regular file and an empty path. utimensat() then uses this file descriptor instead of the path to update the last access and/or modification time of a file. That being said, its prior behavior remains intact. With the new behavior of utimensat(), `path` must point to a valid string; given a null pointer instead of an empty string, utimensat() sets `errno` to `EFAULT` and returns a failure. --- Userland/Libraries/LibC/stat.cpp | 6 ++++++ Userland/Libraries/LibC/sys/stat.h | 1 + 2 files changed, 7 insertions(+) (limited to 'Userland/Libraries') diff --git a/Userland/Libraries/LibC/stat.cpp b/Userland/Libraries/LibC/stat.cpp index bcb52fd898..d1ce13ea90 100644 --- a/Userland/Libraries/LibC/stat.cpp +++ b/Userland/Libraries/LibC/stat.cpp @@ -109,4 +109,10 @@ int fstatat(int fd, char const* path, struct stat* statbuf, int flags) { return do_stat(fd, path, statbuf, !(flags & AT_SYMLINK_NOFOLLOW)); } + +// https://pubs.opengroup.org/onlinepubs/9699919799/functions/futimens.html +int futimens(int fd, struct timespec const times[2]) +{ + return utimensat(fd, "", times, 0); +} } diff --git a/Userland/Libraries/LibC/sys/stat.h b/Userland/Libraries/LibC/sys/stat.h index 4ada805708..16b8a2c2e8 100644 --- a/Userland/Libraries/LibC/sys/stat.h +++ b/Userland/Libraries/LibC/sys/stat.h @@ -23,5 +23,6 @@ int fstat(int fd, struct stat* statbuf); int lstat(char const* path, struct stat* statbuf); int stat(char const* path, struct stat* statbuf); int fstatat(int fd, char const* path, struct stat* statbuf, int flags); +int futimens(int fd, struct timespec const times[2]); __END_DECLS -- cgit v1.2.3