annotate compat.c @ 45:90aa71b3298a

Fixed makefile for Windows, and updated to latest source.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 30 Oct 2001 10:15:44 +0000
parents eb003f77538c
children 997e9ed670ef
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
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
8 #ifdef __UNIX__
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
9 #ifdef __FreeBSD__
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
10 #include <sys/param.h>
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
11 #include <sys/ucred.h>
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
12 #include <sys/mount.h>
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
13 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
14 #include <sys/mnttab.h>
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
15 #include <sys/param.h>
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
16 #include <sys/mount.h>
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
17 #include <sys/statfs.h>
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
18 #else
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
19 #include <mntent.h>
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
20 #include <sys/vfs.h>
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
21 #endif
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
22 #endif
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
23
37
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
24 #ifdef __UNIX__
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
25 void msleep(long period)
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
26 {
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
27 #ifdef __sun__
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
28 /* usleep() isn't threadsafe on Solaris */
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
29 struct timespec req;
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
30
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
31 req.tv_sec = 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
32 req.tv_nsec = period * 10000000;
37
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
33
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
34 nanosleep(&req, NULL);
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
35 #else
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
36 usleep(period * 1000);
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
37 #endif
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
38 }
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
39 #endif
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
40
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
41 int sockread (int a, void *b, int c, int d)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
42 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
43 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
44 return recv(a,b,c,d);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
45 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
46 return read(a,b,c);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
47 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
48 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
49
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
50 int sockwrite (int a, void *b, int c, int d)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
51 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
52 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
53 return send(a,b,c,d);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
54 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
55 return write(a,b,c);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
56 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
57 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
58
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
59 int sockclose(int a)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
60 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
61 #ifdef __IBMC__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
62 return soclose(a);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
63 #elif defined(__WIN32__) && !defined(__CYGWIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
64 return closesocket(a);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
65 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
66 return close(a);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
67 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
68 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
69
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
70 int makedir(char *path)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
71 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
72 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
73 return mkdir(path);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
74 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
75 return mkdir(path,S_IRWXU);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
76 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
77 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
78
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
79 void nonblock(int fd)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
80 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
81 #ifdef __IBMC__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
82 static int _nonblock = 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
83
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
84 ioctl(fd, FIONBIO, (char *)&_nonblock, sizeof(_nonblock));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
85 #elif defined(__WIN32__) && !defined(__CYGWIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
86 static unsigned long _nonblock = 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
87
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
88 ioctlsocket(fd, FIONBIO, &_nonblock);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
89 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
90 fcntl(fd, F_SETFL, O_NONBLOCK);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
91 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
92 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
93
37
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
94 void block(int fd)
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
95 {
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
96 #ifdef __IBMC__
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
97 static int _nonblock = 0;
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
98
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
99 ioctl(fd, FIONBIO, (char *)&_nonblock, sizeof(_nonblock));
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
100 #elif defined(__WIN32__) && !defined(__CYGWIN32__)
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
101 static unsigned long _nonblock = 0;
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
102
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
103 ioctlsocket(fd, FIONBIO, &_nonblock);
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
104 #else
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
105 fcntl(fd, F_SETFL, 0);
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
106 #endif
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
107 }
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
108
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
109 int socksprintf(int fd, char *format, ...)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
110 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
111 va_list args;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
112 char outbuf[1024];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
113 int len;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
114
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
115 va_start(args, format);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
116 vsprintf(outbuf, format, args);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
117 va_end(args);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
118
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
119 len = strlen(outbuf);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
120 sockwrite(fd, outbuf, len, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
121
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
122 return len;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
123 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
124
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
125 void sockinit(void)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
126 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
127 #ifdef __IBMC__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
128 sock_init();
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
129 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
130 WSADATA wsa;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
131
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
132 WSAStartup(MAKEWORD (1, 1), &wsa);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
133 #endif /* !WIN32 */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
134 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
135
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
136 void sockshutdown(void)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
137 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
138 #if defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
139 WSACleanup();
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
140 #endif /* !WIN32 */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
141 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
142
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
143 int sockpipe(int *pipes)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
144 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
145 #ifndef NO_DOMAIN_SOCKETS
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
146 #ifndef HAVE_PIPE
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
147 struct sockaddr_un un;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
148 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
149 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
150 struct sockaddr_in server_addr;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
151 struct sockaddr_in listen_addr = { 0 };
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
152 int len = sizeof(struct sockaddr_in);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
153 struct hostent *he;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
154 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
155 #ifndef HAVE_PIPE
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
156 int tmpsock;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
157 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
158
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
159 #ifdef HAVE_PIPE
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
160 return pipe(pipes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
161 #elif !defined(NO_DOMAIN_SOCKETS)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
162 static int instance = -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
163
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
164 instance++;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
165
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
166 /* Use UNIX domain sockets to pass messages */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
167 tmpsock = socket(AF_UNIX, SOCK_STREAM, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
168 pipes[1] = socket(AF_UNIX, SOCK_STREAM, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
169 memset(&un, 0, sizeof(un));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
170 un.sun_family=AF_UNIX;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
171 sprintf(un.sun_path, PIPENAME, instance);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
172 bind(tmpsock, (struct sockaddr *)&un, sizeof(un));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
173 listen(tmpsock, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
174 connect(pipes[1], (struct sockaddr *)&un, sizeof(un));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
175 pipes[0] = accept(tmpsock, 0, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
176 sockclose(tmpsock);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
177 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
178 /* Use localhost socket to pass messages if no domain sockets */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
179 he = gethostbyname("localhost");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
180
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
181 if(he)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
182 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
183 memset(&server_addr, 0, sizeof(server_addr));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
184 server_addr.sin_family = AF_INET;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
185 server_addr.sin_port = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
186 server_addr.sin_addr.s_addr = INADDR_ANY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
187 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
188 return -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
189
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
190 memset(&listen_addr, 0, sizeof(listen_addr));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
191 getsockname(tmpsock, (struct sockaddr *)&listen_addr, &len);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
192
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
193 server_addr.sin_family = AF_INET;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
194 server_addr.sin_port = listen_addr.sin_port;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
195 server_addr.sin_addr.s_addr = *((unsigned long *)he->h_addr);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
196 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
197 return -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
198 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
199 pipes[0] = accept(tmpsock, 0, 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
200 sockclose(tmpsock);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
201 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
202 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
203 return -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
204 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
205 if(pipes[0] < 0 || pipes[1] < 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
206 return -1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
207 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
208 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
209
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
210 /* Return in K to avoid big problems exceeding an
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
211 unsigned long when no 64bit integers are available */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
212 #if defined(__IBMC__) || (defined(__WIN32__) && !defined(__CYGWIN32__))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
213 unsigned long drivefree(int drive)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
214 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
215 unsigned long long drivefree(int drive)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
216 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
217 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
218 #if defined(__EMX__) || defined(__OS2__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
219 ULONG aulFSInfoBuf[40] = {0};
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
220 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
221 ULONG kbytes;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
222
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
223 DosError(FERR_DISABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
224 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
225 FSIL_ALLOC,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
226 (PVOID)aulFSInfoBuf,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
227 sizeof(aulFSInfoBuf));
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
228
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
229 DosError(FERR_ENABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
230 if (rc != NO_ERROR)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
231 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
232
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
233 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
234
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
235 return (unsigned long)(kbytes * aulFSInfoBuf[1] * aulFSInfoBuf[4]);
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
236 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
237 char buffer[10] = "C:\\";
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
238 DWORD spc, bps, fc, tc;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
239 ULONG kbytes;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
240
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
241 buffer[0] = drive + 'A' - 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
242
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
243 if(GetDiskFreeSpace(buffer, &spc, &bps, &fc, &tc) == 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
244 return 0;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
245
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
246 kbytes = fc/1024;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
247
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
248 return (unsigned long)(spc*bps*kbytes);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
249 #elif defined(__FreeBSD__)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
250 struct statfs *fsp;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
251 int entries, index = 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
252
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
253 entries = getmntinfo (&fsp, MNT_NOWAIT);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
254
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
255 for (; entries-- > 0; fsp++)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
256 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
257 if(index == drive)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
258 return (fsp->f_bsize * fsp->f_bavail) / 1024;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
259 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
260 return 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
261 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
262 FILE *fp = fopen("/etc/mnttab", "r");
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
263 struct mnttab mnt;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
264 struct statfs sfs;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
265 int index = 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
266
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
267 if(fp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
268 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
269 while((getmntent(fp, &mnt) == 0))
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
270 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
271 if(index == drive)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
272 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
273 long long size = 0;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
274
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
275 if(mnt.mnt_mountp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
276 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
277 statfs(mnt.mnt_mountp, &sfs, sizeof(struct statfs), 0);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
278 size = sfs.f_bsize * (sfs.f_bfree / 1024);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
279 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
280 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
281 return size;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
282 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
283 index++;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
284 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
285 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
286 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
287 return 0;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
288 #else
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
289 FILE *fp = setmntent(MOUNTED, "r");
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
290 struct mntent *mnt;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
291 struct statfs sfs;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
292 int index = 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
293
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
294 if(fp)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
295 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
296 while((mnt = getmntent(fp)))
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
297 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
298 if(index == drive)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
299 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
300 long long size = 0;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
301
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
302 if(mnt->mnt_dir)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
303 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
304 statfs(mnt->mnt_dir, &sfs);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
305 size = sfs.f_bsize * (sfs.f_bavail / 1024);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
306 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
307 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
308 return size;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
309 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
310 index++;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
311 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
312 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
313 }
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
314 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
315 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
316 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
317
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
318 /* 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
319 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
320 #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
321 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
322 #else
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
323 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
324 #endif
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
325 {
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
326 #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
327 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
328 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
329 ULONG kbytes;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
330
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
331 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
332 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
333 FSIL_ALLOC,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
334 (PVOID)aulFSInfoBuf,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
335 sizeof(aulFSInfoBuf));
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
336
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
337 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
338 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
339 return 0;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
340
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
341 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
342
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
343 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
344 #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
345 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
346 DWORD spc, bps, fc, tc;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
347 ULONG kbytes;
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
348
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
349 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
350
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
351 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
352 return 0;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
353
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
354 kbytes = tc/1024;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
355
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
356 return (unsigned long)(spc*bps*kbytes);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
357 #elif defined(__FreeBSD__)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
358 struct statfs *fsp;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
359 int entries, index = 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
360
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
361 entries = getmntinfo (&fsp, MNT_NOWAIT);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
362
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
363 for (; entries-- > 0; fsp++)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
364 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
365 if(index == drive)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
366 return (fsp->f_bsize * fsp->f_blocks) / 1024;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
367 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
368 return 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
369 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
370 FILE *fp = fopen("/etc/mnttab", "r");
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
371 struct mnttab mnt;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
372 struct statfs sfs;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
373 int index = 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
374
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
375 if(fp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
376 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
377 while(getmntent(fp, &mnt) == 0)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
378 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
379 if(index == drive)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
380 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
381 long long size = 0;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
382
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
383 if(mnt.mnt_mountp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
384 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
385 statfs(mnt.mnt_mountp, &sfs, sizeof(struct statfs), 0);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
386 size = sfs.f_bsize * (sfs.f_blocks / 1024);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
387 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
388 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
389 return size;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
390 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
391 index++;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
392 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
393 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
394 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
395 return 0;
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
396 #else
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
397 FILE *fp = setmntent(MOUNTED, "r");
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
398 struct mntent *mnt;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
399 struct statfs sfs;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
400 int index = 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
401
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
402 if(fp)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
403 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
404 while((mnt = getmntent(fp)))
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
405 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
406 if(index == drive)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
407 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
408 long long size = 0;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
409
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
410 if(mnt->mnt_dir)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
411 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
412 statfs(mnt->mnt_dir, &sfs);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
413 size = sfs.f_bsize * (sfs.f_blocks / 1024);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
414 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
415 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
416 return size;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
417 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
418 index++;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
419 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
420 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
421 }
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
422 return 0;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
423 #endif
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
424 }
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
425
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
426 int isdrive(int drive)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
427 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
428 #if defined(__EMX__) || defined(__OS2__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
429 APIRET rc = NO_ERROR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
430 FSINFO volinfo;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
431
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
432 DosError(FERR_DISABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
433 rc = DosQueryFSInfo(drive,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
434 FSIL_VOLSER,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
435 (PVOID)&volinfo,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
436 sizeof(FSINFO));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
437
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
438 DosError(FERR_ENABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
439 if (rc == NO_ERROR)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
440 return 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
441
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
442 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
443 char buffer[10] = "C:\\", volname[100];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
444 DWORD spc, bps, fc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
445
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
446 buffer[0] = drive + 'A' - 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
447
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
448 if(GetVolumeInformation(buffer, volname, 100, &spc, &bps, &fc, NULL, 0) != 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
449 return 1;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
450 #elif defined(__FreeBSD__)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
451 struct statfs *fsp;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
452 int entries, index = 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
453
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
454 entries = getmntinfo (&fsp, MNT_NOWAIT);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
455
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
456 for (; entries-- > 0; fsp++)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
457 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
458 if(index == drive && fsp->f_blocks)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
459 return 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
460 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
461 return 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
462 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
463 FILE *fp = fopen("/etc/mnttab", "r");
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
464 struct mnttab mnt;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
465 struct statfs sfs;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
466 int index = 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
467
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
468 if(fp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
469 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
470 while(getmntent(fp, &mnt) == 0)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
471 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
472 if(index == drive)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
473 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
474 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
475 if(mnt.mnt_mountp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
476 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
477 statfs(mnt.mnt_mountp, &sfs, sizeof(struct statfs), 0);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
478 if(sfs.f_blocks)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
479 return 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
480 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
481 return 0;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
482 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
483 index++;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
484 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
485 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
486 }
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
487 #else
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
488 FILE *fp = setmntent(MOUNTED, "r");
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
489 struct mntent *mnt;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
490 struct statfs sfs;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
491 int index = 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
492
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
493 if(fp)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
494 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
495 while((mnt = getmntent(fp)))
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
496 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
497 if(index == drive)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
498 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
499 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
500 if(mnt->mnt_dir)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
501 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
502 statfs(mnt->mnt_dir, &sfs);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
503 if(sfs.f_blocks)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
504 return 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
505 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
506 return 0;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
507 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
508 index++;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
509 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
510 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
511 }
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
512 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
513 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
514 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
515
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
516 void getfsname(int drive, char *buf, int len)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
517 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
518 #ifdef __UNIX__
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
519 #ifdef __FreeBSD__
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
520 struct statfs *fsp;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
521 int entries, index = 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
522
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
523 strncpy(buf, "Unknown", len);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
524
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
525 entries = getmntinfo (&fsp, MNT_NOWAIT);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
526
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
527 for (; entries-- > 0; fsp++)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
528 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
529 if(index == drive)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
530 strncpy(buf, fsp->f_mntonname, len);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
531 }
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
532 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
533 FILE *fp = fopen("/etc/mnttab", "r");
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
534 struct mnttab mnt;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
535 int index = 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
536
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
537 strncpy(buf, "Unknown", len);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
538
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
539 if(fp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
540 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
541 while(getmntent(fp, &mnt) == 0)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
542 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
543 if(index == drive && mnt.mnt_mountp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
544 strncpy(buf, mnt.mnt_mountp, len);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
545 index++;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
546 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
547 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
548 }
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
549 #else
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
550 FILE *fp = setmntent(MOUNTED, "r");
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
551 struct mntent *mnt;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
552 int index = 1;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
553
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
554 strncpy(buf, "Unknown", len);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
555
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
556 if(fp)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
557 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
558 while((mnt = getmntent(fp)))
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
559 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
560 if(index == drive && mnt->mnt_dir)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
561 strncpy(buf, mnt->mnt_dir, len);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
562 index++;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
563 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
564 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
565 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
566 #endif
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
567 #elif defined(__OS2__)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
568 /* No snprintf() on OS/2 ??? */
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
569 sprintf(buf, "Drive %c", (char)drive + 'A' - 1);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
570 #else
37
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
571 _snprintf(buf, len, "Drive %c", (char)drive + 'A' - 1);
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
572 #endif
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
573 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
574
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
575 void setfileinfo(char *filename, char *url)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
576 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
577 time_t ltime;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
578 struct tm *tm;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
579 char buffer[200], timebuf[200];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
580 #ifdef __OS2__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
581 const unsigned fea2listsize = 6000;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
582 char *pData;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
583 EAOP2 eaop2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
584 PFEA2 pFEA2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
585 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
586 FILE *urlfile;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
587 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
588
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
589 ltime = time(NULL);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
590
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
591 tm = localtime(&ltime);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
592
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
593 strftime(timebuf, 200, "%c", tm);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
594
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
595 sprintf(buffer, "%s %s", url, timebuf);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
596
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
597 #ifdef __OS2__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
598 eaop2.fpGEA2List = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
599 eaop2.fpFEA2List = (PFEA2LIST)malloc(fea2listsize);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
600 pFEA2 = &eaop2.fpFEA2List->list[0];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
601
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
602 pFEA2->fEA = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
603 /* .COMMENTS is 9 characters long */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
604 pFEA2->cbName = 9;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
605
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
606 /* space for the type and length field. */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
607 pFEA2->cbValue = strlen(buffer)+2*sizeof(USHORT);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
608
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
609 strcpy(pFEA2->szName, ".COMMENTS");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
610 pData = pFEA2->szName+pFEA2->cbName+1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
611 /* data begins at first byte after the name */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
612
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
613 *(USHORT*)pData = EAT_ASCII; /* type */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
614 *((USHORT*)pData+1) = strlen(buffer); /* length */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
615 strcpy(pData+2*sizeof(USHORT), buffer);/* content */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
616
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
617 pFEA2->oNextEntryOffset = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
618
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
619 eaop2.fpFEA2List->cbList = ((PCHAR)pData+2*sizeof(USHORT)+
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
620 pFEA2->cbValue)-((PCHAR)eaop2.fpFEA2List);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
621
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
622 DosSetPathInfo(filename,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
623 FIL_QUERYEASIZE,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
624 &eaop2,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
625 sizeof(eaop2),
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
626 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
627
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
628 free((void *)eaop2.fpFEA2List);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
629 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
630
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
631 if((urlfile = fopen("handyftp.url", "a"))!=NULL)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
632 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
633 fprintf(urlfile, "%s\n", buffer);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
634 fclose(urlfile);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
635 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
636 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
637 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
638
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
639 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
640 typedef struct _fsinfo {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
641 FILE *fp;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
642 int fd;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
643 } FSInfo;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
644
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
645 FSInfo *FSIRoot = NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
646
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
647 #define FSI_MAX 100
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
648 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
649
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
650 /* Sharable fopen() and fclose() calls. */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
651 FILE *fsopen(char *path, char *modes)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
652 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
653 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
654 int z;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
655
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
656 if(!FSIRoot)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
657 FSIRoot = calloc(sizeof(struct _fsinfo), FSI_MAX);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
658
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
659 for(z=0;z<FSI_MAX;z++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
660 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
661 if(FSIRoot[z].fd < 1)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
662 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
663 int s, sopenmode = 0, wrmode = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
664
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
665 /* Check the flags passed */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
666 for(s=0;s<3;s++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
667 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
668 if(modes[s] == 'b')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
669 sopenmode |= O_BINARY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
670 if(modes[s] == 'r')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
671 wrmode |= O_RDONLY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
672 if(modes[s] == 'w')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
673 wrmode |= O_WRONLY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
674 if(modes[s] == 'a')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
675 sopenmode |= O_APPEND;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
676 if(modes[s] == 't')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
677 sopenmode |= O_TEXT;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
678 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
679
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
680 /* Check the read/write request */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
681 if((wrmode & O_RDONLY) && (wrmode & O_WRONLY))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
682 sopenmode |= O_RDWR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
683 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
684 sopenmode |= wrmode;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
685 FSIRoot[z].fd = _sopen(path, sopenmode, SH_DENYNO, S_IREAD|S_IWRITE);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
686 if(FSIRoot[z].fd > 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
687 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
688 FSIRoot[z].fp = fdopen(FSIRoot[z].fd, modes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
689
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
690 return FSIRoot[z].fp;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
691 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
692 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
693 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
694 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
695 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
696 return fopen(path, modes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
697 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
698 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
699
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
700 int fsclose(FILE *fp)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
701 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
702 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
703 if(FSIRoot)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
704 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
705
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
706 int z;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
707 for(z=0;z<FSI_MAX;z++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
708 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
709 if(fp == FSIRoot[z].fp)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
710 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
711 int ret = fclose(fp);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
712 close(FSIRoot[z].fd);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
713 FSIRoot[z].fd = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
714 FSIRoot[z].fp = NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
715 return ret;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
716 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
717 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
718 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
719 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
720 return fclose(fp);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
721 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
722
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
723 char *fsgets(char *str, int size, FILE *stream)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
724 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
725 return fgets(str, size, stream);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
726 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
727
22
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
728 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
729 {
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
730 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
731 }