YAZ  5.23.1
dirent.c
Go to the documentation of this file.
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) Index Data
3  * See the file LICENSE for details.
4  */
5 
10 #if HAVE_CONFIG_H
11 #include <config.h>
12 #endif
13 
14 #include <assert.h>
15 #ifdef WIN32
16 #include <io.h>
17 #endif
18 #include <string.h>
19 #include <stdlib.h>
20 
21 #include <yaz/dirent.h>
22 
23 #ifdef WIN32
24 
25 struct DIR {
26  HANDLE handle;
27  WIN32_FIND_DATA find_data;
28  struct dirent entry;
29 };
30 
31 DIR *opendir(const char *name)
32 {
33  char fullName[MAX_PATH+1];
34  DIR *dd = malloc(sizeof(*dd));
35 
36  if (!dd)
37  return NULL;
38  strcpy(fullName, name);
39  strcat(fullName, "\\*.*");
40  dd->handle = FindFirstFile(fullName, &dd->find_data);
41  return dd;
42 }
43 
44 struct dirent *readdir(DIR *dd)
45 {
46  if (dd->handle == INVALID_HANDLE_VALUE)
47  return NULL;
48  strcpy(dd->entry.d_name, dd->find_data.cFileName);
49  if (!FindNextFile(dd->handle, &dd->find_data))
50  {
51  FindClose(dd->handle);
52  dd->handle = INVALID_HANDLE_VALUE;
53  }
54  return &dd->entry;
55 }
56 
57 void closedir(DIR *dd)
58 {
59  if (dd->handle != INVALID_HANDLE_VALUE)
60  FindClose(dd->handle);
61  if (dd)
62  free(dd);
63 }
64 
65 #endif
66 
67 /*
68  * Local variables:
69  * c-basic-offset: 4
70  * c-file-style: "Stroustrup"
71  * indent-tabs-mode: nil
72  * End:
73  * vim: shiftwidth=4 tabstop=8 expandtab
74  */
75 
void * malloc(YYSIZE_T)
char * name
Definition: initopt.c:18
void free(void *)
wrapper for dirent.h or our own for Windows