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-base-private.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 static inline int open_utf8(const char *path,int flags,int mode)
109 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
110 return(open(path,flags,mode));
119 path_wide=(WCHAR *) NULL;
120 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
121 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
122 if (path_wide == (WCHAR *) NULL)
124 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
125 status=_wopen(path_wide,flags,mode);
126 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
131 static inline FILE *popen_utf8(const char *command,const char *type)
133 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
134 return(fopen(command,type));
146 command_wide=(WCHAR *) NULL;
147 count=MultiByteToWideChar(CP_UTF8,0,command,-1,NULL,0);
148 command_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*command_wide));
149 if (command_wide == (WCHAR *) NULL)
150 return((FILE *) NULL);
151 count=MultiByteToWideChar(CP_UTF8,0,command,-1,command_wide,count);
152 count=MultiByteToWideChar(CP_UTF8,0,type,-1,NULL,0);
153 type_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*type_wide));
154 if (type_wide == (WCHAR *) NULL)
156 command_wide=(WCHAR *) RelinquishMagickMemory(command_wide);
157 return((FILE *) NULL);
159 count=MultiByteToWideChar(CP_UTF8,0,type,-1,type_wide,count);
160 file=_wpopen(command_wide,type_wide);
161 type_wide=(WCHAR *) RelinquishMagickMemory(type_wide);
162 command_wide=(WCHAR *) RelinquishMagickMemory(command_wide);
167 static inline int remove_utf8(const char *path)
169 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
170 return(unlink(path));
179 path_wide=(WCHAR *) NULL;
180 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
181 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
182 if (path_wide == (WCHAR *) NULL)
184 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
185 status=_wremove(path_wide);
186 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
191 static inline int rename_utf8(const char *source,const char *destination)
193 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
194 return(rename(source,destination));
204 source_wide=(WCHAR *) NULL;
205 count=MultiByteToWideChar(CP_UTF8,0,source,-1,NULL,0);
206 source_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*source_wide));
207 if (source_wide == (WCHAR *) NULL)
209 count=MultiByteToWideChar(CP_UTF8,0,source,-1,source_wide,count);
210 count=MultiByteToWideChar(CP_UTF8,0,destination,-1,NULL,0);
211 destination_wide=(WCHAR *) AcquireQuantumMemory(count,
212 sizeof(*destination_wide));
213 if (destination_wide == (WCHAR *) NULL)
215 source_wide=(WCHAR *) RelinquishMagickMemory(source_wide);
218 count=MultiByteToWideChar(CP_UTF8,0,destination,-1,destination_wide,count);
219 status=_wrename(source_wide,destination_wide);
220 destination_wide=(WCHAR *) RelinquishMagickMemory(destination_wide);
221 source_wide=(WCHAR *) RelinquishMagickMemory(source_wide);
226 static inline int stat_utf8(const char *path,struct stat *attributes)
228 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
229 return(stat(path,attributes));
238 path_wide=(WCHAR *) NULL;
239 count=MultiByteToWideChar(CP_UTF8,0,path,-1,NULL,0);
240 path_wide=(WCHAR *) AcquireQuantumMemory(count,sizeof(*path_wide));
241 if (path_wide == (WCHAR *) NULL)
243 count=MultiByteToWideChar(CP_UTF8,0,path,-1,path_wide,count);
244 status=_wstat64(path_wide,attributes);
245 path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
250 #if defined(__cplusplus) || defined(c_plusplus)