• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2   Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization
3   dedicated to making software imaging solutions freely available.
4 
5   You may not use this file except in compliance with the License.  You may
6   obtain a copy of the License at
7 
8     https://imagemagick.org/script/license.php
9 
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15 
16   MagickCore Windows NT utility methods.
17 */
18 #ifndef MAGICKCORE_NT_BASE_H
19 #define MAGICKCORE_NT_BASE_H
20 
21 #include "MagickCore/exception.h"
22 #include "MagickCore/geometry.h"
23 
24 #if defined(__cplusplus) || defined(c_plusplus)
25 extern "C" {
26 #endif
27 
28 #if defined(MAGICKCORE_WINDOWS_SUPPORT)
29 
30 #define WIN32_LEAN_AND_MEAN
31 #define VC_EXTRALEAN
32 #define _CRT_SECURE_NO_DEPRECATE  1
33 #include <windows.h>
34 #include <wchar.h>
35 #include <winuser.h>
36 #include <wingdi.h>
37 #include <io.h>
38 #include <process.h>
39 #include <errno.h>
40 #include <malloc.h>
41 #include <sys/utime.h>
42 #if defined(_DEBUG) && !defined(__MINGW32__)
43 #include <crtdbg.h>
44 #endif
45 
46 #define PROT_READ  0x01
47 #define PROT_WRITE  0x02
48 #define MAP_SHARED  0x01
49 #define MAP_PRIVATE  0x02
50 #define MAP_ANONYMOUS  0x20
51 #define F_OK 0
52 #define R_OK 4
53 #define W_OK 2
54 #define RW_OK 6
55 #define _SC_PAGE_SIZE 1
56 #define _SC_PHYS_PAGES 2
57 #define _SC_OPEN_MAX 3
58 #if !defined(SSIZE_MAX)
59 # ifdef _WIN64
60 #   define SSIZE_MAX LLONG_MAX
61 # else
62 #   define SSIZE_MAX LONG_MAX
63 # endif
64 #endif
65 
66 /*
67   _MSC_VER values:
68     1100 MSVC 5.0
69     1200 MSVC 6.0
70     1300 MSVC 7.0 Visual C++ .NET 2002
71     1310 Visual c++ .NET 2003
72     1400 Visual C++ 2005
73     1500 Visual C++ 2008
74     1600 Visual C++ 2010
75     1700 Visual C++ 2012
76     1800 Visual C++ 2013
77     1900 Visual C++ 2015
78 */
79 
80 #if !defined(chsize)
81 # if defined(__BORLANDC__)
82 #   define chsize(file,length)  chsize(file,length)
83 # else
84 #   define chsize(file,length)  _chsize(file,length)
85 # endif
86 #endif
87 
88 #if !defined(access)
89 #if defined(_VISUALC_) && (_MSC_VER >= 1400)
90 #  define access(path,mode)  _access_s(path,mode)
91 #endif
92 #endif
93 #if !defined(chdir)
94 #  define chdir  _chdir
95 #endif
96 #if !defined(close)
97 #  define close  _close
98 #endif
99 #if !defined(closedir)
100 #  define closedir(directory)  NTCloseDirectory(directory)
101 #endif
102 #define MAGICKCORE_HAVE_ERF
103 #if defined(_VISUALC_) && (_MSC_VER < 1700)
104 #  define erf(x)  NTErf(x)
105 #endif
106 #if !defined(fdopen)
107 #  define fdopen  _fdopen
108 #endif
109 #if !defined(fileno)
110 #  define fileno  _fileno
111 #endif
112 #if !defined(freelocale)
113 #  define freelocale  _free_locale
114 #endif
115 #if !defined(fseek) && !defined(__MINGW32__)
116 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && \
117   !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
118   !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
119 #  define fseek  _fseeki64
120 #endif
121 #endif
122 #if !defined(fstat) && !defined(__BORLANDC__)
123 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && \
124   !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
125   !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
126 #  define fstat  _fstati64
127 #else
128 #  define fstat  _fstat
129 #endif
130 #endif
131 #if !defined(fsync)
132 #  define fsync  _commit
133 #endif
134 #if !defined(ftell) && !defined(__MINGW32__)
135 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && \
136   !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
137   !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
138 #  define ftell  _ftelli64
139 #endif
140 #endif
141 #if !defined(ftruncate)
142 #  define ftruncate(file,length)  NTTruncateFile(file,length)
143 #endif
144 #if !defined(getcwd)
145 #  define getcwd  _getcwd
146 #endif
147 #if !defined(getpid)
148 #  define getpid  _getpid
149 #endif
150 #if !defined(hypot)
151 #  define hypot  _hypot
152 #endif
153 #if !defined(isatty)
154 #  define isatty  _isatty
155 #endif
156 #if !defined(locale_t)
157 #define locale_t _locale_t
158 #endif
159 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && \
160   !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
161   !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
162 #if !defined(lseek)
163 #  define lseek  _lseeki64
164 #endif
165 #else
166 #if !defined(lseek)
167 #  define lseek  _lseek
168 #endif
169 #endif
170 #if !defined(MAGICKCORE_LTDL_DELEGATE)
171 #if !defined(lt_dlclose)
172 #  define lt_dlclose(handle)  NTCloseLibrary(handle)
173 #endif
174 #if !defined(lt_dlerror)
175 #  define lt_dlerror()  NTGetLibraryError()
176 #endif
177 #if !defined(lt_dlexit)
178 #  define lt_dlexit()  NTExitLibrary()
179 #endif
180 #if !defined(lt_dlinit)
181 #  define lt_dlinit()  NTInitializeLibrary()
182 #endif
183 #if !defined(lt_dlopen)
184 #  define lt_dlopen(filename)  NTOpenLibrary(filename)
185 #endif
186 #if !defined(lt_dlsetsearchpath)
187 #  define lt_dlsetsearchpath(path)  NTSetSearchPath(path)
188 #endif
189 #if !defined(lt_dlsym)
190 #  define lt_dlsym(handle,name)  NTGetLibrarySymbol(handle,name)
191 #endif
192 #endif
193 #if !defined(mkdir)
194 #  define mkdir  _mkdir
195 #endif
196 #if !defined(mmap)
197 #  define mmap(address,length,protection,access,file,offset) \
198   NTMapMemory(address,length,protection,access,file,offset)
199 #endif
200 #if !defined(munmap)
201 #  define munmap(address,length)  NTUnmapMemory(address,length)
202 #endif
203 #if !defined(opendir)
204 #  define opendir(directory)  NTOpenDirectory(directory)
205 #endif
206 #if !defined(open)
207 #  define open  _open
208 #endif
209 #if !defined(pclose)
210 #  define pclose  _pclose
211 #endif
212 #if !defined(popen)
213 #  define popen  _popen
214 #endif
215 #if !defined(fprintf_l)
216 #define fprintf_l  _fprintf_s_l
217 #endif
218 #if !defined(read)
219 #  define read(fd,buffer,count)  _read(fd,buffer,(unsigned int) count)
220 #endif
221 #if !defined(readdir)
222 #  define readdir(directory)  NTReadDirectory(directory)
223 #endif
224 #if !defined(setmode)
225 #  define setmode  _setmode
226 #endif
227 #if !defined(spawnvp)
228 #  define spawnvp  _spawnvp
229 #endif
230 #if !defined(strtod_l)
231 #define strtod_l  _strtod_l
232 #endif
233 #if !defined(stat) && !defined(__BORLANDC__)
234 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && \
235   !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
236   !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
237 #  define stat  _stati64
238 #else
239 #  define stat  _stat
240 #endif
241 #endif
242 #if !defined(strcasecmp)
243 #  define strcasecmp  _stricmp
244 #endif
245 #if !defined(strncasecmp)
246 #  define strncasecmp  _strnicmp
247 #endif
248 #if !defined(sysconf)
249 #  define sysconf(name)  NTSystemConfiguration(name)
250 #endif
251 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && \
252   !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
253   !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
254 #  define tell  _telli64
255 #else
256 #  define tell  _tell
257 #endif
258 #if !defined(tempnam)
259 #  define tempnam  _tempnam_s
260 #endif
261 #if !defined(tolower_l)
262 #define tolower_l  _tolower_l
263 #endif
264 #if !defined(toupper_l)
265 #define toupper_l  _toupper_l
266 #endif
267 #if !defined(umask)
268 #  define umask  _umask
269 #endif
270 #if !defined(unlink)
271 #  define unlink  _unlink
272 #endif
273 #if !defined(utime)
274 #  define utime(filename,time)  _utime(filename,(struct _utimbuf*) time)
275 #endif
276 #if !defined(vfprintf_l)
277 #define vfprintf_l  _vfprintf_l
278 #endif
279 #if !defined(vsnprintf)
280 #if !defined(_MSC_VER) || (defined(_MSC_VER) && _MSC_VER < 1500)
281 #define vsnprintf _vsnprintf
282 #endif
283 #endif
284 #if !defined(vsnprintf_l)
285 #define vsnprintf_l  _vsnprintf_l
286 #endif
287 #if !defined(write)
288 #  define write(fd,buffer,count)  _write(fd,buffer,(unsigned int) count)
289 #endif
290 #if !defined(wstat) && !defined(__BORLANDC__)
291 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && \
292   !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
293   !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
294 #  define wstat  _wstati64
295 #else
296 #  define wstat  _wstat
297 #endif
298 #endif
299 
300 #if defined(__BORLANDC__)
301 #undef _O_RANDOM
302 #define _O_RANDOM 0
303 #undef _O_SEQUENTIAL
304 #define _O_SEQUENTIAL 0
305 #undef _O_SHORT_LIVED
306 #define _O_SHORT_LIVED 0
307 #undef _O_TEMPORARY
308 #define _O_TEMPORARY 0
309 #endif
310 
311 #undef gettimeofday
312 
313 typedef struct _GhostInfo
314   GhostInfo_;
315 
316 extern MagickExport char
317   **NTArgvToUTF8(const int argc,wchar_t **);
318 
319 extern MagickExport const GhostInfo_
320   *NTGhostscriptDLLVectors(void);
321 
322 extern MagickExport void
323   NTErrorHandler(const ExceptionType,const char *,const char *),
324   NTGhostscriptUnLoadDLL(void),
325   NTWarningHandler(const ExceptionType,const char *,const char *);
326 
327 #endif
328 
329 #if defined(__cplusplus) || defined(c_plusplus)
330 }
331 #endif
332 
333 #endif
334