X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fdirent.c;fp=util%2Fdirent.c;h=047c93083174d3052412f0d57c202ebc3b029375;hb=5f8ba9f35bd3c9aeafe26613021f2edd141b8611;hp=0000000000000000000000000000000000000000;hpb=c9c9b6ebd2eb395472c741944831ee0796d574dd;p=idzebra-moved-to-github.git diff --git a/util/dirent.c b/util/dirent.c new file mode 100644 index 0000000..047c930 --- /dev/null +++ b/util/dirent.c @@ -0,0 +1,50 @@ + +#ifdef WINDOWS +#include +#include +#include +#include + +#include + +struct DIR { + HANDLE handle; + WIN32_FIND_DATA find_data; + struct dirent entry; +}; + +DIR *opendir (const char *name) +{ + char fullName[MAX_PATH+1]; + DIR *dd = malloc (sizeof(*dd)); + + if (!dd) + return NULL; + strcpy (fullName, name); + strcat (fullName, "\\*.*"); + dd->handle = FindFirstFile(fullName, &dd->find_data); + return dd; +} + +struct dirent *readdir (DIR *dd) +{ + if (dd->handle == INVALID_HANDLE_VALUE) + return NULL; + strcpy (dd->entry.d_name, dd->find_data.cFileName); + if (!FindNextFile(dd->handle, &dd->find_data)) + { + FindClose (dd->handle); + dd->handle = INVALID_HANDLE_VALUE; + } + return &dd->entry; +} + +void closedir(DIR *dd) +{ + if (dd->handle != INVALID_HANDLE_VALUE) + FindClose (dd->handle); + if (dd) + free (dd); +} + +#endif