X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fdirent.c;fp=src%2Fdirent.c;h=7ea1df4475e8ba3f6cca88b8daec3338d0f32b1b;hp=0000000000000000000000000000000000000000;hb=76d513fc3b7e7e267875fd965023dda71a635e1d;hpb=de82e7fd43191fc2ae0d8eab9781c59c595c343a diff --git a/src/dirent.c b/src/dirent.c new file mode 100644 index 0000000..7ea1df4 --- /dev/null +++ b/src/dirent.c @@ -0,0 +1,75 @@ +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2010 Index Data + * See the file LICENSE for details. + */ + +/** \file + \brief Implement opendir/readdir/closedir on Windows +*/ + +#if HAVE_CONFIG_H +#include +#endif + +#include +#ifdef WIN32 +#include +#endif +#include +#include + +#include + +#ifdef WIN32 + +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 + +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +