blob: 21186cb21948d7fe0f193e116b07c77b29dd9827 [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
Cristyf6ff9ea2016-12-05 09:53:35 -05002 Copyright 1999-2017 ImageMagick Studio LLC, a non-profit organization
cristy3ed852e2009-09-05 21:47:34 +00003 dedicated to making software imaging solutions freely available.
cristy2c5fc272012-02-22 01:27:46 +00004
cristy3ed852e2009-09-05 21:47:34 +00005 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
cristy2c5fc272012-02-22 01:27:46 +00007
Cristyf19d4142017-04-24 11:34:30 -04008 https://www.imagemagick.org/script/license.php
cristy2c5fc272012-02-22 01:27:46 +00009
cristy3ed852e2009-09-05 21:47:34 +000010 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*/
Cristy83bceaa2016-06-03 20:39:35 -040018#ifndef MAGICKCORE_NT_BASE_H
19#define MAGICKCORE_NT_BASE_H
cristy3ed852e2009-09-05 21:47:34 +000020
cristy6398ec72013-11-28 02:00:27 +000021#include "MagickCore/exception.h"
22#include "MagickCore/geometry.h"
23
cristy3ed852e2009-09-05 21:47:34 +000024#if defined(__cplusplus) || defined(c_plusplus)
25extern "C" {
26#endif
27
cristy30603ff2011-10-07 00:43:07 +000028#if defined(MAGICKCORE_WINDOWS_SUPPORT)
cristy1db8adc2014-02-21 17:33:48 +000029
cristyd04eadc2014-02-21 18:36:36 +000030#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>
cristy9e2b6242014-03-25 11:49:41 +000040#include <malloc.h>
Cristy9d627d92016-04-24 15:13:15 -040041#include <sys/utime.h>
cristyd04eadc2014-02-21 18:36:36 +000042#if defined(_DEBUG) && !defined(__MINGW32__) && !defined(__MINGW64__)
43#include <crtdbg.h>
44#endif
45
cristy1db8adc2014-02-21 17:33:48 +000046#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_PAGESIZE 1
56#define _SC_PHYS_PAGES 2
57#define _SC_OPEN_MAX 3
58#if !defined(SSIZE_MAX)
59#define SSIZE_MAX 0x7fffffffL
60#endif
61
62/*
63 _MSC_VER values:
64 1100 MSVC 5.0
65 1200 MSVC 6.0
66 1300 MSVC 7.0 Visual C++ .NET 2002
67 1310 Visual c++ .NET 2003
68 1400 Visual C++ 2005
69 1500 Visual C++ 2008
Cristy36421ee2015-08-28 11:58:20 -040070 1600 Visual C++ 2010
71 1700 Visual C++ 2012
72 1800 Visual C++ 2013
73 1900 Visual C++ 2015
cristy1db8adc2014-02-21 17:33:48 +000074*/
75
76#if !defined(chsize)
77# if defined(__BORLANDC__)
78# define chsize(file,length) chsize(file,length)
79# else
80# define chsize(file,length) _chsize(file,length)
81# endif
82#endif
83
84#if !defined(access)
85#if defined(_VISUALC_) && (_MSC_VER >= 1400)
86# define access(path,mode) _access_s(path,mode)
87#endif
88#endif
89#if !defined(chdir)
90# define chdir _chdir
91#endif
92#if !defined(close)
93# define close _close
94#endif
95#if !defined(closedir)
96# define closedir(directory) NTCloseDirectory(directory)
97#endif
dirka35ec562016-06-05 21:21:34 +020098#define MAGICKCORE_HAVE_ERF
dirke591f8d2016-06-05 17:08:56 +020099#if defined(_VISUALC_) && (_MSC_VER < 1700)
100# define erf(x) NTErf(x)
101#endif
cristy1db8adc2014-02-21 17:33:48 +0000102#if !defined(fdopen)
103# define fdopen _fdopen
104#endif
105#if !defined(fileno)
106# define fileno _fileno
107#endif
108#if !defined(fseek) && !defined(__MINGW32__) && !defined(__MINGW64__)
109#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
Cristy087a0592015-08-30 16:40:35 -0400110 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
111 !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
cristy1db8adc2014-02-21 17:33:48 +0000112# define fseek _fseeki64
113#endif
114#endif
115#if !defined(fstat) && !defined(__BORLANDC__)
116#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
Cristy087a0592015-08-30 16:40:35 -0400117 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
118 !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
cristy1db8adc2014-02-21 17:33:48 +0000119# define fstat _fstati64
120#else
121# define fstat _fstat
122#endif
123#endif
124#if !defined(fsync)
125# define fsync _commit
126#endif
127#if !defined(ftell) && !defined(__MINGW32__) && !defined(__MINGW64__)
128#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
Cristy087a0592015-08-30 16:40:35 -0400129 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
130 !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
cristy1db8adc2014-02-21 17:33:48 +0000131# define ftell _ftelli64
132#endif
133#endif
134#if !defined(ftruncate)
135# define ftruncate(file,length) NTTruncateFile(file,length)
136#endif
137#if !defined(getcwd)
138# define getcwd _getcwd
139#endif
140#if !defined(getpid)
141# define getpid _getpid
142#endif
143#if !defined(hypot)
144# define hypot _hypot
145#endif
cristy1db8adc2014-02-21 17:33:48 +0000146#if !defined(isatty)
147# define isatty _isatty
148#endif
149#if !defined(locale_t)
150#define locale_t _locale_t
151#endif
152#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
Cristy087a0592015-08-30 16:40:35 -0400153 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
154 !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
cristy1b8a1312014-06-17 00:22:22 +0000155#if !defined(lseek)
cristy1db8adc2014-02-21 17:33:48 +0000156# define lseek _lseeki64
cristy1b8a1312014-06-17 00:22:22 +0000157#endif
cristy1db8adc2014-02-21 17:33:48 +0000158#else
cristy1b8a1312014-06-17 00:22:22 +0000159#if !defined(lseek)
cristy1db8adc2014-02-21 17:33:48 +0000160# define lseek _lseek
161#endif
cristy1b8a1312014-06-17 00:22:22 +0000162#endif
cristy1db8adc2014-02-21 17:33:48 +0000163#if !defined(MAGICKCORE_LTDL_DELEGATE)
164#if !defined(lt_dlclose)
165# define lt_dlclose(handle) NTCloseLibrary(handle)
166#endif
167#if !defined(lt_dlerror)
168# define lt_dlerror() NTGetLibraryError()
169#endif
170#if !defined(lt_dlexit)
171# define lt_dlexit() NTExitLibrary()
172#endif
173#if !defined(lt_dlinit)
174# define lt_dlinit() NTInitializeLibrary()
175#endif
176#if !defined(lt_dlopen)
177# define lt_dlopen(filename) NTOpenLibrary(filename)
178#endif
179#if !defined(lt_dlsetsearchpath)
180# define lt_dlsetsearchpath(path) NTSetSearchPath(path)
181#endif
182#if !defined(lt_dlsym)
183# define lt_dlsym(handle,name) NTGetLibrarySymbol(handle,name)
184#endif
185#endif
186#if !defined(mkdir)
187# define mkdir _mkdir
188#endif
189#if !defined(mmap)
190# define mmap(address,length,protection,access,file,offset) \
191 NTMapMemory(address,length,protection,access,file,offset)
192#endif
193#if !defined(msync)
194# define msync(address,length,flags) NTSyncMemory(address,length,flags)
195#endif
196#if !defined(munmap)
197# define munmap(address,length) NTUnmapMemory(address,length)
198#endif
199#if !defined(opendir)
200# define opendir(directory) NTOpenDirectory(directory)
201#endif
202#if !defined(open)
203# define open _open
204#endif
205#if !defined(pclose)
206# define pclose _pclose
207#endif
208#if !defined(popen)
209# define popen _popen
210#endif
211#if !defined(fprintf_l)
212#define fprintf_l _fprintf_s_l
213#endif
214#if !defined(read)
dirkb0d783f2014-08-31 10:48:05 +0000215# define read(fd,buffer,count) _read(fd,buffer,(unsigned int) count)
cristy1db8adc2014-02-21 17:33:48 +0000216#endif
217#if !defined(readdir)
218# define readdir(directory) NTReadDirectory(directory)
219#endif
220#if !defined(seekdir)
221# define seekdir(directory,offset) NTSeekDirectory(directory,offset)
222#endif
223#if !defined(setmode)
224# define setmode _setmode
225#endif
226#if !defined(spawnvp)
227# define spawnvp _spawnvp
228#endif
229#if !defined(strtod_l)
230#define strtod_l _strtod_l
231#endif
232#if !defined(stat) && !defined(__BORLANDC__)
233#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
Cristy087a0592015-08-30 16:40:35 -0400234 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
235 !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
cristy1db8adc2014-02-21 17:33:48 +0000236# define stat _stati64
237#else
238# define stat _stat
239#endif
240#endif
241#if !defined(strcasecmp)
242# define strcasecmp _stricmp
243#endif
244#if !defined(strncasecmp)
245# define strncasecmp _strnicmp
246#endif
247#if !defined(sysconf)
248# define sysconf(name) NTSystemConfiguration(name)
249#endif
250#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
Cristy087a0592015-08-30 16:40:35 -0400251 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
252 !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
cristy1db8adc2014-02-21 17:33:48 +0000253# define tell _telli64
254#else
255# define tell _tell
256#endif
257#if !defined(telldir)
258# define telldir(directory) NTTellDirectory(directory)
259#endif
260#if !defined(tempnam)
261# define tempnam _tempnam_s
262#endif
cristyc3306092015-02-28 22:57:28 +0000263#if !defined(umask)
264# define umask _umask
265#endif
cristy4d1b5d42015-02-22 00:30:57 +0000266#if !defined(unlink)
267# define unlink _unlink
268#endif
Cristy4bb3ba92016-04-24 14:28:07 -0400269#if !defined(utime)
270# define utime _utime
271#endif
cristy1db8adc2014-02-21 17:33:48 +0000272#if !defined(vfprintf_l)
273#define vfprintf_l _vfprintf_l
274#endif
275#if !defined(vsnprintf)
276#if !defined(_MSC_VER) || (defined(_MSC_VER) && _MSC_VER < 1500)
277#define vsnprintf _vsnprintf
278#endif
279#endif
280#if !defined(vsnprintf_l)
281#define vsnprintf_l _vsnprintf_l
282#endif
283#if !defined(write)
dirkb0d783f2014-08-31 10:48:05 +0000284# define write(fd,buffer,count) _write(fd,buffer,(unsigned int) count)
cristy1db8adc2014-02-21 17:33:48 +0000285#endif
286#if !defined(wstat) && !defined(__BORLANDC__)
287#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
Cristy087a0592015-08-30 16:40:35 -0400288 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && \
289 !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ < 0x800))
cristy1db8adc2014-02-21 17:33:48 +0000290# define wstat _wstati64
291#else
292# define wstat _wstat
293#endif
294#endif
295
cristy1db8adc2014-02-21 17:33:48 +0000296#if defined(__BORLANDC__)
297#undef _O_RANDOM
298#define _O_RANDOM 0
299#undef _O_SEQUENTIAL
300#define _O_SEQUENTIAL 0
301#undef _O_SHORT_LIVED
302#define _O_SHORT_LIVED 0
303#undef _O_TEMPORARY
304#define _O_TEMPORARY 0
305#endif
306
307#undef gettimeofday
308
cristy2c5fc272012-02-22 01:27:46 +0000309typedef struct _GhostInfo
310 GhostInfo_;
cristydaeba5e2011-10-13 17:32:44 +0000311
312extern MagickExport char
313 **NTArgvToUTF8(const int argc,wchar_t **);
314
cristy2c5fc272012-02-22 01:27:46 +0000315extern MagickExport const GhostInfo_
cristydaeba5e2011-10-13 17:32:44 +0000316 *NTGhostscriptDLLVectors(void);
317
cristy3ed852e2009-09-05 21:47:34 +0000318extern MagickExport void
cristy417d8452011-10-13 17:09:49 +0000319 NTErrorHandler(const ExceptionType,const char *,const char *),
dirk27496b92015-11-23 21:04:09 +0100320 NTGhostscriptUnLoadDLL(void),
cristy417d8452011-10-13 17:09:49 +0000321 NTWarningHandler(const ExceptionType,const char *,const char *);
cristy2c5fc272012-02-22 01:27:46 +0000322#endif
cristy3ed852e2009-09-05 21:47:34 +0000323
324#if defined(__cplusplus) || defined(c_plusplus)
325}
cristy2c5fc272012-02-22 01:27:46 +0000326#endif
cristy3ed852e2009-09-05 21:47:34 +0000327
cristy2c5fc272012-02-22 01:27:46 +0000328#endif