annotate compat.c @ 35:432c39a4ff86

New code for checking drive size on OS/2 and Windows.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 07 Sep 2001 15:27:55 +0000
parents 6a246b3bb14f
children cddb02f847e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
1 /* $Id$ */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
2
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
3 #include "compat.h"
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
4 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
5 #include <share.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
6 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
7
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
8 int sockread (int a, void *b, int c, int d)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
9 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
10 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
11 return recv(a,b,c,d);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
12 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
13 return read(a,b,c);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
14 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
15 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
16
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
17 int sockwrite (int a, void *b, int c, int d)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
18 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
19 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
20 return send(a,b,c,d);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
21 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
22 return write(a,b,c);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
23 #endif
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 int sockclose(int a)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
27 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
28 #ifdef __IBMC__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
29 return soclose(a);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
30 #elif defined(__WIN32__) && !defined(__CYGWIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
31 return closesocket(a);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
32 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
33 return close(a);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
34 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
35 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
36
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
37 int makedir(char *path)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
38 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
39 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
40 return mkdir(path);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
41 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
42 return mkdir(path,S_IRWXU);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
43 #endif
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 void nonblock(int fd)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
47 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
48 #ifdef __IBMC__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
49 static int _nonblock = 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
50
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
51 ioctl(fd, FIONBIO, (char *)&_nonblock, sizeof(_nonblock));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
52 #elif defined(__WIN32__) && !defined(__CYGWIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
53 static unsigned long _nonblock = 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
54
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
55 ioctlsocket(fd, FIONBIO, &_nonblock);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
56 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
57 fcntl(fd, F_SETFL, O_NONBLOCK);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
58 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
59 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
60
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
61 int socksprintf(int fd, char *format, ...)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
62 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
63 va_list args;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
64 char outbuf[1024];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
65 int len;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
66
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
67 va_start(args, format);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
68 vsprintf(outbuf, format, args);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
69 va_end(args);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
70
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
71 len = strlen(outbuf);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
72 sockwrite(fd, outbuf, len, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
73
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
74 return len;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
75 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
76
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
77 void sockinit(void)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
78 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
79 #ifdef __IBMC__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
80 sock_init();
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
81 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
82 WSADATA wsa;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
83
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
84 WSAStartup(MAKEWORD (1, 1), &wsa);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
85 #endif /* !WIN32 */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
86 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
87
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
88 void sockshutdown(void)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
89 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
90 #if defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
91 WSACleanup();
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
92 #endif /* !WIN32 */
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 int sockpipe(int *pipes)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
96 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
97 #ifndef NO_DOMAIN_SOCKETS
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
98 #ifndef HAVE_PIPE
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
99 struct sockaddr_un un;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
100 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
101 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
102 struct sockaddr_in server_addr;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
103 struct sockaddr_in listen_addr = { 0 };
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
104 int len = sizeof(struct sockaddr_in);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
105 struct hostent *he;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
106 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
107 #ifndef HAVE_PIPE
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
108 int tmpsock;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
109 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
110
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
111 #ifdef HAVE_PIPE
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
112 return pipe(pipes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
113 #elif !defined(NO_DOMAIN_SOCKETS)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
114 static int instance = -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
115
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
116 instance++;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
117
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
118 /* Use UNIX domain sockets to pass messages */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
119 tmpsock = socket(AF_UNIX, SOCK_STREAM, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
120 pipes[1] = socket(AF_UNIX, SOCK_STREAM, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
121 memset(&un, 0, sizeof(un));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
122 un.sun_family=AF_UNIX;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
123 sprintf(un.sun_path, PIPENAME, instance);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
124 bind(tmpsock, (struct sockaddr *)&un, sizeof(un));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
125 listen(tmpsock, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
126 connect(pipes[1], (struct sockaddr *)&un, sizeof(un));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
127 pipes[0] = accept(tmpsock, 0, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
128 sockclose(tmpsock);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
129 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
130 /* Use localhost socket to pass messages if no domain sockets */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
131 he = gethostbyname("localhost");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
132
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
133 if(he)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
134 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
135 memset(&server_addr, 0, sizeof(server_addr));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
136 server_addr.sin_family = AF_INET;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
137 server_addr.sin_port = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
138 server_addr.sin_addr.s_addr = INADDR_ANY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
139 if ((tmpsock = socket(AF_INET, SOCK_STREAM, 0)) < 0 || bind(tmpsock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0 || listen(tmpsock, 0) < 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
140 return -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
141
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
142 memset(&listen_addr, 0, sizeof(listen_addr));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
143 getsockname(tmpsock, (struct sockaddr *)&listen_addr, &len);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
144
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
145 server_addr.sin_family = AF_INET;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
146 server_addr.sin_port = listen_addr.sin_port;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
147 server_addr.sin_addr.s_addr = *((unsigned long *)he->h_addr);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
148 if((pipes[1] = socket(AF_INET, SOCK_STREAM, 0)) < 0 || connect(pipes[1], (struct sockaddr *)&server_addr, sizeof(server_addr)))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
149 return -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
150 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
151 pipes[0] = accept(tmpsock, 0, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
152 sockclose(tmpsock);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
153 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
154 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
155 return -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
156 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
157 if(pipes[0] < 0 || pipes[1] < 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
158 return -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
159 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
160 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
161
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
162 /* Return in K to avoid big problems exceeding an
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
163 unsigned long when no 64bit integers are available */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
164 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
165 unsigned long drivefree(int drive)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
166 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
167 unsigned long long drivefree(int drive)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
168 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
169 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
170 #if defined(__EMX__) || defined(__OS2__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
171 ULONG aulFSInfoBuf[40] = {0};
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
172 APIRET rc = NO_ERROR;
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
173 ULONG kbytes;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
174
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
175 DosError(FERR_DISABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
176 rc = DosQueryFSInfo(drive,
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
177 FSIL_ALLOC,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
178 (PVOID)aulFSInfoBuf,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
179 sizeof(aulFSInfoBuf));
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
180
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
181 DosError(FERR_ENABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
182 if (rc != NO_ERROR)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
183 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
184
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
185 kbytes = aulFSInfoBuf[3]/1024;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
186
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
187 return (unsigned long)(kbytes * aulFSInfoBuf[1] * aulFSInfoBuf[4]);
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
188 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
189 char buffer[10] = "C:\\";
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
190 DWORD spc, bps, fc, tc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
191
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
192 buffer[0] = drive + 'A' - 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
193
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
194 if(GetDiskFreeSpace(buffer, &spc, &bps, &fc, &tc) == 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
195 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
196 return (unsigned long)(spc*bps*(fc/1024));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
197 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
198 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
199 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
200 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
201
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
202 /* Return in K to avoid big problems exceeding an
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
203 unsigned long when no 64bit integers are available */
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
204 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
205 unsigned long drivesize(int drive)
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
206 #else
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
207 unsigned long long drivesize(int drive)
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
208 #endif
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
209 {
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
210 #if defined(__EMX__) || defined(__OS2__)
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
211 ULONG aulFSInfoBuf[40] = {0};
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
212 APIRET rc = NO_ERROR;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
213 ULONG kbytes;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
214
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
215 DosError(FERR_DISABLEHARDERR);
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
216 rc = DosQueryFSInfo(drive,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
217 FSIL_ALLOC,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
218 (PVOID)aulFSInfoBuf,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
219 sizeof(aulFSInfoBuf));
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
220
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
221 DosError(FERR_ENABLEHARDERR);
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
222 if (rc != NO_ERROR)
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
223 return 0;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
224
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
225 kbytes = aulFSInfoBuf[2]/1024;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
226
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
227 return (unsigned long)(kbytes * aulFSInfoBuf[1] * aulFSInfoBuf[4]);
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
228 #elif defined(__WIN32__) || defined(WINNT)
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
229 char buffer[10] = "C:\\";
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
230 DWORD spc, bps, fc, tc;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
231
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
232 buffer[0] = drive + 'A' - 1;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
233
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
234 if(GetDiskFreeSpace(buffer, &spc, &bps, &fc, &tc) == 0)
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
235 return 0;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
236 return (unsigned long)(spc*bps*(tc/1024));
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
237 #else
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
238 return 0;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
239 #endif
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
240 }
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
241
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
242 int isdrive(int drive)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
243 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
244 #if defined(__EMX__) || defined(__OS2__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
245 APIRET rc = NO_ERROR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
246 FSINFO volinfo;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
247
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
248 DosError(FERR_DISABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
249 rc = DosQueryFSInfo(drive,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
250 FSIL_VOLSER,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
251 (PVOID)&volinfo,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
252 sizeof(FSINFO));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
253
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
254 DosError(FERR_ENABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
255 if (rc == NO_ERROR)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
256 return 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
257
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
258 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
259 char buffer[10] = "C:\\", volname[100];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
260 DWORD spc, bps, fc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
261
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
262 buffer[0] = drive + 'A' - 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
263
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
264 if(GetVolumeInformation(buffer, volname, 100, &spc, &bps, &fc, NULL, 0) != 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
265 return 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
266 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
267 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
268 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
269
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
270 void setfileinfo(char *filename, char *url)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
271 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
272 time_t ltime;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
273 struct tm *tm;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
274 char buffer[200], timebuf[200];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
275 #ifdef __OS2__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
276 const unsigned fea2listsize = 6000;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
277 char *pData;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
278 EAOP2 eaop2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
279 PFEA2 pFEA2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
280 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
281 FILE *urlfile;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
282 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
283
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
284 ltime = time(NULL);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
285
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
286 tm = localtime(&ltime);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
287
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
288 strftime(timebuf, 200, "%c", tm);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
289
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
290 sprintf(buffer, "%s %s", url, timebuf);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
291
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
292 #ifdef __OS2__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
293 eaop2.fpGEA2List = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
294 eaop2.fpFEA2List = (PFEA2LIST)malloc(fea2listsize);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
295 pFEA2 = &eaop2.fpFEA2List->list[0];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
296
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
297 pFEA2->fEA = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
298 /* .COMMENTS is 9 characters long */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
299 pFEA2->cbName = 9;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
300
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
301 /* space for the type and length field. */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
302 pFEA2->cbValue = strlen(buffer)+2*sizeof(USHORT);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
303
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
304 strcpy(pFEA2->szName, ".COMMENTS");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
305 pData = pFEA2->szName+pFEA2->cbName+1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
306 /* data begins at first byte after the name */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
307
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
308 *(USHORT*)pData = EAT_ASCII; /* type */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
309 *((USHORT*)pData+1) = strlen(buffer); /* length */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
310 strcpy(pData+2*sizeof(USHORT), buffer);/* content */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
311
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
312 pFEA2->oNextEntryOffset = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
313
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
314 eaop2.fpFEA2List->cbList = ((PCHAR)pData+2*sizeof(USHORT)+
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
315 pFEA2->cbValue)-((PCHAR)eaop2.fpFEA2List);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
316
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
317 DosSetPathInfo(filename,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
318 FIL_QUERYEASIZE,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
319 &eaop2,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
320 sizeof(eaop2),
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
321 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
322
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
323 free((void *)eaop2.fpFEA2List);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
324 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
325
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
326 if((urlfile = fopen("handyftp.url", "a"))!=NULL)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
327 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
328 fprintf(urlfile, "%s\n", buffer);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
329 fclose(urlfile);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
330 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
331 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
332 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
333
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
334 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
335 typedef struct _fsinfo {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
336 FILE *fp;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
337 int fd;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
338 } FSInfo;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
339
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
340 FSInfo *FSIRoot = NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
341
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
342 #define FSI_MAX 100
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
343 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
344
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
345 /* Sharable fopen() and fclose() calls. */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
346 FILE *fsopen(char *path, char *modes)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
347 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
348 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
349 int z;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
350
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
351 if(!FSIRoot)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
352 FSIRoot = calloc(sizeof(struct _fsinfo), FSI_MAX);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
353
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
354 for(z=0;z<FSI_MAX;z++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
355 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
356 if(FSIRoot[z].fd < 1)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
357 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
358 int s, sopenmode = 0, wrmode = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
359
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
360 /* Check the flags passed */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
361 for(s=0;s<3;s++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
362 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
363 if(modes[s] == 'b')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
364 sopenmode |= O_BINARY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
365 if(modes[s] == 'r')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
366 wrmode |= O_RDONLY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
367 if(modes[s] == 'w')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
368 wrmode |= O_WRONLY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
369 if(modes[s] == 'a')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
370 sopenmode |= O_APPEND;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
371 if(modes[s] == 't')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
372 sopenmode |= O_TEXT;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
373 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
374
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
375 /* Check the read/write request */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
376 if((wrmode & O_RDONLY) && (wrmode & O_WRONLY))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
377 sopenmode |= O_RDWR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
378 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
379 sopenmode |= wrmode;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
380 FSIRoot[z].fd = _sopen(path, sopenmode, SH_DENYNO, S_IREAD|S_IWRITE);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
381 if(FSIRoot[z].fd > 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
382 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
383 FSIRoot[z].fp = fdopen(FSIRoot[z].fd, modes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
384
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
385 return FSIRoot[z].fp;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
386 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
387 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
388 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
389 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
390 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
391 return fopen(path, modes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
392 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
393 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
394
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
395 int fsclose(FILE *fp)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
396 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
397 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
398 if(FSIRoot)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
399 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
400
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
401 int z;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
402 for(z=0;z<FSI_MAX;z++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
403 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
404 if(fp == FSIRoot[z].fp)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
405 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
406 int ret = fclose(fp);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
407 close(FSIRoot[z].fd);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
408 FSIRoot[z].fd = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
409 FSIRoot[z].fp = NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
410 return ret;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
411 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
412 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
413 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
414 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
415 return fclose(fp);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
416 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
417
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
418 char *fsgets(char *str, int size, FILE *stream)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
419 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
420 return fgets(str, size, stream);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
421 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
422
22
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
423 int fsseek(FILE *stream, long offset, int whence)
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
424 {
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
425 return fseek(stream, offset, whence);
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
426 }