summaryrefslogtreecommitdiff
path: root/tests/opendir.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/opendir.c')
-rw-r--r--tests/opendir.c186
1 files changed, 0 insertions, 186 deletions
diff --git a/tests/opendir.c b/tests/opendir.c
deleted file mode 100644
index df768076..00000000
--- a/tests/opendir.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Start reading the entries of a directory.
- Copyright (C) 2006-2024 Free Software Foundation, Inc.
-
- This file 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.
-
- This file 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 this program. If not, see <https://www.gnu.org/licenses/>. */
-
-#include <config.h>
-
-/* Specification. */
-#include <dirent.h>
-
-#include <errno.h>
-#include <stddef.h>
-
-#if HAVE_OPENDIR
-
-/* Override opendir(), to keep track of the open file descriptors.
- Needed because there is a function dirfd(). */
-
-#else
-
-# include "filename.h"
-
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#if GNULIB_defined_DIR
-# include "dirent-private.h"
-#endif
-
-#if REPLACE_FCHDIR
-# include <unistd.h>
-#endif
-
-#if defined _WIN32 && ! defined __CYGWIN__
-/* Don't assume that UNICODE is not defined. */
-# undef WIN32_FIND_DATA
-# define WIN32_FIND_DATA WIN32_FIND_DATAA
-# undef GetFullPathName
-# define GetFullPathName GetFullPathNameA
-# undef FindFirstFile
-# define FindFirstFile FindFirstFileA
-#endif
-
-DIR *
-opendir (const char *dir_name)
-#undef opendir
-{
-#if HAVE_DIRENT_H /* equivalent to HAVE_OPENDIR */
- DIR *dirp;
-
-# if GNULIB_defined_DIR
-# undef DIR
-
- dirp = (struct gl_directory *) malloc (sizeof (struct gl_directory));
- if (dirp == NULL)
- {
- errno = ENOMEM;
- return NULL;
- }
-
- DIR *real_dirp = opendir (dir_name);
- if (real_dirp == NULL)
- {
- int saved_errno = errno;
- free (dirp);
- errno = saved_errno;
- return NULL;
- }
-
- dirp->fd_to_close = -1;
- dirp->real_dirp = real_dirp;
-# else
- dirp = opendir (dir_name);
- if (dirp == NULL)
- return NULL;
-# endif
-
-#else
-
- char dir_name_mask[MAX_PATH + 1 + 1 + 1];
- int status;
- HANDLE current;
- WIN32_FIND_DATA entry;
- struct gl_directory *dirp;
-
- if (dir_name[0] == '\0')
- {
- errno = ENOENT;
- return NULL;
- }
-
- /* Make the dir_name absolute, so that we continue reading the same
- directory if the current directory changed between this opendir()
- call and a subsequent rewinddir() call. */
- if (!GetFullPathName (dir_name, MAX_PATH, dir_name_mask, NULL))
- {
- errno = EINVAL;
- return NULL;
- }
-
- /* Append the mask.
- "*" and "*.*" appear to be equivalent. */
- {
- char *p;
-
- p = dir_name_mask + strlen (dir_name_mask);
- if (p > dir_name_mask && !ISSLASH (p[-1]))
- *p++ = '\\';
- *p++ = '*';
- *p = '\0';
- }
-
- /* Start searching the directory. */
- status = -1;
- current = FindFirstFile (dir_name_mask, &entry);
- if (current == INVALID_HANDLE_VALUE)
- {
- switch (GetLastError ())
- {
- case ERROR_FILE_NOT_FOUND:
- status = -2;
- break;
- case ERROR_PATH_NOT_FOUND:
- errno = ENOENT;
- return NULL;
- case ERROR_DIRECTORY:
- errno = ENOTDIR;
- return NULL;
- case ERROR_ACCESS_DENIED:
- errno = EACCES;
- return NULL;
- default:
- errno = EIO;
- return NULL;
- }
- }
-
- /* Allocate the result. */
- dirp =
- (struct gl_directory *)
- malloc (offsetof (struct gl_directory, dir_name_mask[0])
- + strlen (dir_name_mask) + 1);
- if (dirp == NULL)
- {
- if (current != INVALID_HANDLE_VALUE)
- FindClose (current);
- errno = ENOMEM;
- return NULL;
- }
- dirp->fd_to_close = -1;
- dirp->status = status;
- dirp->current = current;
- if (status == -1)
- memcpy (&dirp->entry, &entry, sizeof (WIN32_FIND_DATA));
- strcpy (dirp->dir_name_mask, dir_name_mask);
-
-#endif
-
-#if REPLACE_FCHDIR
- {
- int fd = dirfd (dirp);
- if (0 <= fd && _gl_register_fd (fd, dir_name) != fd)
- {
- int saved_errno = errno;
- closedir (dirp);
- errno = saved_errno;
- return NULL;
- }
- }
-#endif
-
- return dirp;
-}