From 2522322e5304e7d86c63e607e2bc83c8d8b0a889 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 5 Jul 2018 09:22:09 -0700 Subject: [PATCH] renameatu: rename from renameat2 It's looking like Glibc will add a renameat2 function that is incompatible with Gnulib renameat2; see: https://sourceware.org/ml/libc-alpha/2018-07/msg00064.html To help avoid future confusion, rename renameat2 to something else. Use the name 'renameatu', as the Gnulib function is close to the Glibc function. Perhaps someday there will also be a renameat2 Gnulib module, which mimicks the future glibc renameat2, but that can wait as nobody seems to need such a module now. * NEWS: Mention this. * lib/renameatu.c: Rename from lib/renameat2.c. * lib/renameatu.h: Rename from lib/renameat2.h. * modules/renameat2: Rename from modules/renameatu. * modules/renameat2-tests: Rename from modules/renameat2-tests. All uses of "renameat2" in identifiers or file name changed to "renameatu", except for two instances in lib/renameatu.c that deal with the Linux kernel's renameat2 syscall. --- ChangeLog | 21 +++++++++ MODULES.html.sh | 2 +- NEWS | 4 ++ lib/backupfile.c | 4 +- lib/renameat.c | 4 +- lib/{renameat2.c => renameatu.c} | 9 ++-- lib/{renameat2.h => renameatu.h} | 8 ++-- modules/backup-rename | 2 +- modules/backupfile | 2 +- modules/renameat | 2 +- modules/{renameat2 => renameatu} | 10 ++-- modules/{renameat2-tests => renameatu-tests} | 8 ++-- tests/{test-renameat2.c => test-renameatu.c} | 48 ++++++++++---------- 13 files changed, 75 insertions(+), 49 deletions(-) rename lib/{renameat2.c => renameatu.c} (94%) rename lib/{renameat2.h => renameatu.h} (84%) rename modules/{renameat2 => renameatu} (84%) rename modules/{renameat2-tests => renameatu-tests} (57%) rename tests/{test-renameat2.c => test-renameatu.c} (80%) diff --git a/ChangeLog b/ChangeLog index 02d210ed9a..c670b3962d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2018-07-05 Paul Eggert + + renameatu: rename from renameat2 + It's looking like Glibc will add a renameat2 function + that is incompatible with Gnulib renameat2; see: + https://sourceware.org/ml/libc-alpha/2018-07/msg00064.html + To help avoid future confusion, rename renameat2 to something else. + Use the name 'renameatu', as the Gnulib function is close to the + Glibc function. Perhaps someday there will also be a renameat2 + Gnulib module, which mimicks the future glibc renameat2, but that + can wait as nobody seems to need such a module now. + * NEWS: Mention this. + * lib/renameatu.c: Rename from lib/renameat2.c. + * lib/renameatu.h: Rename from lib/renameat2.h. + * modules/renameat2: Rename from modules/renameatu. + * modules/renameat2-tests: Rename from modules/renameat2-tests. + All uses of "renameat2" in identifiers or file name + changed to "renameatu", except for two instances in + lib/renameatu.c that deal with the Linux kernel's + renameat2 syscall. + 2018-07-04 Paul Eggert gnulib-tool: minor tweaks for --gnu-make diff --git a/MODULES.html.sh b/MODULES.html.sh index 2cb4cd30f8..a61a84e4d8 100755 --- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -2689,7 +2689,7 @@ func_all_modules () func_module qset-acl func_module read-file func_module readlinkat - func_module renameat2 + func_module renameatu func_module same func_module save-cwd func_module savedir diff --git a/NEWS b/NEWS index f4fc2e2ba4..156e49cdeb 100644 --- a/NEWS +++ b/NEWS @@ -42,6 +42,10 @@ User visible incompatible changes Date Modules Changes +2018-07-05 renameat2 This module is renamed to 'renameatu' and all + its include files and functions are renamed + accordingly. + 2017-12-30 chdir-safer This module is removed. It was deprecated on 2006-07-17. diff --git a/lib/backupfile.c b/lib/backupfile.c index d438455b88..637be6c242 100644 --- a/lib/backupfile.c +++ b/lib/backupfile.c @@ -23,7 +23,7 @@ #include "backup-internal.h" #include "dirname.h" -#include "renameat2.h" +#include "renameatu.h" #include "xalloc-oversized.h" #include @@ -353,7 +353,7 @@ backupfile_internal (char const *file, enum backup_type backup_type, bool rename base_offset = 0; } unsigned flags = backup_type == simple_backups ? 0 : RENAME_NOREPLACE; - if (renameat2 (AT_FDCWD, file, sdir, s + base_offset, flags) == 0) + if (renameatu (AT_FDCWD, file, sdir, s + base_offset, flags) == 0) break; int e = errno; if (e != EEXIST) diff --git a/lib/renameat.c b/lib/renameat.c index 0cb7d33998..67be22bc86 100644 --- a/lib/renameat.c +++ b/lib/renameat.c @@ -16,10 +16,10 @@ #include #include -#include "renameat2.h" +#include "renameatu.h" int renameat (int fd1, char const *src, int fd2, char const *dst) { - return renameat2 (fd1, src, fd2, dst, 0); + return renameatu (fd1, src, fd2, dst, 0); } diff --git a/lib/renameat2.c b/lib/renameatu.c similarity index 94% rename from lib/renameat2.c rename to lib/renameatu.c index a295ec33f3..b013ad697f 100644 --- a/lib/renameat2.c +++ b/lib/renameatu.c @@ -18,7 +18,7 @@ #include -#include "renameat2.h" +#include "renameatu.h" #include #include @@ -68,10 +68,13 @@ rename_noreplace (char const *src, char const *dst) the restore_cwd fails, then give a diagnostic and exit nonzero. Obey FLAGS when doing the renaming. If FLAGS is zero, this - function is equivalent to renameat (FD1, SRC, FD2, DST). */ + function is equivalent to renameat (FD1, SRC, FD2, DST). + Otherwise, attempt to implement FLAGS even if the implementation is + not atomic; this differs from the GNU/Linux native renameat2, + which fails if it cannot guarantee atomicity. */ int -renameat2 (int fd1, char const *src, int fd2, char const *dst, +renameatu (int fd1, char const *src, int fd2, char const *dst, unsigned int flags) { int ret_val = -1; diff --git a/lib/renameat2.h b/lib/renameatu.h similarity index 84% rename from lib/renameat2.h rename to lib/renameatu.h index aba79664f4..7d797757b6 100644 --- a/lib/renameat2.h +++ b/lib/renameatu.h @@ -16,15 +16,13 @@ /* written by Paul Eggert */ -/* Get RENAME_* macros from linux/fs.h if present, otherwise supply +/* Get RENAME_* macros from if present, otherwise supply the traditional Linux values. */ -#if HAVE_LINUX_FS_H -# include -#endif +#include #ifndef RENAME_NOREPLACE # define RENAME_NOREPLACE (1 << 0) # define RENAME_EXCHANGE (1 << 1) # define RENAME_WHITEOUT (1 << 2) #endif -extern int renameat2 (int, char const *, int, char const *, unsigned int); +extern int renameatu (int, char const *, int, char const *, unsigned int); diff --git a/modules/backup-rename b/modules/backup-rename index 4d8932d293..7e551af52a 100644 --- a/modules/backup-rename +++ b/modules/backup-rename @@ -18,7 +18,7 @@ dirname-lgpl fcntl memcmp opendir -renameat2 +renameatu readdir stdbool diff --git a/modules/backupfile b/modules/backupfile index 9e4efd76d3..e9933fbc0a 100644 --- a/modules/backupfile +++ b/modules/backupfile @@ -18,7 +18,7 @@ dirname-lgpl fcntl memcmp opendir -renameat2 +renameatu readdir stdbool diff --git a/modules/renameat b/modules/renameat index 9af0225052..48b32c3692 100644 --- a/modules/renameat +++ b/modules/renameat @@ -6,7 +6,7 @@ lib/renameat.c m4/renameat.m4 Depends-on: -renameat2 [test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1] +renameatu [test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1] configure.ac: gl_FUNC_RENAMEAT diff --git a/modules/renameat2 b/modules/renameatu similarity index 84% rename from modules/renameat2 rename to modules/renameatu index 54f72e1c84..1c3fd99846 100644 --- a/modules/renameat2 +++ b/modules/renameatu @@ -1,10 +1,10 @@ Description: -renameat2() function: rename a file, relative to two directories +renameatu() function: rename a file, relative to two dirs, with unsigned flag Files: lib/at-func2.c -lib/renameat2.c -lib/renameat2.h +lib/renameatu.c +lib/renameatu.h m4/renameat.m4 Depends-on: @@ -30,10 +30,10 @@ if test $HAVE_RENAMEAT = 0; then fi Makefile.am: -lib_SOURCES += renameat2.c +lib_SOURCES += renameatu.c Include: -"renameat2.h" +"renameatu.h" License: GPL diff --git a/modules/renameat2-tests b/modules/renameatu-tests similarity index 57% rename from modules/renameat2-tests rename to modules/renameatu-tests index accf3c4486..135755e433 100644 --- a/modules/renameat2-tests +++ b/modules/renameatu-tests @@ -1,6 +1,6 @@ Files: tests/test-rename.h -tests/test-renameat2.c +tests/test-renameatu.c tests/signature.h tests/macros.h @@ -15,6 +15,6 @@ closedir configure.ac: Makefile.am: -TESTS += test-renameat2 -check_PROGRAMS += test-renameat2 -test_renameat2_LDADD = $(LDADD) @LIBINTL@ +TESTS += test-renameatu +check_PROGRAMS += test-renameatu +test_renameatu_LDADD = $(LDADD) @LIBINTL@ diff --git a/tests/test-renameat2.c b/tests/test-renameatu.c similarity index 80% rename from tests/test-renameat2.c rename to tests/test-renameatu.c index 0104890534..988428b05e 100644 --- a/tests/test-renameat2.c +++ b/tests/test-renameatu.c @@ -1,4 +1,4 @@ -/* Test renameat2. +/* Test renameatu. Copyright (C) 2009-2018 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -18,12 +18,12 @@ #include -#include +#include #include #include "signature.h" -SIGNATURE_CHECK (renameat2, int, +SIGNATURE_CHECK (renameatu, int, (int, char const *, int, char const *, unsigned int)); #include @@ -39,18 +39,18 @@ SIGNATURE_CHECK (renameat2, int, #include "ignore-value.h" #include "macros.h" -#define BASE "test-renameat2.t" +#define BASE "test-renameatu.t" #include "test-rename.h" static int dfd1 = AT_FDCWD; static int dfd2 = AT_FDCWD; -/* Wrapper to test renameat2 like rename. */ +/* Wrapper to test renameatu like rename. */ static int do_rename (char const *name1, char const *name2) { - return renameat2 (dfd1, name1, dfd2, name2, 0); + return renameatu (dfd1, name1, dfd2, name2, 0); } int @@ -67,24 +67,24 @@ main (void) /* Test behaviour for invalid file descriptors. */ { errno = 0; - ASSERT (renameat2 (-1, "foo", AT_FDCWD, "bar", 0) == -1); + ASSERT (renameatu (-1, "foo", AT_FDCWD, "bar", 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; - ASSERT (renameat2 (99, "foo", AT_FDCWD, "bar", 0) == -1); + ASSERT (renameatu (99, "foo", AT_FDCWD, "bar", 0) == -1); ASSERT (errno == EBADF); } ASSERT (close (creat (BASE "oo", 0600)) == 0); { errno = 0; - ASSERT (renameat2 (AT_FDCWD, BASE "oo", -1, "bar", 0) == -1); + ASSERT (renameatu (AT_FDCWD, BASE "oo", -1, "bar", 0) == -1); ASSERT (errno == EBADF); } { errno = 0; - ASSERT (renameat2 (AT_FDCWD, BASE "oo", 99, "bar", 0) == -1); + ASSERT (renameatu (AT_FDCWD, BASE "oo", 99, "bar", 0) == -1); ASSERT (errno == EBADF); } ASSERT (unlink (BASE "oo") == 0); @@ -133,13 +133,13 @@ main (void) ASSERT (sprintf (strchr (file1, '\0') - 2, "%02d", i) == 2); ASSERT (sprintf (strchr (file2, '\0') - 2, "%02d", i + 1) == 2); - ASSERT (renameat2 (fd1, file1, fd2, file2, 0) == 0); + ASSERT (renameatu (fd1, file1, fd2, file2, 0) == 0); free (file1); free (file2); } dfd2 = open ("..", O_RDONLY); ASSERT (0 <= dfd2); - ASSERT (renameat2 (dfd, "../" BASE "16", dfd2, BASE "17", 0) == 0); + ASSERT (renameatu (dfd, "../" BASE "16", dfd2, BASE "17", 0) == 0); ASSERT (close (dfd2) == 0); /* Now we change back to the parent directory, and set dfd to "."; @@ -152,47 +152,47 @@ main (void) ASSERT (close (creat (BASE "sub2/file", 0600)) == 0); errno = 0; - ASSERT (renameat2 (dfd, BASE "sub1", dfd, BASE "sub2", 0) == -1); + ASSERT (renameatu (dfd, BASE "sub1", dfd, BASE "sub2", 0) == -1); ASSERT (errno == EEXIST || errno == ENOTEMPTY); ASSERT (unlink (BASE "sub2/file") == 0); errno = 0; - ASSERT (renameat2 (dfd, BASE "sub2", dfd, BASE "sub1/.", 0) == -1); + ASSERT (renameatu (dfd, BASE "sub2", dfd, BASE "sub1/.", 0) == -1); ASSERT (errno == EINVAL || errno == EISDIR || errno == EBUSY || errno == ENOTEMPTY || errno == EEXIST || errno == ENOENT /* WSL */); errno = 0; - ASSERT (renameat2 (dfd, BASE "sub2/.", dfd, BASE "sub1", 0) == -1); + ASSERT (renameatu (dfd, BASE "sub2/.", dfd, BASE "sub1", 0) == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST || errno == ENOENT /* WSL */); errno = 0; - ASSERT (renameat2 (dfd, BASE "17", dfd, BASE "sub1", 0) == -1); + ASSERT (renameatu (dfd, BASE "17", dfd, BASE "sub1", 0) == -1); ASSERT (errno == EISDIR); errno = 0; - ASSERT (renameat2 (dfd, BASE "nosuch", dfd, BASE "18", 0) == -1); + ASSERT (renameatu (dfd, BASE "nosuch", dfd, BASE "18", 0) == -1); ASSERT (errno == ENOENT); errno = 0; - ASSERT (renameat2 (dfd, "", dfd, BASE "17", 0) == -1); + ASSERT (renameatu (dfd, "", dfd, BASE "17", 0) == -1); ASSERT (errno == ENOENT); errno = 0; - ASSERT (renameat2 (dfd, BASE "17", dfd, "", 0) == -1); + ASSERT (renameatu (dfd, BASE "17", dfd, "", 0) == -1); ASSERT (errno == ENOENT); errno = 0; - ASSERT (renameat2 (dfd, BASE "sub2", dfd, BASE "17", 0) == -1); + ASSERT (renameatu (dfd, BASE "sub2", dfd, BASE "17", 0) == -1); ASSERT (errno == ENOTDIR); errno = 0; - ASSERT (renameat2 (dfd, BASE "17/", dfd, BASE "18", 0) == -1); + ASSERT (renameatu (dfd, BASE "17/", dfd, BASE "18", 0) == -1); ASSERT (errno == ENOTDIR); errno = 0; - ASSERT (renameat2 (dfd, BASE "17", dfd, BASE "18/", 0) == -1); + ASSERT (renameatu (dfd, BASE "17", dfd, BASE "18/", 0) == -1); ASSERT (errno == ENOTDIR || errno == ENOENT); /* Finally, make sure we cannot overwrite existing files. */ ASSERT (close (creat (BASE "sub2/file", 0600)) == 0); errno = 0; - ASSERT ((renameat2 (dfd, BASE "sub2", dfd, BASE "sub1", RENAME_NOREPLACE) + ASSERT ((renameatu (dfd, BASE "sub2", dfd, BASE "sub1", RENAME_NOREPLACE) == -1) && errno == EEXIST); - ASSERT ((renameat2 (dfd, BASE "sub2/file", dfd, BASE "17", RENAME_NOREPLACE) + ASSERT ((renameatu (dfd, BASE "sub2/file", dfd, BASE "17", RENAME_NOREPLACE) == -1) && errno == EEXIST); -- 2.39.5