From d6da5cb6a8e0e8a9ce92b7d951a254cf325248d7 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Thu, 5 Jul 2018 18:59:02 +0200 Subject: Add renameat2 function [BZ #17662] The implementation falls back to renameat if renameat2 is not available in the kernel (or in the kernel headers) and the flags argument is zero. Without kernel support, a non-zero argument returns EINVAL, not ENOSYS. This mirrors what the kernel does for invalid renameat2 flags. --- libio/stdio.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'libio/stdio.h') diff --git a/libio/stdio.h b/libio/stdio.h index 731f8e56f4..739e08610d 100644 --- a/libio/stdio.h +++ b/libio/stdio.h @@ -153,6 +153,18 @@ extern int renameat (int __oldfd, const char *__old, int __newfd, const char *__new) __THROW; #endif +#ifdef __USE_GNU +/* Flags for renameat2. */ +# define RENAME_NOREPLACE (1 << 0) +# define RENAME_EXCHANGE (1 << 1) +# define RENAME_WHITEOUT (1 << 2) + +/* Rename file OLD relative to OLDFD to NEW relative to NEWFD, with + additional flags. */ +extern int renameat2 (int __oldfd, const char *__old, int __newfd, + const char *__new, unsigned int __flags) __THROW; +#endif + /* Create a temporary file and open it read/write. This function is a possible cancellation point and therefore not -- cgit 1.4.1