+++ /dev/null
-\r
-#include <sys/stat.h>\r
-#include <stdio.h>\r
-#include <dirent.h>\r
-#include <errno.h>\r
- \r\rDIR * \ropendir(const char *directory_name) \r
-{
- \rstruct stat sb;
- \rDIR * dir;
- \r\rif (NULL == directory_name)
- \r {
- \rerrno = EINVAL;
- \rreturn NULL;
- \r}
- \r\rif (0 != stat(directory_name, &sb))
- \r {
- \r
- /* directory not found */ \r
- errno = ENOENT;
- \rreturn NULL;
- \r}
- \r\rif (0 == S_ISDIR(sb.st_mode))
- \r {
- \r
- /* it's not a directory */ \r
- errno = ENOTDIR;
- \rreturn NULL;
- \r}
- \r\r\rdir = (DIR *) calloc(1, sizeof(DIR));
- \r\rif (NULL == dir)
- \r {
- \rerrno = ENOMEM;
- \rreturn NULL;
- \r}
- \r\rif ('\\' != dir->directory_name[strlen(directory_name) - 1])
- \rsprintf(dir->directory_name, "%s\\*", directory_name);
- \r
- else
- \rsprintf(dir->directory_name, "%s*", directory_name);
- \r\rdir->file_handle = INVALID_HANDLE_VALUE;
- \r\rreturn dir;
-\r}
-
-\r\rint \r closedir(DIR * dir) \r
-{
- \rif (NULL == dir)
- \rreturn EINVAL;
- \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
- \rFindClose(dir->file_handle);
- \r
- else
- \rreturn EBADF;
- \r\rfree(dir);
- \r\rreturn 0;
-\r\r}
-
-\r\rstruct dirent *\rreaddir(DIR * dir) \r
-{
- \rWIN32_FIND_DATA wfd = {
- 0};
- \r\rif (!dir)
- \r {
- \rerrno = EINVAL;
- \rreturn NULL;
- \r}
- \r\rif (!dir->pos)
- \rdir->file_handle = FindFirstFile(dir->directory_name, &wfd);
- \r\rif (!FindNextFile(dir->file_handle, &wfd))
- \rreturn NULL;
- \r\rdir->pos++;
- \r\rstrcpy(dir->entry.d_name, wfd.cFileName);
- \r\rreturn &(dir->entry);
-\r}
-
-\r\rvoid \r rewinddir(DIR * dir) \r
-{
- \rif (NULL == dir)
- \r {
- \rerrno = EINVAL;
- \rreturn;
- \r}
- \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
- \r {
- \rFindClose(dir->file_handle);
- \rdir->file_handle = INVALID_HANDLE_VALUE;
- \rdir->pos = 0;
- \r}
-\r}
-
-\r\roff_t \r telldir(DIR * dir) \r
-{
- \rif (NULL == dir)
- \r {
- \rerrno = EINVAL;
- \rreturn -1;
- \r}
- \r\rreturn dir->pos;
-\r}
-
-\r\rvoid \r seekdir(DIR * dir, off_t offset) \r
-{
- \rWIN32_FIND_DATA wfd = {
- 0};
- \r\rif (NULL == dir)
- \r {
- \rerrno = EINVAL;
- \rreturn;
- \r}
- \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
- \r {
- \rFindClose(dir->file_handle);
- \rdir->file_handle = INVALID_HANDLE_VALUE;
- \rdir->pos = 0;
- \r}
- \r\rdir->file_handle = FindFirstFile(dir->directory_name, &wfd);
- \r\rdir->pos += offset;
- \r\rwhile (--offset)
- \r {
- \rif (!FindNextFile(dir->file_handle, &wfd))
- \rerrno = EINVAL;
- \r}
-\r}
-
-\r