]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/xpmdecod.cpp
standardized encoding names to windows-12xx and iso-8859-x forms
[wxWidgets.git] / src / common / xpmdecod.cpp
index 3b33170ab78a8f26b60f15a77afbe00092d54a35..2952344fb39960fb88ef766368f644198142800e 100644 (file)
@@ -561,41 +561,47 @@ static bool GetRGBFromName(const char *inname, bool *isNone,
         grey[2] = 'a';
 
     // check for special 'none' colour:
+    bool found;
     if ( strcmp(name, "none") == 0 )
     {
         *isNone = TRUE;
-        return TRUE;
+        found = TRUE;
     }
-
-    // binary search:
-    left = 0;
-    right = numTheRGBRecords - 1;
-    do
+    else // not "None"
     {
-        middle = (left + right) / 2;
-        cmp = strcmp(name, theRGBRecords[middle].name);
-        if ( cmp == 0 )
-        {
-            rgbVal = theRGBRecords[middle].rgb;
-            *r = (unsigned char)((rgbVal >> 16) & 0xFF);
-            *g = (unsigned char)((rgbVal >> 8) & 0xFF);
-            *b = (unsigned char)((rgbVal) & 0xFF);
-            *isNone = FALSE;
-            free(name);
-            return TRUE;
-        }
-        else if ( cmp < 0 )
+        found = FALSE;
+
+        // binary search:
+        left = 0;
+        right = numTheRGBRecords - 1;
+        do
         {
-            right = middle - 1;
-        }
-        else
-        {           // > 0
-            left = middle + 1;
-        }
-    } while (left <= right);
+            middle = (left + right) / 2;
+            cmp = strcmp(name, theRGBRecords[middle].name);
+            if ( cmp == 0 )
+            {
+                rgbVal = theRGBRecords[middle].rgb;
+                *r = (unsigned char)((rgbVal >> 16) & 0xFF);
+                *g = (unsigned char)((rgbVal >> 8) & 0xFF);
+                *b = (unsigned char)((rgbVal) & 0xFF);
+                *isNone = FALSE;
+                found = TRUE;
+                break;
+            }
+            else if ( cmp < 0 )
+            {
+                right = middle - 1;
+            }
+            else // cmp > 0
+            {
+                left = middle + 1;
+            }
+        } while (left <= right);
+    }
 
     free(name);
-    return FALSE;
+
+    return found;
 }
 
 static const char *ParseColor(const char *data)
@@ -641,8 +647,8 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
     wxImage img;
     int count;
     unsigned width, height, colors_cnt, chars_per_pixel;
-    unsigned i, j;
-    char key[64];
+    size_t i, j, i_key;
+    wxChar key[64];
     const char *clr_def;
     bool hasMask;
     wxXPMColourMapData *clr_data;
@@ -669,7 +675,7 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
     if ( !img.Ok() ) return img;
 
     img.SetMask(FALSE);
-    key[chars_per_pixel] = '\0';
+    key[chars_per_pixel] = wxT('\0');
     hasMask = FALSE;
     clr_tbl.DeleteContents(TRUE);
 
@@ -678,7 +684,8 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
      */
     for (i = 0; i < colors_cnt; i++)
     {
-        memcpy(key, xpm_data[1 + i], chars_per_pixel);
+        for (i_key = 0; i_key < chars_per_pixel; i_key++)
+            key[i_key] = (wxChar)xpm_data[1 + i][i_key];
         clr_def = ParseColor(xpm_data[1 + i]);
         clr_data = new wxXPMColourMapData;
 
@@ -725,9 +732,9 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
     {
         for (i = 0; i < width; i++, img_data += 3)
         {
-            memcpy(key,
-                   xpm_data[1 + colors_cnt + j] + chars_per_pixel * i,
-                   chars_per_pixel);
+            for (i_key = 0; i_key < chars_per_pixel; i_key++)
+                key[i_key] = (wxChar)xpm_data[1 + colors_cnt + j]
+                                             [chars_per_pixel * i + i_key];
             clr_data = (wxXPMColourMapData*) clr_tbl.Get(key);
             if ( clr_data == NULL )
             {