fixed memory leak in colour parsing code
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10262 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -561,41 +561,47 @@ static bool GetRGBFromName(const char *inname, bool *isNone,
|
|||||||
grey[2] = 'a';
|
grey[2] = 'a';
|
||||||
|
|
||||||
// check for special 'none' colour:
|
// check for special 'none' colour:
|
||||||
|
bool found;
|
||||||
if ( strcmp(name, "none") == 0 )
|
if ( strcmp(name, "none") == 0 )
|
||||||
{
|
{
|
||||||
*isNone = TRUE;
|
*isNone = TRUE;
|
||||||
return TRUE;
|
found = TRUE;
|
||||||
|
}
|
||||||
|
else // not "None"
|
||||||
|
{
|
||||||
|
found = FALSE;
|
||||||
|
|
||||||
|
// binary search:
|
||||||
|
left = 0;
|
||||||
|
right = numTheRGBRecords - 1;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// binary search:
|
|
||||||
left = 0;
|
|
||||||
right = numTheRGBRecords - 1;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
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 )
|
|
||||||
{
|
|
||||||
right = middle - 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // > 0
|
|
||||||
left = middle + 1;
|
|
||||||
}
|
|
||||||
} while (left <= right);
|
|
||||||
|
|
||||||
free(name);
|
free(name);
|
||||||
return FALSE;
|
|
||||||
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *ParseColor(const char *data)
|
static const char *ParseColor(const char *data)
|
||||||
|
Reference in New Issue
Block a user