18 #ifndef MAGICKCORE_UTILITY_PRIVATE_H
19 #define MAGICKCORE_UTILITY_PRIVATE_H
25 #if defined(__cplusplus) || defined(c_plusplus)
35 #if defined(MAGICKCORE_HAVE_READDIR_R)
36 return(readdir_r(directory,entry,result));
49 #if defined(MAGICKCORE_WINDOWS_SUPPORT)
50 static inline wchar_t *create_wchar_path(
const char *utf8)
58 count=MultiByteToWideChar(CP_UTF8,0,utf8,-1,NULL,0);
59 if ((count > MAX_PATH) && (NTLongPathsEnabled() ==
MagickFalse))
71 if (longPath == (
wchar_t *) NULL)
72 return((
wchar_t *) NULL);
73 count=MultiByteToWideChar(CP_UTF8,0,buffer,-1,longPath,count);
75 count=GetShortPathNameW(longPath,shortPath,MAX_PATH);
77 if ((count < 5) || (count >= MAX_PATH))
78 return((
wchar_t *) NULL);
80 wcscpy(wideChar,shortPath+4);
84 if (wideChar == (
wchar_t *) NULL)
85 return((
wchar_t *) NULL);
86 count=MultiByteToWideChar(CP_UTF8,0,utf8,-1,wideChar,count);
90 return((
wchar_t *) NULL);
98 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
99 return(access(
path,mode));
107 path_wide=create_wchar_path(
path);
108 if (path_wide == (
wchar_t *) NULL)
110 status=_waccess(path_wide,mode);
118 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
119 return(fopen(
path,mode));
128 path_wide=create_wchar_path(
path);
129 if (path_wide == (
wchar_t *) NULL)
130 return((FILE *) NULL);
131 mode_wide=create_wchar_path(mode);
132 if (mode_wide == (
wchar_t *) NULL)
135 return((FILE *) NULL);
137 file=_wfopen(path_wide,mode_wide);
146 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
150 directory=getcwd(
path,extent);
157 (void) WideCharToMultiByte(CP_UTF8,0,wide_path,-1,
path,(
int) extent,NULL,NULL);
161 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__CYGWIN__) && !defined(__MINGW32__)
168 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
169 return(open(
path,flags,mode));
177 path_wide=create_wchar_path(
path);
178 if (path_wide == (
wchar_t *) NULL)
180 status=_wopen(path_wide,flags,mode);
186 static inline FILE *
popen_utf8(
const char *command,
const char *type)
188 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
189 return(popen(command,type));
202 length=MultiByteToWideChar(CP_UTF8,0,type,-1,type_wide,5);
205 length=MultiByteToWideChar(CP_UTF8,0,command,-1,NULL,0);
209 if (command_wide == (
wchar_t *) NULL)
211 length=MultiByteToWideChar(CP_UTF8,0,command,-1,command_wide,length);
213 file=_wpopen(command_wide,type_wide);
221 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
222 return(unlink(
path));
230 path_wide=create_wchar_path(
path);
231 if (path_wide == (
wchar_t *) NULL)
233 status=_wremove(path_wide);
239 static inline int rename_utf8(
const char *source,
const char *destination)
241 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
242 return(rename(source,destination));
251 source_wide=create_wchar_path(source);
252 if (source_wide == (
wchar_t *) NULL)
254 destination_wide=create_wchar_path(destination);
255 if (destination_wide == (
wchar_t *) NULL)
260 status=_wrename(source_wide,destination_wide);
269 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
270 return(stat(
path,attributes));
278 path_wide=create_wchar_path(
path);
279 if (path_wide == (WCHAR *) NULL)
281 status=wstat(path_wide,attributes);
287 #if defined(__cplusplus) || defined(c_plusplus)