This source file includes following definitions.
- closedir
- opendir
- readdir
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include "lt__private.h"
32
33 #include <assert.h>
34
35 #include "lt__dirent.h"
36
37 #if defined __WINDOWS__
38
39 void
40 closedir (DIR *entry)
41 {
42 assert (entry != (DIR *) NULL);
43 FindClose (entry->hSearch);
44 free (entry);
45 }
46
47
48 DIR *
49 opendir (const char *path)
50 {
51 char file_spec[LT_FILENAME_MAX];
52 DIR *entry;
53
54 assert (path != (char *) 0);
55 if (lt_strlcpy (file_spec, path, sizeof file_spec) >= sizeof file_spec
56 || lt_strlcat (file_spec, "\\", sizeof file_spec) >= sizeof file_spec)
57 return (DIR *) 0;
58 entry = (DIR *) malloc (sizeof(DIR));
59 if (entry != (DIR *) 0)
60 {
61 entry->firsttime = TRUE;
62 entry->hSearch = FindFirstFile (file_spec, &entry->Win32FindData);
63
64 if (entry->hSearch == INVALID_HANDLE_VALUE)
65 {
66 if (lt_strlcat (file_spec, "\\*.*", sizeof file_spec) < sizeof file_spec)
67 {
68 entry->hSearch = FindFirstFile (file_spec, &entry->Win32FindData);
69 }
70
71 if (entry->hSearch == INVALID_HANDLE_VALUE)
72 {
73 entry = (free (entry), (DIR *) 0);
74 }
75 }
76 }
77
78 return entry;
79 }
80
81
82 struct dirent *
83 readdir (DIR *entry)
84 {
85 int status;
86
87 if (entry == (DIR *) 0)
88 return (struct dirent *) 0;
89
90 if (!entry->firsttime)
91 {
92 status = FindNextFile (entry->hSearch, &entry->Win32FindData);
93 if (status == 0)
94 return (struct dirent *) 0;
95 }
96
97 entry->firsttime = FALSE;
98 if (lt_strlcpy (entry->file_info.d_name, entry->Win32FindData.cFileName,
99 sizeof entry->file_info.d_name) >= sizeof entry->file_info.d_name)
100 return (struct dirent *) 0;
101 entry->file_info.d_namlen = strlen (entry->file_info.d_name);
102
103 return &entry->file_info;
104 }
105
106 #endif