]> granicus.if.org Git - imagemagick/blobdiff - magick/locale.c
(no commit message)
[imagemagick] / magick / locale.c
index de6d3127a50799f02759970131b39be0ff7b9fbb..b131ec44dd45595c931e59aa50bafa1237edc5fa 100644 (file)
 #define LocaleFilename  "locale.xml"
 #define MaxRecursionDepth  200
 \f
+/*
+  Typedef declarations.
+*/
+#if defined(__CYGWIN__)
+typedef struct _locale_t *locale_t;
+#endif
+\f
 /*
   Static declarations.
 */
@@ -83,8 +90,10 @@ static SemaphoreInfo
 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;
@@ -96,6 +105,7 @@ static MagickBooleanType
   InitializeLocaleList(ExceptionInfo *),
   LoadLocaleLists(const char *,const char *,ExceptionInfo *);
 \f
+#if defined(MAGICKCORE_HAVE_STRTOD_L)
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                             %
@@ -126,7 +136,9 @@ static locale_t AcquireCLocale(void)
 #endif
   return(c_locale);
 }
+#endif
 \f
+#if defined(MAGICKCORE_HAVE_STRTOD_L)
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                             %
@@ -157,6 +169,7 @@ static void DestroyCLocale(void)
 #endif
   c_locale=(locale_t) NULL;
 }
+#endif
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -221,10 +234,10 @@ MagickExport LinkedListInfo *DestroyLocaleOptions(LinkedListInfo *messages)
 %
 */
 
-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)
@@ -234,9 +247,13 @@ MagickExport ssize_t FormatLocaleFileList(FILE *file,const char *format,
 
     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)
@@ -247,22 +264,23 @@ MagickExport ssize_t FormatLocaleFileList(FILE *file,const char *format,
 
     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;
@@ -271,7 +289,7 @@ MagickExport ssize_t FormatLocaleFile(FILE *file,const char *format,...)
     operands;
 
   va_start(operands,format);
-  n=(ssize_t) FormatLocaleFileList(file,format,operands);
+  n=FormatLocaleFileList(file,format,operands);
   va_end(operands);
   return(n);
 }
@@ -307,14 +325,27 @@ MagickExport ssize_t FormatLocaleFile(FILE *file,const char *format,...)
 %
 */
 
-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)
   {
@@ -324,27 +355,27 @@ MagickExport ssize_t FormatLocaleStringList(char *string,const size_t length,
 
     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;
@@ -353,7 +384,7 @@ MagickExport ssize_t FormatLocaleString(char *string,const size_t length,
     operands;
 
   va_start(operands,format);
-  n=(ssize_t) FormatLocaleStringList(string,length,format,operands);
+  n=FormatLocaleStringList(string,length,format,operands);
   va_end(operands);
   return(n);
 }
@@ -842,7 +873,8 @@ static MagickBooleanType InitializeLocaleList(ExceptionInfo *exception)
 %      referenced by sentinal.
 %
 */
-MagickExport double InterpretLocaleValue(const char *string,char **sentinal)
+MagickExport double InterpretLocaleValue(const char *restrict string,
+  char **restrict sentinal)
 {
   double
     value;
@@ -1372,7 +1404,9 @@ MagickExport void LocaleComponentTerminus(void)
   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);