blob: b67213012f02c74dd84e6530c14285d3c7cbecb6 (
plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/* $Id$
* =============================================================================
*
* = LIBRARY
* pace
*
* = FILENAME
* pace/win32/dirent.c
*
* = AUTHOR
* Luther Baker
*
* ============================================================================= */
#include "pace/dirent.h"
#if !defined (PACE_HAS_INLINE)
# include "pace/win32/dirent.inl"
#endif /* ! PACE_HAS_INLINE */
#if (PACE_HAS_POSIX_FS_UOF)
int
closedir (PACE_DIR * dirp)
{
if (dirp->current_handle_ != (void*)0)
{
FindClose (dirp->current_handle_);
}
dirp->current_handle_ = (void*)0;
dirp->started_reading_ = 0;
return 1;
}
#endif /* PACE_HAS_POSIX_FS_UOF */
#if (PACE_HAS_POSIX_FS_UOF)
PACE_DIR *
opendir (const char * dirname)
{
PACE_DIR * dirp = (PACE_DIR*) pace_malloc (sizeof (PACE_DIR));
const pace_size_t dir_size = pace_strlen (dirname) + 1;
dirp->directory_name_ = (char*) pace_malloc (dir_size);
pace_strcpy (dirp->directory_name_, dirname);
dirp->current_handle_ = PACE_INVALID_HANDLE;
dirp->started_reading_ = 0;
return dirp;
}
#endif /* PACE_HAS_POSIX_FS_UOF */
#if (PACE_HAS_POSIX_FS_UOF)
pace_dirent *
readdir (PACE_DIR * dirp)
{
if (dirp->started_reading_)
{
dirp->current_handle_ = FindFirstFile (dirp->directory_name_,
&(dirp->fdata_));
if (dirp->current_handle_ != PACE_INVALID_HANDLE)
{
FindClose (dirp->current_handle_);
dirp->current_handle_ = PACE_INVALID_HANDLE;
}
else /* Skip "." and ".." */
{
int retval = 1;
while (*(dirp->fdata_.cFileName) == '.'
&& retval
&& dirp->fdata_.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
retval = FindNextFile (dirp->current_handle_,
&(dirp->fdata_));
}
if (retval == 0)
{
dirp->current_handle_ = PACE_INVALID_HANDLE;
}
}
dirp->started_reading_ = 1;
}
else
{
int retval = FindNextFile (dirp->current_handle_,
&(dirp->fdata_));
if (retval == 0)
{
dirp->current_handle_ = PACE_INVALID_HANDLE;
}
}
if (dirp->current_handle_ != PACE_INVALID_HANDLE)
{
dirp->dirent_.d_name = dirp->fdata_.cFileName;
return &(dirp->dirent_);
}
else
{
return (pace_dirent*)0;
}
}
#endif /* PACE_HAS_POSIX_FS_UOF */
|