123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #include <config.h>
- /* glib provides a replacement for MSVC */
- #ifndef _MSC_VER
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <errno.h>
- #include "../src/global.h"
- DIR *opendir (const char * a_dir)
- {
- int err;
- WIN32_FIND_DATA wfd;
- DIR* dd_dir = (DIR*) malloc (sizeof(DIR));
- char *c_dir = malloc (strlen(a_dir) + 4);
- strcpy (c_dir, a_dir);
- strcat (c_dir, "\\*");
-
- dd_dir->d_handle = FindFirstFile (c_dir, &wfd);
- if (dd_dir->d_handle == INVALID_HANDLE_VALUE) {
- err = GetLastError();
- switch (err) {
- case ERROR_NO_MORE_FILES:
- case ERROR_FILE_NOT_FOUND:
- case ERROR_PATH_NOT_FOUND:
- errno = ENOENT;
- break;
- case ERROR_NOT_ENOUGH_MEMORY:
- errno = ENOMEM;
- break;
- default:
- errno = EINVAL;
- break;
- }
- free(dd_dir);
- return NULL;
- }
- dd_dir->d_attr = (wfd.dwFileAttributes == FILE_ATTRIBUTE_NORMAL)
- ? 0 : wfd.dwFileAttributes;
- dd_dir->d_time = dd_dir->d_date = 10;
- dd_dir->d_size = wfd.nFileSizeLow;
- strcpy (dd_dir->d_name, wfd.cFileName);
- dd_dir->d_first = 1;
-
- free (c_dir);
- return dd_dir;
- }
- DIR *readdir( DIR * dd_dir)
- {
- int err;
- WIN32_FIND_DATA wfd;
-
- if (dd_dir->d_first) {
- dd_dir->d_first = 0;
- return dd_dir;
- }
-
- if(!FindNextFile (dd_dir->d_handle, &wfd)) {
- err = GetLastError();
- switch (err) {
- case ERROR_NO_MORE_FILES:
- case ERROR_FILE_NOT_FOUND:
- case ERROR_PATH_NOT_FOUND:
- errno = ENOENT;
- break;
- case ERROR_NOT_ENOUGH_MEMORY:
- errno = ENOMEM;
- break;
- default:
- errno = EINVAL;
- break;
- }
- return NULL;
- }
- dd_dir->d_attr = (wfd.dwFileAttributes == FILE_ATTRIBUTE_NORMAL)
- ? 0 : wfd.dwFileAttributes;
- dd_dir->d_time = dd_dir->d_date = 10;
- dd_dir->d_size = wfd.nFileSizeLow;
- strcpy (dd_dir->d_name, wfd.cFileName);
- return dd_dir;
- }
- int closedir (DIR *dd_dir)
- {
- FindClose(dd_dir->d_handle);
- free (dd_dir);
- return 1;
- }
- #endif /* _MSC_VER */
|