Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Indent the rest of the code (examples, buildtools, doc...) except for examples/SMPI...
[simgrid.git] / tools / tesh2 / w32 / src / dirent.c
1 \r
2 #include <sys/stat.h>\r
3 #include <stdio.h>\r
4 #include <dirent.h>\r
5 #include <errno.h>\r
6     \r\rDIR * \ropendir(const char *directory_name) \r
7 {
8   \rstruct stat sb;
9   \rDIR * dir;
10   \r\rif (NULL == directory_name)
11     \r {
12     \rerrno = EINVAL;
13     \rreturn NULL;
14     \r}
15   \r\rif (0 != stat(directory_name, &sb))
16     \r {
17     \r
18         /* directory not found */ \r
19         errno = ENOENT;
20     \rreturn NULL;
21     \r}
22   \r\rif (0 == S_ISDIR(sb.st_mode))
23     \r {
24     \r
25         /* it's not a directory */ \r
26         errno = ENOTDIR;
27     \rreturn NULL;
28     \r}
29   \r\r\rdir = (DIR *) calloc(1, sizeof(DIR));
30   \r\rif (NULL == dir)
31     \r {
32     \rerrno = ENOMEM;
33     \rreturn NULL;
34     \r}
35   \r\rif ('\\' != dir->directory_name[strlen(directory_name) - 1])
36     \rsprintf(dir->directory_name, "%s\\*", directory_name);
37   \r
38   else
39     \rsprintf(dir->directory_name, "%s*", directory_name);
40   \r\rdir->file_handle = INVALID_HANDLE_VALUE;
41   \r\rreturn dir;
42 \r}
43
44 \r\rint \r closedir(DIR * dir) \r
45 {
46   \rif (NULL == dir)
47     \rreturn EINVAL;
48   \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
49     \rFindClose(dir->file_handle);
50   \r
51   else
52     \rreturn EBADF;
53   \r\rfree(dir);
54   \r\rreturn 0;
55 \r\r}
56
57 \r\rstruct dirent *\rreaddir(DIR * dir) \r
58 {
59   \rWIN32_FIND_DATA wfd = {
60   0};
61   \r\rif (!dir)
62     \r {
63     \rerrno = EINVAL;
64     \rreturn NULL;
65     \r}
66   \r\rif (!dir->pos)
67     \rdir->file_handle = FindFirstFile(dir->directory_name, &wfd);
68   \r\rif (!FindNextFile(dir->file_handle, &wfd))
69     \rreturn NULL;
70   \r\rdir->pos++;
71   \r\rstrcpy(dir->entry.d_name, wfd.cFileName);
72   \r\rreturn &(dir->entry);
73 \r}
74
75 \r\rvoid \r rewinddir(DIR * dir) \r
76 {
77   \rif (NULL == dir)
78     \r {
79     \rerrno = EINVAL;
80     \rreturn;
81     \r}
82   \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
83     \r {
84     \rFindClose(dir->file_handle);
85     \rdir->file_handle = INVALID_HANDLE_VALUE;
86     \rdir->pos = 0;
87     \r}
88 \r}
89
90 \r\roff_t \r telldir(DIR * dir) \r
91 {
92   \rif (NULL == dir)
93     \r {
94     \rerrno = EINVAL;
95     \rreturn -1;
96     \r}
97   \r\rreturn dir->pos;
98 \r}
99
100 \r\rvoid \r seekdir(DIR * dir, off_t offset) \r
101 {
102   \rWIN32_FIND_DATA wfd = {
103   0};
104   \r\rif (NULL == dir)
105     \r {
106     \rerrno = EINVAL;
107     \rreturn;
108     \r}
109   \r\rif (INVALID_HANDLE_VALUE != dir->file_handle)
110     \r {
111     \rFindClose(dir->file_handle);
112     \rdir->file_handle = INVALID_HANDLE_VALUE;
113     \rdir->pos = 0;
114     \r}
115   \r\rdir->file_handle = FindFirstFile(dir->directory_name, &wfd);
116   \r\rdir->pos += offset;
117   \r\rwhile (--offset)
118     \r {
119     \rif (!FindNextFile(dir->file_handle, &wfd))
120       \rerrno = EINVAL;
121     \r}
122 \r}
123
124 \r