2 #include <sys/stat.h>
\r
6 \r\rDIR *
\ropendir(const char *directory_name)
\r
10 \r\rif (NULL == directory_name)
15 \r\rif (0 != stat(directory_name, &sb))
18 /* directory not found */
\r
22 \r\rif (0 == S_ISDIR(sb.st_mode))
25 /* it's not a directory */
\r
29 \r\r\rdir = (DIR *) calloc(1, sizeof(DIR));
35 \r\rif ('\\' != dir->directory_name[strlen(directory_name) - 1])
36 \rsprintf(dir->directory_name, "%s\\*", directory_name);
39 \rsprintf(dir->directory_name, "%s*", directory_name);
40 \r\rdir->file_handle = INVALID_HANDLE_VALUE;
44 \r\rint
\r closedir(DIR * dir)
\r
48 \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
49 \rFindClose(dir->file_handle);
57 \r\rstruct dirent *
\rreaddir(DIR * dir)
\r
59 \rWIN32_FIND_DATA wfd = {
67 \rdir->file_handle = FindFirstFile(dir->directory_name, &wfd);
68 \r\rif (!FindNextFile(dir->file_handle, &wfd))
71 \r\rstrcpy(dir->entry.d_name, wfd.cFileName);
72 \r\rreturn &(dir->entry);
75 \r\rvoid
\r rewinddir(DIR * dir)
\r
82 \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
84 \rFindClose(dir->file_handle);
85 \rdir->file_handle = INVALID_HANDLE_VALUE;
90 \r\roff_t
\r telldir(DIR * dir)
\r
100 \r\rvoid
\r seekdir(DIR * dir, off_t offset)
\r
102 \rWIN32_FIND_DATA wfd = {
109 \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
111 \rFindClose(dir->file_handle);
112 \rdir->file_handle = INVALID_HANDLE_VALUE;
115 \r\rdir->file_handle = FindFirstFile(dir->directory_name, &wfd);
116 \r\rdir->pos += offset;
119 \rif (!FindNextFile(dir->file_handle, &wfd))