annotate dwcompat.c @ 2234:b569023edb6f

Mac: Fix display of MLE after toggling word wrap on, without having to resize the window.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 04 Jan 2021 12:33:20 +0000
parents 05dd5189099f
children a126b04b9996
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1909
cb5f9aa9aebb Added detection support for Windows 10.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1860
diff changeset
1 /* $Id$ */
1617
f8d1da63fb77 Add code to allow building DW.DLL as Unicode on Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1609
diff changeset
2 #undef UNICODE
f8d1da63fb77 Add code to allow building DW.DLL as Unicode on Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1609
diff changeset
3 #undef _UNICODE
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
4
1601
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
5 #ifdef __WIN32__
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
6 #include <direct.h>
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
7 #endif
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
8 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
9 #include <share.h>
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
10 #endif
1839
22225eb286e5 Fixes for building with MINGW64 (specifically http://tdm-gcc.tdragon.net/).
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1710
diff changeset
11 #define _DW_INTERNAL
1601
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
12 #include "dwcompat.h"
71e0a3ad07f7 Enable level 3 warnings in DEBUG mode with Visual C to show deprecation warnings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1594
diff changeset
13 #include "dw.h"
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
14
433
f225f16bebbd Compile fixes for MacOS X.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 176
diff changeset
15 #if defined(__UNIX__) || defined(__MAC__)
f225f16bebbd Compile fixes for MacOS X.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 176
diff changeset
16 #if defined(__FreeBSD__) || defined(__MAC__)
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
17 #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
18 #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
19 #include <sys/mount.h>
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
20 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
21 #include <sys/mnttab.h>
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
22 #include <sys/param.h>
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
23 #include <sys/mount.h>
871
b15ad609365e Solaris recommends using statvfs() instead of statfs()
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 870
diff changeset
24 #include <sys/statvfs.h>
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
25 #else
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
26 #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
27 #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
28 #endif
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
29 #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
30 #include <time.h>
870
59c4fac42fb5 Need to use tv_sec if tv_nsec exceeds one second on Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 697
diff changeset
31 #include <errno.h>
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
32
441
b559c06a76c2 Implemented more functionality on MacOS and include the platform define
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 433
diff changeset
33 #if defined(__UNIX__) || defined(__MAC__)
37
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
34 void msleep(long period)
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
35 {
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
36 #ifdef __sun__
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
37 /* usleep() isn't threadsafe on Solaris */
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
38 struct timespec req;
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 req.tv_sec = 0;
870
59c4fac42fb5 Need to use tv_sec if tv_nsec exceeds one second on Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 697
diff changeset
41 if(period >= 1000)
59c4fac42fb5 Need to use tv_sec if tv_nsec exceeds one second on Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 697
diff changeset
42 {
59c4fac42fb5 Need to use tv_sec if tv_nsec exceeds one second on Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 697
diff changeset
43 req.tv_sec = (int)(period / 1000);
59c4fac42fb5 Need to use tv_sec if tv_nsec exceeds one second on Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 697
diff changeset
44 period -= (req.tv_sec * 1000);
59c4fac42fb5 Need to use tv_sec if tv_nsec exceeds one second on Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 697
diff changeset
45 }
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
46 req.tv_nsec = period * 10000000;
870
59c4fac42fb5 Need to use tv_sec if tv_nsec exceeds one second on Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 697
diff changeset
47
37
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
48 nanosleep(&req, NULL);
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
49 #else
1110
404b639f096b Minor typecast fixes for warnings reported by clang on Mac.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1109
diff changeset
50 usleep((int)(period * 1000));
37
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
51 #endif
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
52 }
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
53 #endif
360bc6a5f1c9 Sync with latest Dynamic Windows code.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 36
diff changeset
54
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
55 int API makedir(char *path)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
56 {
2164
05dd5189099f Win: Fix some warnings reported with -W3 in Visual C.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1991
diff changeset
57 #if defined(__IBMC__) || defined(__WATCOMC__) || defined(__MINGW32__) || defined(__MINGW64__)
1839
22225eb286e5 Fixes for building with MINGW64 (specifically http://tdm-gcc.tdragon.net/).
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1710
diff changeset
58 return mkdir(path);
2164
05dd5189099f Win: Fix some warnings reported with -W3 in Visual C.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1991
diff changeset
59 #elif defined(_MSC_VER)
05dd5189099f Win: Fix some warnings reported with -W3 in Visual C.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1991
diff changeset
60 return _mkdir(path);
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
61 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
62 return mkdir(path,S_IRWXU);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
63 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
64 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
65
580
d7c338ac926a Sweeping changes to the compatibility module, moved all socket code out
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 557
diff changeset
66 char * API vargs(char *buf, int len, char *format, ...)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
67 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
68 va_list args;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
69
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
70 va_start(args, format);
580
d7c338ac926a Sweeping changes to the compatibility module, moved all socket code out
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 557
diff changeset
71 #ifdef HAVE_VSNPRINTF
d7c338ac926a Sweeping changes to the compatibility module, moved all socket code out
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 557
diff changeset
72 vsnprintf(buf, len, format, args);
d7c338ac926a Sweeping changes to the compatibility module, moved all socket code out
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 557
diff changeset
73 #else
d7c338ac926a Sweeping changes to the compatibility module, moved all socket code out
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 557
diff changeset
74 len = len;
d7c338ac926a Sweeping changes to the compatibility module, moved all socket code out
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 557
diff changeset
75 vsprintf(buf, format, args);
d7c338ac926a Sweeping changes to the compatibility module, moved all socket code out
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 557
diff changeset
76 #endif
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
77 va_end(args);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
78
580
d7c338ac926a Sweeping changes to the compatibility module, moved all socket code out
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 557
diff changeset
79 return buf;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
80 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
81
1609
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
82 /* Get around getmntinfo() not being thread safe */
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
83 #if defined(__FreeBSD__) || defined(__MAC__)
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
84 int _getmntinfo_r(struct statfs **mntbufp, int flags)
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
85 {
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
86 static HMTX mutex = 0;
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
87 int result;
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
88
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
89 if(!mutex)
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
90 mutex = dw_mutex_new();
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
91
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
92 dw_mutex_lock(mutex);
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
93 result = getmntinfo(mntbufp, flags);
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
94 dw_mutex_unlock(mutex);
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
95 return result;
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
96 }
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
97 #endif
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
98
1860
02a23143334c Apparently Visual C's "long double" type is "double" for gcc...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1839
diff changeset
99 #ifdef __MINGW32__
02a23143334c Apparently Visual C's "long double" type is "double" for gcc...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1839
diff changeset
100 double API drivefree(int drive)
02a23143334c Apparently Visual C's "long double" type is "double" for gcc...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1839
diff changeset
101 #else
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
102 long double API drivefree(int drive)
1860
02a23143334c Apparently Visual C's "long double" type is "double" for gcc...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1839
diff changeset
103 #endif
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
104 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
105 #if defined(__EMX__) || defined(__OS2__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
106 ULONG aulFSInfoBuf[40] = {0};
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
107 APIRET rc = NO_ERROR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
108
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
109 DosError(FERR_DISABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
110 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
111 FSIL_ALLOC,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
112 (PVOID)aulFSInfoBuf,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
113 sizeof(aulFSInfoBuf));
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
114
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
115 DosError(FERR_ENABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
116 if (rc != NO_ERROR)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
117 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
118
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
119 return (long double)((double)aulFSInfoBuf[3] * (double)aulFSInfoBuf[1] * (double)aulFSInfoBuf[4]);
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
120 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
121 char buffer[10] = "C:\\";
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
122 DWORD spc, bps, fc, tc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
123
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
124 buffer[0] = drive + 'A' - 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
125
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
126 if(GetDiskFreeSpace(buffer, &spc, &bps, &fc, &tc) == 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
127 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
128
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
129 return (long double)((double)spc*(double)bps*(double)fc);
433
f225f16bebbd Compile fixes for MacOS X.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 176
diff changeset
130 #elif defined(__FreeBSD__) || defined(__MAC__)
1608
ff844a41193b Not setting the structure to NULL seems to cause crashes on Mac when mounting/unmounting.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1601
diff changeset
131 struct statfs *fsp = NULL;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
132 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
133
1609
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
134 entries = _getmntinfo_r(&fsp, MNT_NOWAIT);
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
135
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
136 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
137 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
138 if(index == drive)
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
139 return (long double)((double)fsp->f_bsize * (double)fsp->f_bavail);
98
c0388006bb0d Fixes for FreeBSD.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 74
diff changeset
140 index++;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
141 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
142 return 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
143 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
144 FILE *fp = fopen("/etc/mnttab", "r");
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
145 struct mnttab mnt;
871
b15ad609365e Solaris recommends using statvfs() instead of statfs()
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 870
diff changeset
146 struct statvfs sfs;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
147 int index = 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
148
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
149 if(fp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
150 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
151 while((getmntent(fp, &mnt) == 0))
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
152 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
153 if(index == drive)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
154 {
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
155 long double size = 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
156
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
157 if(mnt.mnt_mountp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
158 {
871
b15ad609365e Solaris recommends using statvfs() instead of statfs()
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 870
diff changeset
159 if(!statvfs(mnt.mnt_mountp, &sfs))
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
160 {
871
b15ad609365e Solaris recommends using statvfs() instead of statfs()
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 870
diff changeset
161 size = (long double)((double)sfs.f_bsize * (double)sfs.f_bavail);
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
162 }
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
163 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
164 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
165 return size;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
166 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
167 index++;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
168 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
169 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
170 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
171 return 0;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
172 #else
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
173 FILE *fp = setmntent(MOUNTED, "r");
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
174 struct mntent mnt;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
175 struct statfs sfs;
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
176 char buffer[1024];
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
177 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
178
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
179 if(fp)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
180 {
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
181 while(getmntent_r(fp, &mnt, buffer, sizeof(buffer)))
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
182 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
183 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
184 {
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
185 long double size = 0;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
186
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
187 if(mnt.mnt_dir)
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
188 {
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
189 if(!statfs(mnt.mnt_dir, &sfs))
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
190 {
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
191 size = (long double)((double)sfs.f_bsize * (double)sfs.f_bavail);
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
192 }
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
193 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
194 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
195 return size;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
196 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
197 index++;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
198 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
199 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
200 }
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
201 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
202 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
203 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
204
1860
02a23143334c Apparently Visual C's "long double" type is "double" for gcc...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1839
diff changeset
205 #ifdef __MINGW32__
02a23143334c Apparently Visual C's "long double" type is "double" for gcc...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1839
diff changeset
206 double API drivesize(int drive)
02a23143334c Apparently Visual C's "long double" type is "double" for gcc...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1839
diff changeset
207 #else
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
208 long double API drivesize(int drive)
1860
02a23143334c Apparently Visual C's "long double" type is "double" for gcc...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1839
diff changeset
209 #endif
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
210 {
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
211 #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
212 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
213 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
214
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
215 DosError(FERR_DISABLEHARDERR);
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
216 rc = DosQueryFSInfo(drive,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
217 FSIL_ALLOC,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
218 (PVOID)aulFSInfoBuf,
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
219 sizeof(aulFSInfoBuf));
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
220
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
221 DosError(FERR_ENABLEHARDERR);
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
222 if (rc != NO_ERROR)
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
223 return 0;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
224
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
225 return (long double)((double)aulFSInfoBuf[2] * (double)aulFSInfoBuf[1] * (double)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
226 #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
227 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
228 DWORD spc, bps, fc, tc;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
229
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
230 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
231
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
232 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
233 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
234
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
235 return (long double)((double)spc*(double)bps*(double)tc);
433
f225f16bebbd Compile fixes for MacOS X.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 176
diff changeset
236 #elif defined(__FreeBSD__) || defined(__MAC__)
1608
ff844a41193b Not setting the structure to NULL seems to cause crashes on Mac when mounting/unmounting.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1601
diff changeset
237 struct statfs *fsp = NULL;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
238 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
239
1609
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
240 entries = _getmntinfo_r(&fsp, MNT_NOWAIT);
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
241
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
242 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
243 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
244 if(index == drive)
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
245 return (long double)((double)fsp->f_bsize * (double)fsp->f_blocks);
98
c0388006bb0d Fixes for FreeBSD.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 74
diff changeset
246 index++;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
247 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
248 return 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
249 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
250 FILE *fp = fopen("/etc/mnttab", "r");
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
251 struct mnttab mnt;
871
b15ad609365e Solaris recommends using statvfs() instead of statfs()
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 870
diff changeset
252 struct statvfs sfs;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
253 int index = 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
254
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
255 if(fp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
256 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
257 while(getmntent(fp, &mnt) == 0)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
258 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
259 if(index == drive)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
260 {
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
261 long double size = 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
262
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
263 if(mnt.mnt_mountp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
264 {
871
b15ad609365e Solaris recommends using statvfs() instead of statfs()
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 870
diff changeset
265 if(!statvfs(mnt.mnt_mountp, &sfs))
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
266 {
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
267 size = (long double)((double)sfs.f_bsize * (double)sfs.f_blocks);
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
268 }
42
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 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
271 return size;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
272 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
273 index++;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
274 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
275 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
276 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
277 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
278 #else
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
279 FILE *fp = setmntent(MOUNTED, "r");
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
280 struct mntent mnt;
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
281 char buffer[1024];
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
282 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
283 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
284
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
285 if(fp)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
286 {
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
287 while(getmntent_r(fp, &mnt, buffer, sizeof(buffer)))
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
288 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
289 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
290 {
101
a5da1ac53b34 Use long double instead of long long for drivesize and drivefree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 100
diff changeset
291 long double size = 0;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
292
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
293 if(mnt.mnt_dir)
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
294 {
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
295 if(!statfs(mnt.mnt_dir, &sfs))
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
296 {
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
297 size = (long double)((double)sfs.f_bsize * (double)sfs.f_blocks);
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
298 }
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
299 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
300 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
301 return size;
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 index++;
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 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
306 }
35
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
307 return 0;
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
308 #endif
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
309 }
432c39a4ff86 New code for checking drive size on OS/2 and Windows.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 22
diff changeset
310
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
311 int API isdrive(int drive)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
312 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
313 #if defined(__EMX__) || defined(__OS2__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
314 APIRET rc = NO_ERROR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
315 FSINFO volinfo;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
316
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
317 DosError(FERR_DISABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
318 rc = DosQueryFSInfo(drive,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
319 FSIL_VOLSER,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
320 (PVOID)&volinfo,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
321 sizeof(FSINFO));
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
322
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
323 DosError(FERR_ENABLEHARDERR);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
324 if (rc == NO_ERROR)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
325 return 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
326
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
327 #elif defined(__WIN32__) || defined(WINNT)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
328 char buffer[10] = "C:\\", volname[100];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
329 DWORD spc, bps, fc;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
330
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
331 buffer[0] = drive + 'A' - 1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
332
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
333 if(GetVolumeInformation(buffer, volname, 100, &spc, &bps, &fc, NULL, 0) != 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
334 return 1;
433
f225f16bebbd Compile fixes for MacOS X.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 176
diff changeset
335 #elif defined(__FreeBSD__) || defined(__MAC__)
1608
ff844a41193b Not setting the structure to NULL seems to cause crashes on Mac when mounting/unmounting.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1601
diff changeset
336 struct statfs *fsp = NULL;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
337 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
338
1609
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
339 entries = _getmntinfo_r(&fsp, MNT_NOWAIT);
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
340
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
341 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
342 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
343 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
344 return 1;
98
c0388006bb0d Fixes for FreeBSD.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 74
diff changeset
345 index++;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
346 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
347 return 0;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
348 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
349 FILE *fp = fopen("/etc/mnttab", "r");
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
350 struct mnttab mnt;
871
b15ad609365e Solaris recommends using statvfs() instead of statfs()
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 870
diff changeset
351 struct statvfs sfs;
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
352 int index = 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
353
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
354 if(fp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
355 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
356 while(getmntent(fp, &mnt) == 0)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
357 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
358 if(index == drive)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
359 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
360 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
361 if(mnt.mnt_mountp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
362 {
871
b15ad609365e Solaris recommends using statvfs() instead of statfs()
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 870
diff changeset
363 if(!statvfs(mnt.mnt_mountp, &sfs) && sfs.f_blocks)
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
364 return 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
365 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
366 return 0;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
367 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
368 index++;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
369 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
370 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
371 }
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
372 #else
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
373 FILE *fp = setmntent(MOUNTED, "r");
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
374 struct mntent mnt;
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
375 char buffer[1024];
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
376 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
377 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
378
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
379 if(fp)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
380 {
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
381 while(getmntent_r(fp, &mnt, buffer, sizeof(buffer)))
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
382 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
383 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
384 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
385 endmntent(fp);
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
386 if(mnt.mnt_dir)
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
387 {
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
388 if(!statfs(mnt.mnt_dir, &sfs) && sfs.f_blocks)
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
389 {
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
390 return 1;
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
391 }
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
392 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
393 return 0;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
394 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
395 index++;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
396 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
397 endmntent(fp);
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
398 }
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
399 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
400 return 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
401 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
402
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
403 void API getfsname(int drive, char *buf, int len)
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
404 {
433
f225f16bebbd Compile fixes for MacOS X.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 176
diff changeset
405 #if defined(__UNIX__) || defined(__MAC__)
f225f16bebbd Compile fixes for MacOS X.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 176
diff changeset
406 #if defined(__FreeBSD__) || defined(__MAC__)
1608
ff844a41193b Not setting the structure to NULL seems to cause crashes on Mac when mounting/unmounting.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1601
diff changeset
407 struct statfs *fsp = NULL;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
408 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
409
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
410 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
411
1609
e4a641036581 Last commit didn't help, seems getmntinfo() isn't thread safe on Mac or FreeBSD...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1608
diff changeset
412 entries = _getmntinfo_r(&fsp, MNT_NOWAIT);
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
413
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
414 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
415 {
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
416 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
417 strncpy(buf, fsp->f_mntonname, len);
98
c0388006bb0d Fixes for FreeBSD.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 74
diff changeset
418 index++;
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
419 }
42
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
420 #elif defined(__sun__)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
421 FILE *fp = fopen("/etc/mnttab", "r");
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
422 struct mnttab mnt;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
423 int index = 1;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
424
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
425 strncpy(buf, "Unknown", len);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
426
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
427 if(fp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
428 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
429 while(getmntent(fp, &mnt) == 0)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
430 {
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
431 if(index == drive && mnt.mnt_mountp)
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
432 strncpy(buf, mnt.mnt_mountp, len);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
433 index++;
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
434 }
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
435 fclose(fp);
eb003f77538c Added the filesystem functions for Solaris.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 37
diff changeset
436 }
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
437 #else
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
438 FILE *fp = setmntent(MOUNTED, "r");
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
439 struct mntent mnt;
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
440 char buffer[1024];
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
441 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
442
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
443 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
444
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
445 if(fp)
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
446 {
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
447 while(getmntent_r(fp, &mnt, buffer, sizeof(buffer)))
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
448 {
649
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
449 if(index == drive && mnt.mnt_dir)
3e2ada9ee0ac Switched to using reentrant version of getmntent on Linux.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 647
diff changeset
450 strncpy(buf, mnt.mnt_dir, len);
36
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
451 index++;
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
452 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
453 endmntent(fp);
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 #endif
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
456 #else
1989
1dd49705bd1a Fix potential buffer overflow scenarios, reported by gcc fortify.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1909
diff changeset
457 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
458 #endif
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
459 }
cddb02f847e1 Added unix versions of functions in compat, and added getfsname, plus
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 35
diff changeset
460
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
461 void API setfileinfo(char *filename, char *url, char *logfile)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
462 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
463 time_t ltime;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
464 struct tm *tm;
1989
1dd49705bd1a Fix potential buffer overflow scenarios, reported by gcc fortify.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1909
diff changeset
465 char buffer[250], timebuf[200];
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
466 #ifdef __OS2__
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
467 const unsigned fea2listsize = 6000;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
468 char *pData;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
469 EAOP2 eaop2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
470 PFEA2 pFEA2;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
471 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
472 FILE *urlfile;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
473 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
474
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
475 ltime = time(NULL);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
476
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
477 tm = localtime(&ltime);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
478
1989
1dd49705bd1a Fix potential buffer overflow scenarios, reported by gcc fortify.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1909
diff changeset
479 strftime(timebuf, sizeof(timebuf), "%c", tm);
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
480
1989
1dd49705bd1a Fix potential buffer overflow scenarios, reported by gcc fortify.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1909
diff changeset
481 snprintf(buffer, sizeof(buffer), "%s %s", url, timebuf);
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
482
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
483 #ifdef __OS2__
485
469ff8133ed3 Simplified the folder browser on OS/2, following some Unix changes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 441
diff changeset
484 logfile = logfile;
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
485 eaop2.fpGEA2List = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
486 eaop2.fpFEA2List = (PFEA2LIST)malloc(fea2listsize);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
487 pFEA2 = &eaop2.fpFEA2List->list[0];
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
488
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
489 pFEA2->fEA = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
490 /* .COMMENTS is 9 characters long */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
491 pFEA2->cbName = 9;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
492
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
493 /* space for the type and length field. */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
494 pFEA2->cbValue = strlen(buffer)+2*sizeof(USHORT);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
495
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
496 strcpy(pFEA2->szName, ".COMMENTS");
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
497 pData = pFEA2->szName+pFEA2->cbName+1;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
498 /* data begins at first byte after the name */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
499
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
500 *(USHORT*)pData = EAT_ASCII; /* type */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
501 *((USHORT*)pData+1) = strlen(buffer); /* length */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
502 strcpy(pData+2*sizeof(USHORT), buffer);/* content */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
503
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
504 pFEA2->oNextEntryOffset = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
505
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
506 eaop2.fpFEA2List->cbList = ((PCHAR)pData+2*sizeof(USHORT)+
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
507 pFEA2->cbValue)-((PCHAR)eaop2.fpFEA2List);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
508
1341
184b3aedc2ff Added PMPrintf support to dw_debug() on OS/2.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1110
diff changeset
509 DosSetPathInfo((PSZ)filename,
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
510 FIL_QUERYEASIZE,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
511 &eaop2,
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
512 sizeof(eaop2),
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
513 0);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
514
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
515 free((void *)eaop2.fpFEA2List);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
516 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
517
53
8add9a616d0e Added a log filename parameter to setfileinfo().
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 47
diff changeset
518 if((urlfile = fopen(logfile, "a"))!=NULL)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
519 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
520 fprintf(urlfile, "%s\n", buffer);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
521 fclose(urlfile);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
522 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
523 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
524 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
525
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
526 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
527 typedef struct _fsinfo {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
528 FILE *fp;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
529 int fd;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
530 } FSInfo;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
531
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
532 FSInfo *FSIRoot = NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
533
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
534 #define FSI_MAX 100
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
535 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
536
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
537 /* Sharable fopen() and fclose() calls. */
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
538 FILE * API fsopen(char *path, char *modes)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
539 {
172
0fc45e386376 Get Dynamic Windows building with Watcom.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 101
diff changeset
540 #if (defined(__OS2__) && !defined(__WATCOMC__)) || defined(__WIN32__)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
541 int z;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
542
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
543 if(!FSIRoot)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
544 FSIRoot = calloc(sizeof(struct _fsinfo), FSI_MAX);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
545
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
546 for(z=0;z<FSI_MAX;z++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
547 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
548 if(FSIRoot[z].fd < 1)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
549 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
550 int s, sopenmode = 0, wrmode = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
551
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
552 /* Check the flags passed */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
553 for(s=0;s<3;s++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
554 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
555 if(modes[s] == 'b')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
556 sopenmode |= O_BINARY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
557 if(modes[s] == 'r')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
558 wrmode |= O_RDONLY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
559 if(modes[s] == 'w')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
560 wrmode |= O_WRONLY;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
561 if(modes[s] == 'a')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
562 sopenmode |= O_APPEND;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
563 if(modes[s] == 't')
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
564 sopenmode |= O_TEXT;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
565 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
566
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
567 /* Check the read/write request */
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
568 if((wrmode & O_RDONLY) && (wrmode & O_WRONLY))
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
569 sopenmode |= O_RDWR;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
570 else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
571 sopenmode |= wrmode;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
572 FSIRoot[z].fd = _sopen(path, sopenmode, SH_DENYNO, S_IREAD|S_IWRITE);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
573 if(FSIRoot[z].fd > 0)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
574 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
575 FSIRoot[z].fp = fdopen(FSIRoot[z].fd, modes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
576
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
577 return FSIRoot[z].fp;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
578 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
579 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
580 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
581 return NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
582 #else
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
583 return fopen(path, modes);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
584 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
585 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
586
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
587 int API fsclose(FILE *fp)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
588 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
589 #if defined(__OS2__) || defined(__WIN32__)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
590 if(FSIRoot)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
591 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
592
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
593 int z;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
594 for(z=0;z<FSI_MAX;z++)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
595 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
596 if(fp == FSIRoot[z].fp)
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
597 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
598 int ret = fclose(fp);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
599 close(FSIRoot[z].fd);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
600 FSIRoot[z].fd = 0;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
601 FSIRoot[z].fp = NULL;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
602 return ret;
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
603 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
604 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
605 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
606 #endif
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
607 return fclose(fp);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
608 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
609
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
610 char * API fsgets(char *str, int size, FILE *stream)
3
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
611 {
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
612 return fgets(str, size, stream);
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
613 }
ktk@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff changeset
614
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
615 int API fsseek(FILE *stream, long offset, int whence)
22
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
616 {
6a246b3bb14f Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 3
diff changeset
617 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
618 }
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
619
557
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
620 void API nice_strformat(char *dest, long double val, int dec)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
621 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
622 char formatbuf[10];
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
623 char format = 0;
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
624 double printval;
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
625
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
626 /* 1024 ^ 3 = Gigabytes */
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
627 if(val >= 1073741824L)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
628 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
629 printval = val/(1073741824L);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
630 format = 'G';
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
631 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
632 /* 1024 ^ 2 = Megabytes */
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
633 else if(val >= 1048576)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
634 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
635 printval = val/(1048576);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
636 format = 'M';
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
637 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
638 /* 1024 = Kilobytes */
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
639 else if(val > 1024)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
640 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
641 printval = val/1024;
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
642 format = 'K';
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
643 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
644 else
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
645 printval = val;
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
646
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
647 /* Generate the format string */
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
648 sprintf(formatbuf, "%%.%df%c", dec, format);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
649 /* Create the pretty value */
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
650 sprintf(dest, formatbuf, printval);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
651 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
652
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
653 /* Update the current working directory based on the
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
654 * path of the executable being executed.
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
655 */
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
656 void API initdir(int argc, char *argv[])
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
657 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
658 if(argc > 0)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
659 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
660 char *tmpdir = strdup(argv[0]);
1110
404b639f096b Minor typecast fixes for warnings reported by clang on Mac.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1109
diff changeset
661 int z, len = (int)strlen(argv[0]);
557
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
662
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
663 for(z=len;z > -1;z--)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
664 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
665 if(tmpdir[z] == '/')
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
666 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
667 tmpdir[z+1] = 0;
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
668 setpath(tmpdir);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
669 free(tmpdir);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
670 return;
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
671 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
672 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
673 free(tmpdir);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
674 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
675 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
676
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
677 /*
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
678 * Sets the current directory (and drive) information.
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
679 * Parameters:
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
680 * path: A buffer containing the new path.
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
681 * Returns:
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
682 * -1 on error.
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
683 */
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
684 int API setpath(char *path)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
685 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
686 #if defined(__OS2__) || defined(__WIN32__)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
687 if(strlen(path) > 2)
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
688 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
689 if(path[1] == ':')
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
690 {
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
691 char drive = toupper(path[0]);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
692 _chdrive((drive - 'A')+1);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
693 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
694 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
695 #endif
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
696 return chdir(path);
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
697 }
1a210e2f214b Added a bunch of support routines I now own due to the settlement
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 485
diff changeset
698
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
699 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
700 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
701
647
f09977bc9b5c Fixed building with Visual Studio 2008.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 580
diff changeset
702 void _compat_free_locale(void)
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
703 {
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
704 if(locale_text)
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
705 {
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
706 int z;
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
707
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
708 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
709 {
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
710 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
711 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
712 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
713 free(locale_text);
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
714 locale_text = NULL;
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
715 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
716 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
717
1109
1c24949cf853 Fixed a configure warning about datarootdir. (Just ignoring it for now)
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 872
diff changeset
718 int _stripcrlf(char *buf)
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
719 {
1110
404b639f096b Minor typecast fixes for warnings reported by clang on Mac.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1109
diff changeset
720 int z, len = (int)strlen(buf);
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
721
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
722 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
723 {
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
724 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
725 {
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
726 buf[z] = 0;
1109
1c24949cf853 Fixed a configure warning about datarootdir. (Just ignoring it for now)
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 872
diff changeset
727 return 1;
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
728 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
729 }
1109
1c24949cf853 Fixed a configure warning about datarootdir. (Just ignoring it for now)
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 872
diff changeset
730 return 1;
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
731 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
732
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
733 /* 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
734 * 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
735 */
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
736 int API locale_init(char *filename, int my_locale)
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
737 {
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
738 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
739 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
740 int count = 0;
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
741
647
f09977bc9b5c Fixed building with Visual Studio 2008.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 580
diff changeset
742 _compat_free_locale();
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
743
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
744 if(fp)
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
745 {
1109
1c24949cf853 Fixed a configure warning about datarootdir. (Just ignoring it for now)
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 872
diff changeset
746 if(fgets(text, 1024, fp) && strncasecmp(text, "MESSAGES=", 9) == 0 && (count = atoi(&text[9])) > 0)
72
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 int current = -1;
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
749
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
750 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
751
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
752 while(!feof(fp))
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
753 {
1109
1c24949cf853 Fixed a configure warning about datarootdir. (Just ignoring it for now)
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 872
diff changeset
754 if(fgets(text, 1024, fp) && _stripcrlf(text) &&
1c24949cf853 Fixed a configure warning about datarootdir. (Just ignoring it for now)
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 872
diff changeset
755 strncasecmp(text, "LOCALE=", 7) == 0)
72
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 if(current > -1)
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 fclose(fp);
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
760 locale_count = count;
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
761 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
762 return 1;
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 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
765 current = 0;
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 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
768 {
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
769 /* 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
770 if(text[0])
73
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
771 {
1110
404b639f096b Minor typecast fixes for warnings reported by clang on Mac.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 1109
diff changeset
772 int x = 0, z, len = (int)strlen(text);
73
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
773
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
774 locale_text[current] = calloc(1, len + 1);
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
775
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
776 for(z=0;z<len;z++)
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
777 {
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
778 if(text[z] == '\\' && (text[z+1] == 'r' || text[z+1] == 'n'
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
779 || text[z+1] == '\"' || text[z+1] == '\''))
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
780 {
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
781 switch(text[z+1])
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
782 {
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
783 case 'r':
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
784 locale_text[current][x] = '\r';
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
785 break;
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
786 case 'n':
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
787 locale_text[current][x] = '\n';
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
788 break;
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
789 case '\"':
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
790 locale_text[current][x] = '\"';
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
791 break;
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
792 case '\'':
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
793 locale_text[current][x] = '\'';
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
794 break;
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
795 }
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
796 x++;
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
797 z++;
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
798 }
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
799 else
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
800 {
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
801 locale_text[current][x] = text[z];
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
802 x++;
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
803 }
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
804 }
2f339dd13496 Added C/C++ style escape sequence processing. And fixed a couple OS/2 and
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 72
diff changeset
805 }
72
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
806 current++;
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
807 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
808 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
809 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
810 fclose(fp);
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 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
813 {
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
814 locale_count = count;
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
815 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
816 return 1;
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 return 0;
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
819 }
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
820
ab77a22a2a36 Added localization APIs as well as some miscellaneous bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 62
diff changeset
821 /* Retrieve a localized string if available */
176
4e3407df0e38 Specify calling convention for compat functions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents: 172
diff changeset
822 char * API locale_string(char *default_text, int message)
72
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 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
825 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
826 return default_text;
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