annotate win/dirent.c @ 1634:c3e08322b8f6

Fixed issues drawing arcs on GTK3 and GTK2 for printing. This issue was seen in the test program with the failure to draw the bottom right arc. GTK2 printing may require some other updates after looking at this change.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 29 Mar 2012 05:16:26 +0000
parents f8d1da63fb77
children 22225eb286e5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1617
f8d1da63fb77 Add code to allow building DW.DLL as Unicode on Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1601
diff changeset
1 #undef UNICODE
f8d1da63fb77 Add code to allow building DW.DLL as Unicode on Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1601
diff changeset
2 #undef _UNICODE
f8d1da63fb77 Add code to allow building DW.DLL as Unicode on Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1601
diff changeset
3
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
4 #include <stdio.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
5 #include <stdlib.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
6 #include <string.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
7 #include <ctype.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
8
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
9 #include <windows.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
10
1594
6baf177f335c Rename compat.c/h dwcompat.c/h and configure option to --with-dwcompat.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1362
diff changeset
11 #include "dwcompat.h"
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
12 #include <errno.h>
1362
412af8059331 Attempt to get it building with Mingw again... builds but crashes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 572
diff changeset
13 #include <direct.h>
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
14
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
15 #define error(rc) errno = 255
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
16
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
17 struct _dirdescr {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
18 HANDLE handle; /* DosFindFirst handle */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
19 char fstype; /* filesystem type */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
20 long count; /* valid entries in <ffbuf> */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
21 long number; /* absolute number of next entry */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
22 int index; /* relative number of next entry */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
23 char name[MAXPATHLEN+3]; /* directory name */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
24 unsigned attrmask; /* attribute mask for seekdir */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
25 struct dirent entry; /* buffer for directory entry */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
26 WIN32_FIND_DATA data;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
27 };
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
28
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
29 /*
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
30 * Return first char of filesystem type, or 0 if unknown.
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
31 */
527
e0ea29c3d1eb Fixed dw_window_pointer() so it works on Windows. Tried to fix the
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 260
diff changeset
32 static char API getFSType(const char *path)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
33 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
34 static char cache[1+26];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
35 char drive[3];
1601
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
36 UCHAR unit;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
37 char r;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
38
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
39 if (isalpha(path[0]) && path[1] == ':') {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
40 unit = toupper(path[0]) - '@';
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
41 path += 2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
42 } else {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
43 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
44 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
45
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
46 if ((path[0] == '\\' || path[0] == '/')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
47 && (path[1] == '\\' || path[1] == '/'))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
48 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
49
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
50 if (cache [unit])
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
51 return cache [unit];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
52
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
53 drive[0] = '@' + unit;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
54 drive[1] = ':';
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
55 drive[2] = '\0';
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
56
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
57 r = GetDriveType(drive);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
58
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
59 return cache [unit] = r;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
60 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
61
527
e0ea29c3d1eb Fixed dw_window_pointer() so it works on Windows. Tried to fix the
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 260
diff changeset
62 char * API abs_path(const char *name, char *buffer, int len)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
63 {
260
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
64 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
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 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
67 {
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
68 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
69 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
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 _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
72
1601
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
73 if(_getcwd(buffer, len))
260
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
74 {
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
75 _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
76 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
77 }
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
78 _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
79 return NULL;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
80 }
260
e320dc29bfcd Rewrote abs_path() so the code will work on NT 4.0.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 184
diff changeset
81 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
82 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
83 return NULL;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
84 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
85
527
e0ea29c3d1eb Fixed dw_window_pointer() so it works on Windows. Tried to fix the
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 260
diff changeset
86 DIR * API openxdir(const char *path, unsigned att_mask)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
87 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
88 DIR *dir;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
89 char name[MAXPATHLEN+3];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
90
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
91 dir = malloc(sizeof(DIR));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
92 if (dir == NULL) {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
93 errno = ENOMEM;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
94 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
95 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
96
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
97 strncpy(name, path, MAXPATHLEN);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
98 name[MAXPATHLEN] = '\0';
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
99 switch (name[strlen(name)-1]) {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
100 default:
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
101 strcat(name, "\\");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
102 case '\\':
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
103 case '/':
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
104 case ':':
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
105 ;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
106 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
107 strcat(name, ".");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
108 if (!abs_path(name, dir->name, MAXPATHLEN+1))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
109 strcpy(dir->name, name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
110 if (dir->name[strlen(dir->name)-1] == '\\')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
111 strcat(dir->name, "*");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
112 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
113 strcat(dir->name, "\\*");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
114
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
115 dir->fstype = getFSType(dir->name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
116 dir->attrmask = att_mask | A_DIR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
117
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
118 dir->count = 100;
184
4ec906d40ce2 FindFirstFile returns INVALID_HANDLE_VALUE on error, not NULL.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
119 if((dir->handle = FindFirstFile(dir->name, &dir->data))==INVALID_HANDLE_VALUE)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
120 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
121 free(dir);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
122 error(rc);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
123 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
124 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
125
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
126 dir->number = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
127 dir->index = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
128
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
129 return (DIR *)dir;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
130 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
131
527
e0ea29c3d1eb Fixed dw_window_pointer() so it works on Windows. Tried to fix the
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 260
diff changeset
132 DIR * API opendir(const char *pathname)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
133 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
134 return openxdir(pathname, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
135 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
136
527
e0ea29c3d1eb Fixed dw_window_pointer() so it works on Windows. Tried to fix the
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 260
diff changeset
137 struct dirent * API readdir(DIR *dir)
3
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 dir->count = 100;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
144 if(!FindNextFile(dir->handle, &(dir->data)))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
145 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
146 error(rc);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
147 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
148 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
149
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
150 dir->index = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
151 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
152
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
153 strcpy(dir->entry.d_name, dir->data.cFileName);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
154 dir->entry.d_ino = dummy_ino++;
1601
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
155 dir->entry.d_reclen = (int)strlen(dir->data.cFileName);
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
156 dir->entry.d_namlen = (int)strlen(dir->data.cFileName);
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
157 dir->entry.d_size = dir->data.nFileSizeLow;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
158 dir->entry.d_attribute = dir->data.dwFileAttributes;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
159 #if 0
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
160 dir->entry.d_time = *(USHORT *)&dir->next->ftimeLastWrite;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
161 dir->entry.d_date = *(USHORT *)&dir->next->fdateLastWrite;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
162 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
163
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
164 dir->number++;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
165 dir->index++;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
166 return &dir->entry;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
167 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
168
527
e0ea29c3d1eb Fixed dw_window_pointer() so it works on Windows. Tried to fix the
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 260
diff changeset
169 long API telldir(DIR *dir)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
170 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
171 return dir->number;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
172 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
173
527
e0ea29c3d1eb Fixed dw_window_pointer() so it works on Windows. Tried to fix the
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 260
diff changeset
174 void API seekdir(DIR *dir, long off)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
175 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
176 if (dir->number > off) {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
177 char name[MAXPATHLEN+2];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
178
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
179 FindClose(dir->handle);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
180
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
181 strcpy(name, dir->name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
182 strcat(name, "*");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
183
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
184 if((dir->handle = FindFirstFile(name, &(dir->data)))==NULL)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
185 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
186 error(rc);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
187 return;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
188 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
189
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
190 dir->number = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
191 dir->index = 0;
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 while (dir->number < off && readdir(dir))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
195 ;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
196 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
197
527
e0ea29c3d1eb Fixed dw_window_pointer() so it works on Windows. Tried to fix the
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 260
diff changeset
198 void API closedir(DIR *dir)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
199 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
200 FindClose(dir->handle);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
201 free(dir);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
202 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
203
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
204 /*****************************************************************************/
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
205
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
206 #ifdef TEST
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
207
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
208 main(int argc, char **argv)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
209 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
210 int i;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
211 DIR *dir;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
212 struct dirent *ep;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
213
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
214 for (i = 1; i < argc; ++i) {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
215 dir = opendir(argv[i]);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
216 if (!dir)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
217 continue;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
218 while (ep = readdir(dir))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
219 if (strchr("\\/:", argv[i] [strlen(argv[i]) - 1]))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
220 printf("%s%s\n", argv[i], ep->d_name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
221 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
222 printf("%s/%s\n", argv[i], ep->d_name);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
223 closedir(dir);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
224 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
225
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
226 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
227 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
228
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
229 #endif