annotate compat.c @ 29:a33dfdc5b40a

Forgot to add the EMX .def file.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 17 Aug 2001 12:25:52 +0000
parents 6a246b3bb14f
children 432c39a4ff86
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;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
173
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
174 DosError(FERR_DISABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
175 rc = DosQueryFSInfo(drive,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
176 FSIL_ALLOC,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
177 (PVOID)aulFSInfoBuf,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
178 sizeof(aulFSInfoBuf));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
179
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
180 DosError(FERR_ENABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
181 if (rc != NO_ERROR)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
182 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
183
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
184 return (unsigned long)((aulFSInfoBuf[3] * aulFSInfoBuf[1] * (USHORT)aulFSInfoBuf[4])/1024);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
185 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
186 char buffer[10] = "C:\\";
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
187 DWORD spc, bps, fc, tc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
188
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
189 buffer[0] = drive + 'A' - 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
190
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
191 if(GetDiskFreeSpace(buffer, &spc, &bps, &fc, &tc) == 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
192 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
193 return (unsigned long)(spc*bps*(fc/1024));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
194 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
195 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
196 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
197 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
198
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
199 int isdrive(int drive)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
200 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
201 #if defined(__EMX__) || defined(__OS2__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
202 APIRET rc = NO_ERROR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
203 FSINFO volinfo;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
204
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
205 DosError(FERR_DISABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
206 rc = DosQueryFSInfo(drive,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
207 FSIL_VOLSER,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
208 (PVOID)&volinfo,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
209 sizeof(FSINFO));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
210
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
211 DosError(FERR_ENABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
212 if (rc == NO_ERROR)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
213 return 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
214
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
215 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
216 char buffer[10] = "C:\\", volname[100];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
217 DWORD spc, bps, fc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
218
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
219 buffer[0] = drive + 'A' - 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
220
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
221 if(GetVolumeInformation(buffer, volname, 100, &spc, &bps, &fc, NULL, 0) != 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
222 return 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
223 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
224 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
225 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
226
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
227 void setfileinfo(char *filename, char *url)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
228 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
229 time_t ltime;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
230 struct tm *tm;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
231 char buffer[200], timebuf[200];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
232 #ifdef __OS2__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
233 const unsigned fea2listsize = 6000;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
234 char *pData;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
235 EAOP2 eaop2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
236 PFEA2 pFEA2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
237 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
238 FILE *urlfile;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
239 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
240
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
241 ltime = time(NULL);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
242
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
243 tm = localtime(&ltime);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
244
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
245 strftime(timebuf, 200, "%c", tm);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
246
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
247 sprintf(buffer, "%s %s", url, timebuf);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
248
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
249 #ifdef __OS2__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
250 eaop2.fpGEA2List = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
251 eaop2.fpFEA2List = (PFEA2LIST)malloc(fea2listsize);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
252 pFEA2 = &eaop2.fpFEA2List->list[0];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
253
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
254 pFEA2->fEA = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
255 /* .COMMENTS is 9 characters long */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
256 pFEA2->cbName = 9;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
257
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
258 /* space for the type and length field. */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
259 pFEA2->cbValue = strlen(buffer)+2*sizeof(USHORT);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
260
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
261 strcpy(pFEA2->szName, ".COMMENTS");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
262 pData = pFEA2->szName+pFEA2->cbName+1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
263 /* data begins at first byte after the name */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
264
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
265 *(USHORT*)pData = EAT_ASCII; /* type */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
266 *((USHORT*)pData+1) = strlen(buffer); /* length */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
267 strcpy(pData+2*sizeof(USHORT), buffer);/* content */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
268
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
269 pFEA2->oNextEntryOffset = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
270
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
271 eaop2.fpFEA2List->cbList = ((PCHAR)pData+2*sizeof(USHORT)+
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
272 pFEA2->cbValue)-((PCHAR)eaop2.fpFEA2List);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
273
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
274 DosSetPathInfo(filename,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
275 FIL_QUERYEASIZE,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
276 &eaop2,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
277 sizeof(eaop2),
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
278 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
279
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
280 free((void *)eaop2.fpFEA2List);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
281 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
282
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
283 if((urlfile = fopen("handyftp.url", "a"))!=NULL)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
284 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
285 fprintf(urlfile, "%s\n", buffer);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
286 fclose(urlfile);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
287 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
288 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
289 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
290
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
291 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
292 typedef struct _fsinfo {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
293 FILE *fp;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
294 int fd;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
295 } FSInfo;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
296
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
297 FSInfo *FSIRoot = NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
298
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
299 #define FSI_MAX 100
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
300 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
301
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
302 /* Sharable fopen() and fclose() calls. */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
303 FILE *fsopen(char *path, char *modes)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
304 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
305 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
306 int z;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
307
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
308 if(!FSIRoot)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
309 FSIRoot = calloc(sizeof(struct _fsinfo), FSI_MAX);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
310
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
311 for(z=0;z<FSI_MAX;z++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
312 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
313 if(FSIRoot[z].fd < 1)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
314 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
315 int s, sopenmode = 0, wrmode = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
316
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
317 /* Check the flags passed */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
318 for(s=0;s<3;s++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
319 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
320 if(modes[s] == 'b')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
321 sopenmode |= O_BINARY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
322 if(modes[s] == 'r')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
323 wrmode |= O_RDONLY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
324 if(modes[s] == 'w')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
325 wrmode |= O_WRONLY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
326 if(modes[s] == 'a')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
327 sopenmode |= O_APPEND;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
328 if(modes[s] == 't')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
329 sopenmode |= O_TEXT;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
330 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
331
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
332 /* Check the read/write request */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
333 if((wrmode & O_RDONLY) && (wrmode & O_WRONLY))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
334 sopenmode |= O_RDWR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
335 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
336 sopenmode |= wrmode;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
337 FSIRoot[z].fd = _sopen(path, sopenmode, SH_DENYNO, S_IREAD|S_IWRITE);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
338 if(FSIRoot[z].fd > 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
339 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
340 FSIRoot[z].fp = fdopen(FSIRoot[z].fd, modes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
341
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
342 return FSIRoot[z].fp;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
343 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
344 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
345 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
346 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
347 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
348 return fopen(path, modes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
349 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
350 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
351
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
352 int fsclose(FILE *fp)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
353 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
354 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
355 if(FSIRoot)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
356 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
357
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
358 int z;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
359 for(z=0;z<FSI_MAX;z++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
360 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
361 if(fp == FSIRoot[z].fp)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
362 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
363 int ret = fclose(fp);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
364 close(FSIRoot[z].fd);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
365 FSIRoot[z].fd = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
366 FSIRoot[z].fp = NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
367 return ret;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
368 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
369 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
370 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
371 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
372 return fclose(fp);
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 char *fsgets(char *str, int size, FILE *stream)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
376 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
377 return fgets(str, size, stream);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
378 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
379
22
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
380 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
381 {
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
382 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
383 }