]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Consolidate renameat Linux implementation
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 13 Dec 2016 18:50:06 +0000 (16:50 -0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 14 Dec 2016 17:31:24 +0000 (15:31 -0200)
This patch consolidates the Linux renameat implementation on
sysdeps/unix/sysv/linux/renameat.c.  The renameat syscall was
deprecated at b0da6d44 for newer architectures, so using the
auto-generation list may generate wrappers that returns ENOSYS.

Current code try to use __NR_renameat and if it is not define
it uses __NR_renameat2.

Checked on x86_64 and aarch64.

* sysdeps/unix/sysv/linux/renameat.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list: Remove renameat.

ChangeLog
sysdeps/unix/sysv/linux/renameat.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/syscalls.list

index a9e69a33645edd270aa6e203e8aa240325bb9a61..f40e09fcb1b60a97b93ebe101372da308e3d5a74 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2016-12-14  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+       * sysdeps/unix/sysv/linux/renameat.c: New file.
+       * sysdeps/unix/sysv/linux/syscalls.list: Remove renameat.
+
        * sysdeps/unix/sysv/linux/rename.c: New file.
        * sysdeps/unix/sysv/linux/generic/rename.c: Remove file.
 
diff --git a/sysdeps/unix/sysv/linux/renameat.c b/sysdeps/unix/sysv/linux/renameat.c
new file mode 100644 (file)
index 0000000..ac52947
--- /dev/null
@@ -0,0 +1,32 @@
+/* Linux implementation for renameat function.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sysdep.h>
+#include <errno.h>
+
+int
+renameat (int oldfd, const char *old, int newfd, const char *new)
+{
+#ifdef __NR_renameat
+  return INLINE_SYSCALL_CALL (renameat, oldfd, old, newfd, new);
+#else
+  return INLINE_SYSCALL_CALL (renameat2, oldfd, old, newfd, new, 0);
+#endif
+}
index 98b3bb94c2d4789c1b96936d315d4f29df334f10..5d3c417d512343a6114df22efa3e10611e771a57 100644 (file)
@@ -89,7 +89,6 @@ fchownat      -       fchownat        i:isiii fchownat
 linkat         -       linkat          i:isisi linkat
 mkdirat                -       mkdirat         i:isi   mkdirat
 readlinkat     -       readlinkat      i:issi  readlinkat
-renameat       -       renameat        i:isis  renameat
 symlinkat      -       symlinkat       i:sis   symlinkat
 unlinkat       -       unlinkat        i:isi   unlinkat