]> granicus.if.org Git - imagemagick/commitdiff
https://github.com/ImageMagick/ImageMagick/issues/1455
authorCristy <mikayla-grace@urban-warrior.org>
Sun, 20 Jan 2019 15:02:42 +0000 (10:02 -0500)
committerCristy <mikayla-grace@urban-warrior.org>
Sun, 20 Jan 2019 15:03:04 +0000 (10:03 -0500)
MagickCore/animate.c
MagickCore/display.c
MagickCore/locale.c
MagickCore/locale_.h
MagickCore/nt-feature.c
MagickCore/token.c
MagickCore/vms.c
coders/fits.c
coders/meta.c

index c66d08ef0cb41706188f3a4fb085338199fbfc36..e79715c03f214a0cdc6835780b8ded0855ea56be 100644 (file)
@@ -1575,7 +1575,8 @@ MagickExport Image *XAnimateImages(Display *display,
     resource_info,&windows->context);
   (void) CloneString(&class_hints->res_name,resource_info->client_name);
   (void) CloneString(&class_hints->res_class,resource_info->client_name);
-  class_hints->res_class[0]=(char) toupper((int) class_hints->res_class[0]);
+  class_hints->res_class[0]=(char) LocaleUppercase((int)
+    class_hints->res_class[0]);
   manager_hints->flags=InputHint | StateHint;
   manager_hints->input=MagickFalse;
   manager_hints->initial_state=WithdrawnState;
index 2dee778ade6e476bf2b5ec6ef5dcb109fafd9caf..4574904246bac23d747053df9e91a9a36b9884bf 100644 (file)
@@ -14628,7 +14628,8 @@ MagickExport Image *XDisplayImage(Display *display,XResourceInfo *resource_info,
     resource_info,&windows->context);
   (void) CloneString(&class_hints->res_name,resource_info->client_name);
   (void) CloneString(&class_hints->res_class,resource_info->client_name);
-  class_hints->res_class[0]=(char) toupper((int) class_hints->res_class[0]);
+  class_hints->res_class[0]=(char) LocaleUppercase((int)
+    class_hints->res_class[0]);
   manager_hints->flags=InputHint | StateHint;
   manager_hints->input=MagickFalse;
   manager_hints->initial_state=WithdrawnState;
index d44dfe86f4bf33c3dcaf27bb36d1c2bade946c28..f9f4b52c07c618c5acf79fcc90834bd913ca2188 100644 (file)
@@ -1499,7 +1499,40 @@ MagickExport void LocaleLower(char *string)
 
   assert(string != (char *) NULL);
   for (q=string; *q != '\0'; q++)
