blob: 2848fb1ce2dd2b416154cbcf87ff06a30d52d9e4 [file] [log] [blame]
cristyd1dd6e42011-09-04 01:46:08 +00001/*
2 Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
cristy99d6fa02011-09-23 13:09:30 +00004
cristyd1dd6e42011-09-04 01:46:08 +00005 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
cristy99d6fa02011-09-23 13:09:30 +00007
cristyd1dd6e42011-09-04 01:46:08 +00008 http://www.imagemagick.org/script/license.php
cristy99d6fa02011-09-23 13:09:30 +00009
cristyd1dd6e42011-09-04 01:46:08 +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 private utility methods.
17*/
18#ifndef _MAGICKCORE_UTILITY_PRIVATE_H
19#define _MAGICKCORE_UTILITY_PRIVATE_H
20
21#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
25extern MagickPrivate char
26 **GetPathComponents(const char *,size_t *),
27 **ListFiles(const char *,const char *,size_t *);
28
29extern MagickPrivate MagickBooleanType
30 GetExecutionPath(char *,const size_t);
31
32extern MagickPrivate ssize_t
33 GetMagickPageSize(void);
34
35extern MagickPrivate void
36 ChopPathComponents(char *,const size_t),
37 ExpandFilename(char *),
38 MagickDelay(const MagickSizeType);
39
cristy99d6fa02011-09-23 13:09:30 +000040/*
41 Windows UTF8 compatibility methods.
42*/
43
44static inline int access_utf8(const char *path,int mode)
45{
46#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
47 return(access(path,mode));
48#else
49 int
50 count,
51 status;
52
53 WCHAR
54 *path_wide;
55
56 path_wide=(WCHAR *) NULL;
57 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
58 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
59 if (path_wide == (WCHAR *) NULL)
60 return(-1);
61 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
62 status=_waccess(path_wide,mode);
63 path_wide=RelinquishMagickMemory(path_wide);
64 return(status);
65#endif
66}
67
68static inline FILE *fopen_utf8(const char *path,const char *mode)
69{
70#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
71 return(fopen(path,mode));
72#else
73 FILE
74 *file;
75
76 int
77 status;
78
79 WCHAR
80 *mode_wide,
81 *path_wide;
82
83 path_wide=(WCHAR *) NULL;
84 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
85 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
86 if (path_wide == (WCHAR *) NULL)
87 return(-1);
88 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
89 count=MultiByteToWideChar(CP_UTF8,0,mode,-1,NULL,0);
90 mode_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*mode_wide));
91 if (mode_wide == (WCHAR *) NULL)
92 {
93 path_wide=RelinquishMagickMemory(path_wide);
94 return(-1);
95 }
96 count=MultiByteToWideChar(CP_UTF8,0,mode,-1,mode_wide,count);
97 file=_wfopen(path_wide,mode_width);
98 mode_wide=RelinquishMagickMemory(mode_wide);
99 path_wide=RelinquishMagickMemory(path_wide);
100 return(file);
101#endif
102}
103
104static inline int open_utf8(const char *path,int flags,int mode)
105{
106#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
107 return(open(path,flags,mode));
108#else
109 int
110 count,
111 status;
112
113 WCHAR
114 *path_wide;
115
116 path_wide=(WCHAR *) NULL;
117 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
118 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
119 if (path_wide == (WCHAR *) NULL)
120 return(-1);
121 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
122 status=_wopen(path_wide,flags,mode);
123 path_wide=RelinquishMagickMemory(path_wide);
124 return(status);
125#endif
126}
127
128static inline int remove_utf8(const char *path)
129{
130#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
131 return(unlink(path));
132#else
133 int
134 count,
135 status;
136
137 WCHAR
138 *path_wide;
139
140 path_wide=(WCHAR *) NULL;
141 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
142 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
143 if (path_wide == (WCHAR *) NULL)
144 return(-1);
145 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
146 status=_wremove(path_wide);
147 path_wide=RelinquishMagickMemory(path_wide);
148 return(status);
149#endif
150}
151
152static inline int stat_utf8(const char *path,struct stat *attributes)
153{
154#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
155 return(stat(path,attributes));
156#else
157 int
158 count,
159 status;
160
161 WCHAR
162 *path_wide;
163
164 path_wide=(WCHAR *) NULL;
165 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
166 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
167 if (path_wide == (WCHAR *) NULL)
168 return(-1);
169 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
170 status=_wstat(path_wide,attributes);
171 path_wide=RelinquishMagickMemory(path_wide);
172 return(status);
173#endif
174}
175
cristyd1dd6e42011-09-04 01:46:08 +0000176#if defined(__cplusplus) || defined(c_plusplus)
177}
178#endif
179
180#endif