annotate compat.c @ 72:ab77a22a2a36

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