-    *q=(char) tolower((int) *q);
+    *q=(char) LocaleLowercase((int) *q);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   L o c a l e L o w e r c a s e                                             %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  LocaleLowercase() convert to uppercase.
+%
+%  The format of the LocaleLowercase method is:
+%
+%      void LocaleLowercase(const int c)
+%
+%  A description of each parameter follows:
+%
+%    o If c is a uppercase letter, return its lowercase equivalent.
+%
+*/
+MagickExport int LocaleLowercase(const int c)
+{
+  locale_t
+    locale;
+
+  locale=AcquireCLocale();
+  if (locale == (locale_t) NULL)
+    return(tolower(c));
+  return(tolower_l(c,locale));
 }
 \f
 /*
@@ -1606,7 +1639,40 @@ MagickExport void LocaleUpper(char *string)
 
   assert(string != (char *) NULL);
   for (q=string; *q != '\0'; q++)
-    *q=(char) toupper((int) *q);
+    *q=(char) LocaleUppercase((int) *q);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   L o c a l e U p p e r c a s e                                             %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  LocaleUppercase() convert to uppercase.
+%
+%  The format of the LocaleUppercase method is:
+%
+%      void LocaleUppercase(const int c)
+%
+%  A description of each parameter follows:
+%
+%    o If c is a lowercase letter, return its uppercase equivalent.
+%
+*/
+MagickExport int LocaleUppercase(const int c)
+{
+  locale_t
+    locale;
+
+  locale=AcquireCLocale();
+  if (locale == (locale_t) NULL)
+    return(toupper(c));
+  return(toupper_l(c,locale));
 }
 \f
 /*
index 927dc25ecfe677b8ce0f874466aff337829c9ff0..57d61d599f3267fbc932dc79ef47bd534d7fa715 100644 (file)
@@ -53,8 +53,10 @@ extern MagickExport double
 
 extern MagickExport int
   LocaleCompare(const char *,const char *) magick_attribute((__pure__)),
+  LocaleLowercase(const int),
   LocaleNCompare(const char *,const char *,const size_t)
-    magick_attribute((__pure__));
+    magick_attribute((__pure__)),
+  LocaleUppercase(const int);
 
 extern MagickExport LinkedListInfo
   *DestroyLocaleOptions(LinkedListInfo *),
index 68c11f2de7603ac747c6772bc615e8b97288da8c..0f756ed619948d5e590a59ba515130416d5a0b72 100644 (file)
@@ -96,8 +96,8 @@ MagickExport MagickBooleanType NTIsMagickConflict(const char *magick)
   assert(magick != (char *) NULL);
   if (strlen(magick) > 1)
     return(MagickFalse);
-  status=(GetLogicalDrives() & (1 << ((toupper((int) (*magick)))-'A'))) != 0 ?
-    MagickTrue : MagickFalse;
+  status=(GetLogicalDrives() & (1 << ((LocaleUppercase((int)
+    (*magick)))-'A'))) != 0 ? MagickTrue : MagickFalse;
   return(status);
 }
 \f
index c44b43050db1f62ac86834806c54154b437c01e7..ca98b9856bd6c238ad274bb0bbc35b235bd778bd 100644 (file)
@@ -541,8 +541,7 @@ MagickExport MagickBooleanType GlobExpression(const char *expression,
       {
         if (case_insensitive != MagickFalse)
           {
-            if (tolower((int) GetUTFCode(expression)) !=
-                tolower((int) GetUTFCode(pattern)))
+            if (LocaleLowercase((int) GetUTFCode(expression)) != LocaleLowercase((int) GetUTFCode(pattern)))
               {
                 done=MagickTrue;
                 break;
@@ -815,12 +814,12 @@ static void StoreToken(TokenInfo *token_info,char *string,
   {
     case 1:
     {
-      string[i]=(char) toupper(c);
+      string[i]=(char) LocaleUppercase(c);
       break;
     }
     case 2:
     {
-      string[i]=(char) tolower(c);
+      string[i]=(char) LocaleLowercase(c);
       break;
     }
     default:
index 8380bb85ca1daffb5cdfad876405999d2a4962d7..8e4b41758600ab0077e53d4bf64bcd54df2fc195 100644 (file)
@@ -196,7 +196,7 @@ struct dirent *readdir(DIR *directory)
   buffer[sizeof(buffer)-1]='\0';
   for (p=buffer; *p; p++)
     if (isupper((int) ((unsigned char) *p)))
-      *p=tolower(*p);
+      *p=LocaleLowercase(*p);
   /*
     Skip any directory component and just copy the name.
   */
index e71020fab86528da7daff064fc7f0308c4ad3432..f342423f19c53d6ca44ef2e40a6d52074d640a47 100644 (file)
@@ -331,7 +331,7 @@ static Image *ReadFITSImage(const ImageInfo *image_info,
       {
         if (isspace((int) ((unsigned char) keyword[i])) != 0)
           break;
-        keyword[i]=tolower((int) ((unsigned char) keyword[i]));
+        keyword[i]=LocaleLowercase((int) ((unsigned char) keyword[i]));
       }
       keyword[i]='\0';
       count=ReadBlob(image,72,(unsigned char *) value);
index 2e90625fa1539231cf56c5b590f16119d7aaf0f2..cbdeddeb09e4072abe9fcf80a5f660ab7ec54c03 100644 (file)
@@ -179,10 +179,10 @@ static int stringnicmp(const char *p,const char *q,size_t n)
       break;
     i=(*p);
     if (islower(i))
-      i=toupper(i);
+      i=LocaleUppercase(i);
     j=(*q);
     if (islower(j))
-      j=toupper(j);
+      j=LocaleUppercase(j);
     if (i != j)
       break;
     n--;
@@ -191,7 +191,7 @@ static int stringnicmp(const char *p,const char *q,size_t n)
     p++;
     q++;
   }
-  return(toupper((int) *p)-toupper((int) *q));
+  return(LocaleUppercase((int) *p)-LocaleUppercase((int) *q));
 }
 
 static size_t convertHTMLcodes(char *s)