summaryrefslogtreecommitdiff
path: root/tests/test-fchdir.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-fchdir.c')
-rw-r--r--tests/test-fchdir.c117
1 files changed, 0 insertions, 117 deletions
diff --git a/tests/test-fchdir.c b/tests/test-fchdir.c
deleted file mode 100644
index 0eba209c..00000000
--- a/tests/test-fchdir.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Test changing to a directory named by a file descriptor.
- Copyright (C) 2009-2024 Free Software Foundation, Inc.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>. */
-
-/* Written by Eric Blake <ebb9@byu.net>, 2009. */
-
-#include <config.h>
-
-#include <unistd.h>
-
-#include "signature.h"
-SIGNATURE_CHECK (fchdir, int, (int));
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "cloexec.h"
-#include "macros.h"
-
-int
-main (void)
-{
- char *cwd;
- int fd;
- int i;
-
- cwd = getcwd (NULL, 0);
- ASSERT (cwd);
-
- fd = open (".", O_RDONLY);
- ASSERT (0 <= fd);
-
- /* Test behaviour for invalid file descriptors. */
- {
- errno = 0;
- ASSERT (fchdir (-1) == -1);
- ASSERT (errno == EBADF);
- }
- {
- close (99);
- errno = 0;
- ASSERT (fchdir (99) == -1);
- ASSERT (errno == EBADF);
- }
-#ifdef FD_ATCWD
- {
- errno = 0;
- ASSERT (fchdir (FD_ATCWD) == -1);
- ASSERT (errno == EBADF);
- }
-#endif
-
- /* Check for other failure cases. */
- {
- int bad_fd = open ("/dev/null", O_RDONLY);
- ASSERT (0 <= bad_fd);
- errno = 0;
- ASSERT (fchdir (bad_fd) == -1);
- ASSERT (errno == ENOTDIR);
- ASSERT (close (bad_fd) == 0);
- }
-
- /* Repeat test twice, once in '.' and once in '..'. */
- for (i = 0; i < 2; i++)
- {
- ASSERT (chdir (&".."[1 - i]) == 0);
- ASSERT (fchdir (fd) == 0);
- {
- size_t len = strlen (cwd) + 1;
- char *new_dir = malloc (len);
- ASSERT (new_dir);
- ASSERT (getcwd (new_dir, len) == new_dir);
- ASSERT (strcmp (cwd, new_dir) == 0);
- free (new_dir);
- }
-
- /* For second iteration, use a cloned fd, to ensure that dup
- remembers whether an fd was associated with a directory. */
- if (!i)
- {
- int new_fd = dup (fd);
- ASSERT (0 <= new_fd);
- ASSERT (close (fd) == 0);
- ASSERT (dup2 (new_fd, fd) == fd);
- ASSERT (close (new_fd) == 0);
- ASSERT (dup_cloexec (fd) == new_fd);
- ASSERT (dup2 (new_fd, fd) == fd);
- ASSERT (close (new_fd) == 0);
- ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, new_fd) == new_fd);
- ASSERT (close (fd) == 0);
- ASSERT (fcntl (new_fd, F_DUPFD, fd) == fd);
- ASSERT (close (new_fd) == 0);
-#if GNULIB_TEST_DUP3
- ASSERT (dup3 (fd, new_fd, 0) == new_fd);
- ASSERT (dup3 (new_fd, fd, 0) == fd);
- ASSERT (close (new_fd) == 0);
-#endif
- }
- }
-
- free (cwd);
- return test_exit_status;
-}