% o attributes: the path attributes are returned here.
%
*/
-
-#if defined(MAGICKCORE_HAVE__WFOPEN)
-static size_t UTF8ToUTF16(const unsigned char *utf8,wchar_t *utf16)
-{
- register const unsigned char
- *p;
-
- if (utf16 != (wchar_t *) NULL)
- {
- register wchar_t
- *q;
-
- wchar_t
- c;
-
- /*
- Convert UTF-8 to UTF-16.
- */
- q=utf16;
- for (p=utf8; *p != '\0'; p++)
- {
- if ((*p & 0x80) == 0)
- *q=(*p);
- else
- if ((*p & 0xE0) == 0xC0)
- {
- c=(*p);
- *q=(c & 0x1F) << 6;
- p++;
- if ((*p & 0xC0) != 0x80)
- return(0);
- *q|=(*p & 0x3F);
- }
- else
- if ((*p & 0xF0) == 0xE0)
- {
- c=(*p);
- *q=c << 12;
- p++;
- if ((*p & 0xC0) != 0x80)
- return(0);
- c=(*p);
- *q|=(c & 0x3F) << 6;
- p++;
- if ((*p & 0xC0) != 0x80)
- return(0);
- *q|=(*p & 0x3F);
- }
- else
- return(0);
- q++;
- }
- *q++='\0';
- return(q-utf16);
- }
- /*
- Compute UTF-16 string length.
- */
- for (p=utf8; *p != '\0'; p++)
- {
- if ((*p & 0x80) == 0)
- ;
- else
- if ((*p & 0xE0) == 0xC0)
- {
- p++;
- if ((*p & 0xC0) != 0x80)
- return(0);
- }
- else
- if ((*p & 0xF0) == 0xE0)
- {
- p++;
- if ((*p & 0xC0) != 0x80)
- return(0);
- p++;
- if ((*p & 0xC0) != 0x80)
- return(0);
- }
- else
- return(0);
- }
- return(p-utf8);
-}
-
-static wchar_t *ConvertUTF8ToUTF16(const unsigned char *source)
-{
- size_t
- length;
-
- wchar_t
- *utf16;
-
- length=UTF8ToUTF16(source,(wchar_t *) NULL);
- if (length == 0)
- {
- register ssize_t
- i;
-
- /*
- Not UTF-8, just copy.
- */
- length=strlen((const char *) source);
- utf16=(wchar_t *) AcquireQuantumMemory(length+1,sizeof(*utf16));
- if (utf16 == (wchar_t *) NULL)
- return((wchar_t *) NULL);
- for (i=0; i <= (ssize_t) length; i++)
- utf16[i]=source[i];
- return(utf16);
- }
- utf16=(wchar_t *) AcquireQuantumMemory(length+1,sizeof(*utf16));
- if (utf16 == (wchar_t *) NULL)
- return((wchar_t *) NULL);
- length=UTF8ToUTF16(source,utf16);
- return(utf16);
-}
-#endif
-
MagickExport MagickBooleanType GetPathAttributes(const char *path,
void *attributes)
{
wchar_t
*unicode_path;
- count=MultiByteToWideChar(CP_ACP,0,path,-1,NULL,0);
+ count=MultiByteToWideChar(CP_ACP,0,path,-1,(wchar_t *) NULL,0);
unicode_path=(wchar_t *) AcquireQuantumMemory(count,sizeof(*unicode_path));
if (unicode_path == (wchar_t *) NULL)
return(MagickFalse);
+ count=MultiByteToWideChar(CP_ACP,0,path,-1,unicode_path,count);
status=wstat(unicode_path,(struct stat *) attributes) == 0 ? MagickTrue :
MagickFalse;
unicode_path=(wchar_t *) RelinquishMagickMemory(unicode_path);
*unicode_mode,
*unicode_path;
- count=MultiByteToWideChar(CP_ACP,0,path,-1,NULL,0);
+ count=MultiByteToWideChar(CP_ACP,0,path,-1,(wchar_t *) NULL,0);
unicode_path=(wchar_t *) AcquireQuantumMemory(count,sizeof(*unicode_path));
if (unicode_path == (wchar_t *) NULL)
return((FILE *) NULL);
- count=MultiByteToWideChar(CP_ACP,0,mode,-1,NULL,0);
+ count=MultiByteToWideChar(CP_ACP,0,path,-1,unicode_path,count);
+ count=MultiByteToWideChar(CP_ACP,0,mode,-1,(wchar_t *) NULL,0);
unicode_mode=(wchar_t *) AcquireQuantumMemory(count,sizeof(*unicode_mode));
if (unicode_mode == (wchar_t *) NULL)
{
unicode_path=(wchar_t *) RelinquishMagickMemory(unicode_path);
return((FILE *) NULL);
}
+ count=MultiByteToWideChar(CP_ACP,0,mode,-1,unicode_mode,count);
file=_wfopen(unicode_path,unicode_mode);
unicode_mode=(wchar_t *) RelinquishMagickMemory(unicode_mode);
unicode_path=(wchar_t *) RelinquishMagickMemory(unicode_path);