blob: 77f495d7caf2b3ce45b1474611ec7e4a89857761 [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
cristy7e41fe82010-12-04 23:12:08 +00002 Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization
cristy3ed852e2009-09-05 21:47:34 +00003 dedicated to making software imaging solutions freely available.
4
5 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
7
8 http://www.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#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
25#include "magick/delegate.h"
26#include "magick/delegate-private.h"
27#include "magick/exception.h"
28
29#define WIN32_LEAN_AND_MEAN
30#define VC_EXTRALEAN
31#define _CRT_SECURE_NO_DEPRECATE 1
32#include <windows.h>
33#include <wchar.h>
34#include <winuser.h>
35#include <wingdi.h>
36#include <io.h>
37#include <process.h>
38#include <errno.h>
39#if defined(_DEBUG) && !defined(__MINGW32__)
40#include <crtdbg.h>
41#endif
42
43#define PROT_READ 0x01
44#define PROT_WRITE 0x02
45#define MAP_SHARED 0x01
46#define MAP_PRIVATE 0x02
47#define MAP_ANONYMOUS 0x20
48#define F_OK 0
49#define R_OK 4
50#define W_OK 2
51#define RW_OK 6
52#define _SC_PAGESIZE 1
53#define _SC_PHYS_PAGES 2
54#define _SC_OPEN_MAX 3
55#if !defined(SSIZE_MAX)
56#define SSIZE_MAX 0x7fffffffL
57#endif
58
59/*
60 _MSC_VER values:
61 1100 MSVC 5.0
62 1200 MSVC 6.0
63 1300 MSVC 7.0 Visual C++ .NET 2002
64 1310 Visual c++ .NET 2003
65 1400 Visual C++ 2005
66 1500 Visual C++ 2008
67*/
68
69#if !defined(chsize)
70# if defined(__BORLANDC__)
71# define chsize(file,length) chsize(file,length)
72# else
73# define chsize(file,length) _chsize(file,length)
74# endif
75#endif
76
77#if !defined(access)
78# define access(path,mode) _access(path,mode)
79#endif
80#if !defined(chdir)
81# define chdir _chdir
82#endif
83#if !defined(close)
84# define close _close
85#endif
86#if !defined(closedir)
87# define closedir(directory) NTCloseDirectory(directory)
88#endif
89#if !defined(fdopen)
90# define fdopen _fdopen
91#endif
92#if !defined(fileno)
93# define fileno _fileno
94#endif
cristy32be6cf2011-03-29 14:53:14 +000095#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
96 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
cristy7f317702011-02-18 20:40:28 +000097# define fseek _fseeki64
cristy3ed852e2009-09-05 21:47:34 +000098#endif
99#if !defined(fstat) && !defined(__BORLANDC__)
cristy0157aea2010-04-24 21:12:18 +0000100#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
cristy3ed852e2009-09-05 21:47:34 +0000101 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
102# define fstat _fstati64
103#else
104# define fstat _fstat
105#endif
106#endif
107#if !defined(fsync)
108# define fsync _commit
109#endif
cristy32be6cf2011-03-29 14:53:14 +0000110#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
111 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
cristy7f317702011-02-18 20:40:28 +0000112# define ftell _ftelli64
cristy3ed852e2009-09-05 21:47:34 +0000113#endif
114#if !defined(ftruncate)
115# define ftruncate(file,length) NTTruncateFile(file,length)
116#endif
117#if !defined(getcwd)
118# define getcwd _getcwd
119#endif
120#if !defined(getpid)
121# define getpid _getpid
122#endif
123#if !defined(hypot)
124# define hypot _hypot
125#endif
126#if !defined(inline)
127# define inline __inline
128#endif
129#if !defined(isatty)
130# define isatty _isatty
131#endif
cristyecfd7242011-02-18 20:23:57 +0000132#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
133 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
134# define lseek _lseeki64
135#endif
cristy3ed852e2009-09-05 21:47:34 +0000136#if !defined(MAGICKCORE_LTDL_DELEGATE)
137#if !defined(lt_dlclose)
138# define lt_dlclose(handle) NTCloseLibrary(handle)
139#endif
140#if !defined(lt_dlerror)
141# define lt_dlerror() NTGetLibraryError()
142#endif
143#if !defined(lt_dlexit)
144# define lt_dlexit() NTExitLibrary()
145#endif
146#if !defined(lt_dlinit)
147# define lt_dlinit() NTInitializeLibrary()
148#endif
149#if !defined(lt_dlopen)
150# define lt_dlopen(filename) NTOpenLibrary(filename)
151#endif
152#if !defined(lt_dlsetsearchpath)
153# define lt_dlsetsearchpath(path) NTSetSearchPath(path)
154#endif
155#if !defined(lt_dlsym)
156# define lt_dlsym(handle,name) NTGetLibrarySymbol(handle,name)
157#endif
158#endif
159#if !defined(mkdir)
160# define mkdir _mkdir
161#endif
162#if !defined(mmap)
163# define mmap(address,length,protection,access,file,offset) \
164 NTMapMemory(address,length,protection,access,file,offset)
165#endif
166#if !defined(msync)
167# define msync(address,length,flags) NTSyncMemory(address,length,flags)
168#endif
169#if !defined(munmap)
170# define munmap(address,length) NTUnmapMemory(address,length)
171#endif
172#if !defined(opendir)
173# define opendir(directory) NTOpenDirectory(directory)
174#endif
175#if !defined(open)
176# define open _open
177#endif
178#if !defined(pclose)
179# define pclose _pclose
180#endif
181#if !defined(popen)
182# define popen _popen
183#endif
184#if !defined(read)
185# define read _read
186#endif
187#if !defined(readdir)
188# define readdir(directory) NTReadDirectory(directory)
189#endif
190#if !defined(seekdir)
191# define seekdir(directory,offset) NTSeekDirectory(directory,offset)
192#endif
193#if !defined(setmode)
194# define setmode _setmode
195#endif
cristy98e91bd2010-01-12 01:11:42 +0000196#if !defined(spawnvp)
197# define spawnvp _spawnvp
198#endif
cristy3ed852e2009-09-05 21:47:34 +0000199#if !defined(stat) && !defined(__BORLANDC__)
cristy0157aea2010-04-24 21:12:18 +0000200#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
cristy3ed852e2009-09-05 21:47:34 +0000201 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
202# define stat _stati64
203#else
204# define stat _stat
205#endif
206#endif
207#if !defined(strcasecmp)
208# define strcasecmp _strcmpi
209#endif
210#if !defined(strncasecmp)
211# define strncasecmp _strnicmp
212#endif
213#if !defined(sysconf)
214# define sysconf(name) NTSystemConfiguration(name)
215#endif
cristyecfd7242011-02-18 20:23:57 +0000216#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
217 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
218# define tell _telli64
219#endif
cristy3ed852e2009-09-05 21:47:34 +0000220#if !defined(telldir)
221# define telldir(directory) NTTellDirectory(directory)
222#endif
223#if !defined(tempnam)
224# define tempnam _tempnam
225#endif
226#if !defined(vsnprintf)
227#if !defined(_MSC_VER) || (defined(_MSC_VER) && (_MSC_VER < 1500))
cristy32be6cf2011-03-29 14:53:14 +0000228#define vsnprintf _vsnprintf
cristy3ed852e2009-09-05 21:47:34 +0000229#endif
230#endif
231#if !defined(write)
232# define write _write
233#endif
234#if !defined(wstat) && !defined(__BORLANDC__)
cristy0157aea2010-04-24 21:12:18 +0000235#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
cristy3ed852e2009-09-05 21:47:34 +0000236 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
237# define wstat _wstati64
238#else
239# define wstat _wstat
240#endif
241#endif
242
cristy0157aea2010-04-24 21:12:18 +0000243#if defined(_MT) && defined(MAGICKCORE_WINDOWS_SUPPORT)
cristy3ed852e2009-09-05 21:47:34 +0000244# define SAFE_GLOBAL __declspec(thread)
245#else
246# define SAFE_GLOBAL
247#endif
248
249#if defined(__BORLANDC__)
250#undef _O_RANDOM
251#define _O_RANDOM 0
252#undef _O_SEQUENTIAL
253#define _O_SEQUENTIAL 0
254#undef _O_SHORT_LIVED
255#define _O_SHORT_LIVED 0
256#undef _O_TEMPORARY
257#define _O_TEMPORARY 0
258#endif
259
260#if !defined(XS_VERSION)
261struct dirent
262{
263 char
264 d_name[2048];
265
266 int
267 d_namlen;
268};
269
270typedef struct _DIR
271{
272 HANDLE
273 hSearch;
274
275 WIN32_FIND_DATA
276 Win32FindData;
277
278 BOOL
279 firsttime;
280
281 struct dirent
282 file_info;
283} DIR;
284
285typedef struct _NTMEMORYSTATUSEX
286{
287 DWORD
288 dwLength,
289 dwMemoryLoad;
290
291 DWORDLONG
292 ullTotalPhys,
293 ullAvailPhys,
294 ullTotalPageFile,
295 ullAvailPageFile,
296 ullTotalVirtual,
297 ullAvailVirtual,
298 ullAvailExtendedVirtual;
299} NTMEMORYSTATUSEX;
300
cristy9acb8642010-04-24 17:12:04 +0000301#if !defined(__MINGW32__)
cristy6d71f8d2010-02-28 00:46:02 +0000302struct timezone
303{
304 int
305 tz_minuteswest,
306 tz_dsttime;
307};
cristy9acb8642010-04-24 17:12:04 +0000308#endif
cristy6d71f8d2010-02-28 00:46:02 +0000309
cristy3ed852e2009-09-05 21:47:34 +0000310typedef UINT
311 (CALLBACK *LPFNDLLFUNC1)(DWORD,UINT);
312
313typedef UINT
314 (CALLBACK *LPFNDLLFUNC2)(NTMEMORYSTATUSEX *);
315
316#endif
317
cristy3ed852e2009-09-05 21:47:34 +0000318#if defined(MAGICKCORE_BZLIB_DELEGATE)
319# if defined(_WIN32)
320# define BZ_IMPORT 1
321# endif
322#endif
323
324extern MagickExport char
325 *NTGetLastError(void);
326
cristydefb3f02009-09-10 02:18:35 +0000327extern MagickExport const GhostInfo
cristy3ed852e2009-09-05 21:47:34 +0000328 *NTGhostscriptDLLVectors(void);
329
330#if !defined(MAGICKCORE_LTDL_DELEGATE)
331extern MagickExport const char
332 *NTGetLibraryError(void);
333#endif
334
335#if !defined(XS_VERSION)
336extern MagickExport const char
337 *NTGetLibraryError(void);
338
339extern MagickExport DIR
340 *NTOpenDirectory(const char *);
341
342extern MagickExport double
343 NTElapsedTime(void),
344 NTUserTime(void);
345
346extern MagickExport int
347 Exit(int),
cristy807fd932010-04-24 03:38:46 +0000348#if !defined(__MINGW32__)
cristy6d71f8d2010-02-28 00:46:02 +0000349 gettimeofday(struct timeval *,struct timezone *),
cristy807fd932010-04-24 03:38:46 +0000350#endif
cristy3ed852e2009-09-05 21:47:34 +0000351 IsWindows95(),
352 NTCloseDirectory(DIR *),
353 NTCloseLibrary(void *),
354 NTControlHandler(void),
355 NTExitLibrary(void),
356 NTTruncateFile(int,off_t),
357 NTGhostscriptDLL(char *,int),
358 NTGhostscriptEXE(char *,int),
359 NTGhostscriptFonts(char *,int),
360 NTGhostscriptLoadDLL(void),
361 NTGhostscriptUnLoadDLL(void),
362 NTInitializeLibrary(void),
363 NTSetSearchPath(const char *),
364 NTSyncMemory(void *,size_t,int),
365 NTUnmapMemory(void *,size_t),
366 NTSystemCommand(const char *);
367
cristybb503372010-05-27 20:51:26 +0000368extern MagickExport ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000369 NTSystemConfiguration(int),
370 NTTellDirectory(DIR *);
371
372extern MagickExport MagickBooleanType
373 NTGatherRandomData(const size_t,unsigned char *),
374 NTGetExecutionPath(char *,const size_t),
375 NTGetModulePath(const char *,char *),
376 NTReportEvent(const char *,const MagickBooleanType),
377 NTReportException(const char *,const MagickBooleanType);
378
379extern MagickExport struct dirent
380 *NTReadDirectory(DIR *);
381
382extern MagickExport unsigned char
383 *NTRegistryKeyLookup(const char *),
384 *NTResourceToBlob(const char *);
385
386extern MagickExport void
387 NTErrorHandler(const ExceptionType,const char *,const char *),
388 *NTGetLibrarySymbol(void *,const char *),
389 *NTMapMemory(char *,size_t,int,int,int,MagickOffsetType),
390 *NTOpenLibrary(const char *),
cristybb503372010-05-27 20:51:26 +0000391 NTSeekDirectory(DIR *,ssize_t),
cristy3ed852e2009-09-05 21:47:34 +0000392 NTWarningHandler(const ExceptionType,const char *,const char *);
393
394#endif /* !XS_VERSION */
395
396#if defined(__cplusplus) || defined(c_plusplus)
397}
398#endif /* !C++ */
399
400#endif /* !_MAGICKCORE_NT_BASE_H */