chars_per_pixel++;
// 2. write the header:
- tmp.Printf("/* XPM */\n"
+ char tmpbuf[200];
+ // VS: 200b is safe upper bound for anything produced by sprintf bellow
+ // (101 bytes the string, neither %i can expand into more than 10 chars)
+ sprintf(tmpbuf,
+ "/* XPM */\n"
"static char *xpm_data[] = {\n"
"/* columns rows colors chars-per-pixel */\n"
"\"%i %i %i %i\",\n",
image->GetWidth(), image->GetHeight(), cols, chars_per_pixel);
- stream.Write(tmp.mb_str(), tmp.Length());
+ stream.Write(tmpbuf, strlen(tmpbuf));
// 3. create color symbols table:
wxHashTable table(wxKEY_INTEGER);
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;
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);
*/
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;
{
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 )
{