annotate win/dirent.c @ 410:47273b6a8500

Fixes for signal removal. Some limitations still exist... like some signals won't be removed for widgets that have multiple subparts with signals attached, like comboboxes and the tree widget. This affects dw_signal_disconnect_by_window() and dw_signal_disconnect_by_data().
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 13 May 2003 05:32:22 +0000
parents e320dc29bfcd
children e0ea29c3d1eb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
1 #include <stdio.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
2 #include <stdlib.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
3 #include <string.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
4 #include <ctype.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
5
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
6 #include <windows.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
7
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
8 #include "dirent.h"
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
9 #include <errno.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
10
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
11 #define error(rc) errno = 255
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
12
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
13 struct _dirdescr {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
14 HANDLE handle; /* DosFindFirst handle */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
15 char fstype; /* filesystem type */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
16 long count; /* valid entries in <ffbuf> */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
17 long number; /* absolute number of next entry */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
18 int index; /* relative number of next entry */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
19 char name[MAXPATHLEN+3]; /* directory name */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
20 unsigned attrmask; /* attribute mask for seekdir */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
21 struct dirent entry; /* buffer for directory entry */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
22 WIN32_FIND_DATA data;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
23 };
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
24
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
25 /*
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
26 * Return first char of filesystem type, or 0 if unknown.
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
27 */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
28 static char
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
29 getFSType(const char *path)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
30 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
31 static char cache[1+26];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
32 char drive[3];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
33 ULONG unit;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
34 char r;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
35
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
36 if (isalpha(path[0]) && path[1] == ':') {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
37 unit = toupper(path[0]) - '@';
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
38 path += 2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
39 } else {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
40 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
41 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
42
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
43 if ((path[0] == '\\' || path[0] == '/')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
44 && (path[1] == '\\' || path[1] == '/'))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
45 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
46
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
47 if (cache [unit])
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
48 return cache [unit];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
49
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
50 drive[0] = '@' + unit;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
51 drive[1] = ':';
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
52 drive[2] = '\0';
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
53
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
54 r = GetDriveType(drive);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
55
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
56 return cache [unit] = r;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
57 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
58
260
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
59 char *abs_path(const char *name, char *buffer, int len)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
60 {
260
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
61 char *buf;
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
62 LPTSTR file;
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
63
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
64 if(isalpha(name[0]) && name[1] == ':' && name[2] == '\0')
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
65 {
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
66 int drive = _getdrive();
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
67 char newdrive = toupper(name[0]);
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
68
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
69 _chdrive((newdrive - 'A')+1);
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
70
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
71 if(getcwd(buffer, len))
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
72 {
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
73 _chdrive(drive);
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
74 return buffer;
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
75 }
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
76 _chdrive(drive);
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
77 return NULL;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
78 }
260
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
79 if(GetFullPathName(name, len, buffer, &file))
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
80 return buffer;
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
81 return NULL;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
82 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
83
260
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
84 DIR *openxdir(const char *path, unsigned att_mask)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
85 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
86 DIR *dir;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
87 char name[MAXPATHLEN+3];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
88
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
89 dir = malloc(sizeof(DIR));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
90 if (dir == NULL) {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
91 errno = ENOMEM;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
92 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
93 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
94
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
95 strncpy(name, path, MAXPATHLEN);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
96 name[MAXPATHLEN] = '\0';
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
97 switch (name[strlen(name)-1]) {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
98 default:
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
99 strcat(name, "\\");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
100 case '\\':
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
101 case '/':
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
102 case ':':
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
103 ;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
104 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
105 strcat(name, ".");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
106 if (!abs_path(name, dir->name, MAXPATHLEN+1))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
107 strcpy(dir->name, name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
108 if (dir->name[strlen(dir->name)-1] == '\\')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
109 strcat(dir->name, "*");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
110 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
111 strcat(dir->name, "\\*");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
112
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
113 dir->fstype = getFSType(dir->name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
114 dir->attrmask = att_mask | A_DIR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
115
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
116 dir->count = 100;
184
4ec906d40ce2 FindFirstFile returns INVALID_HANDLE_VALUE on error, not NULL.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
117 if((dir->handle = FindFirstFile(dir->name, &dir->data))==INVALID_HANDLE_VALUE)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
118 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
119 free(dir);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
120 error(rc);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
121 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
122 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
123
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
124 dir->number = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
125 dir->index = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
126
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
127 return (DIR *)dir;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
128 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
129
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
130 DIR *
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
131 opendir(const char *pathname)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
132 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
133 return openxdir(pathname, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
134 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
135
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
136 struct dirent *
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
137 readdir(DIR *dir)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
138 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
139 static int dummy_ino = 2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
140
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
141 if (dir->number)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
142 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
143 ULONG rc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
144 dir->count = 100;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
145 if(!FindNextFile(dir->handle, &(dir->data)))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
146 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
147 error(rc);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
148 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
149 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
150
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
151 dir->index = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
152 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
153
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
154 strcpy(dir->entry.d_name, dir->data.cFileName);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
155 dir->entry.d_ino = dummy_ino++;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
156 dir->entry.d_reclen = strlen(dir->data.cFileName);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
157 dir->entry.d_namlen = strlen(dir->data.cFileName);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
158 dir->entry.d_size = dir->data.nFileSizeLow;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
159 dir->entry.d_attribute = dir->data.dwFileAttributes;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
160 #if 0
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
161 dir->entry.d_time = *(USHORT *)&dir->next->ftimeLastWrite;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
162 dir->entry.d_date = *(USHORT *)&dir->next->fdateLastWrite;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
163 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
164
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
165 dir->number++;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
166 dir->index++;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
167 return &dir->entry;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
168 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
169
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
170 long
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
171 telldir(DIR *dir)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
172 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
173 return dir->number;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
174 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
175
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
176 void
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
177 seekdir(DIR *dir, long off)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
178 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
179 if (dir->number > off) {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
180 char name[MAXPATHLEN+2];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
181 ULONG rc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
182
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
183 FindClose(dir->handle);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
184
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
185 strcpy(name, dir->name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
186 strcat(name, "*");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
187
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
188 if((dir->handle = FindFirstFile(name, &(dir->data)))==NULL)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
189 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
190 error(rc);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
191 return;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
192 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
193
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
194 dir->number = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
195 dir->index = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
196 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
197
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
198 while (dir->number < off && readdir(dir))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
199 ;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
200 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
201
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
202 void
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
203 closedir(DIR *dir)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
204 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
205 FindClose(dir->handle);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
206 free(dir);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
207 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
208
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
209 /*****************************************************************************/
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
210
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
211 #ifdef TEST
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
212
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
213 main(int argc, char **argv)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
214 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
215 int i;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
216 DIR *dir;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
217 struct dirent *ep;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
218
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
219 for (i = 1; i < argc; ++i) {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
220 dir = opendir(argv[i]);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
221 if (!dir)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
222 continue;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
223 while (ep = readdir(dir))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
224 if (strchr("\\/:", argv[i] [strlen(argv[i]) - 1]))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
225 printf("%s%s\n", argv[i], ep->d_name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
226 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
227 printf("%s/%s\n", argv[i], ep->d_name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
228 closedir(dir);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
229 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
230
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
231 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
232 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
233
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
234 #endif