2 Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
5 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
8 http://www.imagemagick.org/script/license.php
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.
16 MagickCore private utility methods.
18 #ifndef _MAGICKCORE_UTILITY_PRIVATE_H
19 #define _MAGICKCORE_UTILITY_PRIVATE_H
21 #if defined(__cplusplus) || defined(c_plusplus)
25 #include "MagickCore/memory_.h"
26 #include "MagickCore/nt-feature.h"
28 extern MagickPrivate char
29 **GetPathComponents(const char *,size_t *),
30 **ListFiles(const char *,const char *,size_t *);
32 extern MagickPrivate MagickBooleanType
33 GetExecutionPath(char *,const size_t);
35 extern MagickPrivate ssize_t
36 GetMagickPageSize(void);
38 extern MagickPrivate void
39 ChopPathComponents(char *,const size_t),
40 ExpandFilename(char *),
41 MagickDelay(const MagickSizeType);
44 Windows UTF8 compatibility methods.
47 static inline int access_utf8(const char *path,int mode)
49 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
50 return(access(path,mode));
59 path_wide=(WCHAR *) NULL;
60 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
61 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
62 if (path_wide == (WCHAR *) NULL)
64 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
65 status=_waccess(path_wide,mode);
66 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
71 static inline FILE *fopen_utf8(const char *path,const char *mode)
73 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
74 return(fopen(path,mode));
86 path_wide=(WCHAR *) NULL;
87 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
88 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
89 if (path_wide == (WCHAR *) NULL)
90 return((FILE *) NULL);
91 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
92 count=MultiByteToWideChar(CP_UTF8,0,mode,-1,NULL,0);
93 mode_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*mode_wide));
94 if (mode_wide == (WCHAR *) NULL)
96 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
97 return((FILE *) NULL);
99 count=MultiByteToWideChar(CP_UTF8,0,mode,-1,mode_wide,count);
100 file=_wfopen(path_wide,mode_wide);
101 mode_wide=(WCHAR *) RelinquishMagickMemory(mode_wide);
102 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
107 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__CYGWIN__) && !defined(__MINGW32__)
112 static inline int open_utf8(const char *path,int flags,mode_t mode)
114 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
115 return(open(path,flags,mode));
124 path_wide=(WCHAR *) NULL;
125 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
126 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
127 if (path_wide == (WCHAR *) NULL)
129 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
130 status=_wopen(path_wide,flags,mode);
131 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
136 static inline FILE *popen_utf8(const char *command,const char *type)
138 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
139 return(popen(command,type));
151 command_wide=(WCHAR *) NULL;
152 count=MultiByteToWideChar(CP_UTF8,0,command,-1,NULL,0);
153 command_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*command_wide));
154 if (command_wide == (WCHAR *) NULL)
155 return((FILE *) NULL);
156 count=MultiByteToWideChar(CP_UTF8,0,command,-1,command_wide,count);
157 count=MultiByteToWideChar(CP_UTF8,0,type,-1,NULL,0);
158 type_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*type_wide));
159 if (type_wide == (WCHAR *) NULL)
161 command_wide=(WCHAR *) RelinquishMagickMemory(command_wide);
162 return((FILE *) NULL);
164 count=MultiByteToWideChar(CP_UTF8,0,type,-1,type_wide,count);
165 file=_wpopen(command_wide,type_wide);
166 type_wide=(WCHAR *) RelinquishMagickMemory(type_wide);
167 command_wide=(WCHAR *) RelinquishMagickMemory(command_wide);
172 static inline int remove_utf8(const char *path)
174 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
175 return(unlink(path));
184 path_wide=(WCHAR *) NULL;
185 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
186 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
187 if (path_wide == (WCHAR *) NULL)
189 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
190 status=_wremove(path_wide);
191 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
196 static inline int rename_utf8(const char *source,const char *destination)
198 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
199 return(rename(source,destination));
209 source_wide=(WCHAR *) NULL;
210 count=MultiByteToWideChar(CP_UTF8,0,source,-1,NULL,0);
211 source_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*source_wide));
212 if (source_wide == (WCHAR *) NULL)
214 count=MultiByteToWideChar(CP_UTF8,0,source,-1,source_wide,count);
215 count=MultiByteToWideChar(CP_UTF8,0,destination,-1,NULL,0);
216 destination_wide=(WCHAR *) AcquireQuantumMemory(count,
217 sizeof(*destination_wide));
218 if (destination_wide == (WCHAR *) NULL)
220 source_wide=(WCHAR *) RelinquishMagickMemory(source_wide);
223 count=MultiByteToWideChar(CP_UTF8,0,destination,-1,destination_wide,count);
224 status=_wrename(source_wide,destination_wide);
225 destination_wide=(WCHAR *) RelinquishMagickMemory(destination_wide);
226 source_wide=(WCHAR *) RelinquishMagickMemory(source_wide);
231 static inline int stat_utf8(const char *path,struct stat *attributes)
233 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
234 return(stat(path,attributes));
243 path_wide=(WCHAR *) NULL;
244 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
245 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
246 if (path_wide == (WCHAR *) NULL)
248 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
249 status=_wstat64(path_wide,attributes);
250 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
255 #if defined(__cplusplus) || defined(c_plusplus)