#define LocaleFilename "locale.xml"
#define MaxRecursionDepth 200
\f
+/*
+ Typedef declarations.
+*/
+#if defined(__CYGWIN__)
+typedef struct _locale_t *locale_t;
+#endif
+\f
/*
Static declarations.
*/
static SplayTreeInfo
*locale_list = (SplayTreeInfo *) NULL;
+#if defined(MAGICKCORE_HAVE_STRTOD_L)
static volatile locale_t
c_locale = (locale_t) NULL;
+#endif
static volatile MagickBooleanType
instantiate_locale = MagickFalse;
InitializeLocaleList(ExceptionInfo *),
LoadLocaleLists(const char *,const char *,ExceptionInfo *);
\f
+#if defined(MAGICKCORE_HAVE_STRTOD_L)
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
#endif
return(c_locale);
}
+#endif
\f
+#if defined(MAGICKCORE_HAVE_STRTOD_L)
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
#endif
c_locale=(locale_t) NULL;
}
+#endif
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
*/
-MagickExport ssize_t FormatLocaleFileList(FILE *file,const char *format,
- va_list operands)
+MagickExport ssize_t FormatLocaleFileList(FILE *file,
+ const char *restrict format,va_list operands)
{
- int
+ ssize_t
n;
#if defined(MAGICKCORE_HAVE_VFPRINTF_L)
locale=AcquireCLocale();
if (locale == (locale_t) NULL)
- n=vfprintf(file,format,operands);
+ n=(ssize_t) vfprintf(file,format,operands);
else
- n=vfprintf_l(file,format,locale,operands);
+#if defined(MAGICKCORE_WINDOWS_SUPPORT)
+ n=(ssize_t) vfprintf_l(file,format,locale,operands);
+#else
+ n=(ssize_t) vfprintf_l(file,locale,format,operands);
+#endif
}
#else
#if defined(MAGICKCORE_HAVE_USELOCALE)
locale=AcquireCLocale();
if (locale == (locale_t) NULL)
- n=vfprintf(file,format,operands);
+ n=(ssize_t) vfprintf(file,format,operands);
else
{
previous_locale=uselocale(locale);
- n=vfprintf(file,format,operands);
+ n=(ssize_t) vfprintf(file,format,operands);
uselocale(previous_locale);
}
}
#else
- n=fprintf(file,format,operands);
+ n=(ssize_t) vfprintf(file,format,operands);
#endif
#endif
- return((ssize_t) n);
+ return(n);
}
-MagickExport ssize_t FormatLocaleFile(FILE *file,const char *format,...)
+MagickExport ssize_t FormatLocaleFile(FILE *file,const char *restrict format,
+ ...)
{
ssize_t
n;
operands;
va_start(operands,format);
- n=(ssize_t) FormatLocaleFileList(file,format,operands);
+ n=FormatLocaleFileList(file,format,operands);
va_end(operands);
return(n);
}
%
*/
-MagickExport ssize_t FormatLocaleStringList(char *string,const size_t length,
- const char *format,va_list operands)
+MagickExport ssize_t FormatLocaleStringList(char *restrict string,
+ const size_t length,const char *restrict format,va_list operands)
{
- int
+ ssize_t
n;
#if defined(MAGICKCORE_HAVE_VSNPRINTF_L)
- n=vsnprintf_l(string,length,format,(locale_t) NULL,operands);
+ {
+ locale_t
+ locale;
+
+ locale=AcquireCLocale();
+ if (locale == (locale_t) NULL)
+ n=(ssize_t) vsnprintf(string,length,format,operands);
+ else
+#if defined(MAGICKCORE_WINDOWS_SUPPORT)
+ n=(ssize_t) vsnprintf_l(string,length,format,locale,operands);
+#else
+ n=(ssize_t) vsnprintf_l(string,length,locale,format,operands);
+#endif
+ }
#elif defined(MAGICKCORE_HAVE_VSNPRINTF)
#if defined(MAGICKCORE_HAVE_USELOCALE)
{
locale=AcquireCLocale();
if (locale == (locale_t) NULL)
- n=vsnprintf(string,length,format,operands);
+ n=(ssize_t) vsnprintf(string,length,format,operands);
else
{
previous_locale=uselocale(locale);
- n=vsnprintf(string,length,format,operands);
+ n=(ssize_t) vsnprintf(string,length,format,operands);
uselocale(previous_locale);
}
}
#else
- n=vsnprintf(string,length,format,operands);
+ n=(ssize_t) vsnprintf(string,length,format,operands);
#endif
#else
- n=vsprintf(string,format,operands);
+ n=(ssize_t) vsprintf(string,format,operands);
#endif
if (n < 0)
string[length-1]='\0';
- return((ssize_t) n);
+ return(n);
}
-MagickExport ssize_t FormatLocaleString(char *string,const size_t length,
- const char *format,...)
+MagickExport ssize_t FormatLocaleString(char *restrict string,
+ const size_t length,const char *restrict format,...)
{
ssize_t
n;
operands;
va_start(operands,format);
- n=(ssize_t) FormatLocaleStringList(string,length,format,operands);
+ n=FormatLocaleStringList(string,length,format,operands);
va_end(operands);
return(n);
}
% referenced by sentinal.
%
*/
-MagickExport double InterpretLocaleValue(const char *string,char **sentinal)
+MagickExport double InterpretLocaleValue(const char *restrict string,
+ char **restrict sentinal)
{
double
value;
if (locale_semaphore == (SemaphoreInfo *) NULL)
AcquireSemaphoreInfo(&locale_semaphore);
LockSemaphoreInfo(locale_semaphore);
+#if defined(MAGICKCORE_HAVE_STRTOD_L)
DestroyCLocale();
+#endif
instantiate_locale=MagickFalse;
UnlockSemaphoreInfo(locale_semaphore);
DestroySemaphoreInfo(&locale_semaphore);