Unicode fixes

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10215 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2001-05-18 18:34:49 +00:00
parent 0d832cf788
commit ffe107c8c0
2 changed files with 14 additions and 9 deletions

View File

@@ -128,12 +128,16 @@ bool wxXPMHandler::SaveFile(wxImage * image,
chars_per_pixel++; chars_per_pixel++;
// 2. write the header: // 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" "static char *xpm_data[] = {\n"
"/* columns rows colors chars-per-pixel */\n" "/* columns rows colors chars-per-pixel */\n"
"\"%i %i %i %i\",\n", "\"%i %i %i %i\",\n",
image->GetWidth(), image->GetHeight(), cols, chars_per_pixel); 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: // 3. create color symbols table:
wxHashTable table(wxKEY_INTEGER); wxHashTable table(wxKEY_INTEGER);

View File

@@ -641,8 +641,8 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
wxImage img; wxImage img;
int count; int count;
unsigned width, height, colors_cnt, chars_per_pixel; unsigned width, height, colors_cnt, chars_per_pixel;
unsigned i, j; size_t i, j, i_key;
char key[64]; wxChar key[64];
const char *clr_def; const char *clr_def;
bool hasMask; bool hasMask;
wxXPMColourMapData *clr_data; wxXPMColourMapData *clr_data;
@@ -669,7 +669,7 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
if ( !img.Ok() ) return img; if ( !img.Ok() ) return img;
img.SetMask(FALSE); img.SetMask(FALSE);
key[chars_per_pixel] = '\0'; key[chars_per_pixel] = wxT('\0');
hasMask = FALSE; hasMask = FALSE;
clr_tbl.DeleteContents(TRUE); clr_tbl.DeleteContents(TRUE);
@@ -678,7 +678,8 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
*/ */
for (i = 0; i < colors_cnt; i++) 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_def = ParseColor(xpm_data[1 + i]);
clr_data = new wxXPMColourMapData; clr_data = new wxXPMColourMapData;
@@ -725,9 +726,9 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
{ {
for (i = 0; i < width; i++, img_data += 3) for (i = 0; i < width; i++, img_data += 3)
{ {
memcpy(key, for (i_key = 0; i_key < chars_per_pixel; i_key++)
xpm_data[1 + colors_cnt + j] + chars_per_pixel * i, key[i_key] = (wxChar)xpm_data[1 + colors_cnt + j]
chars_per_pixel); [chars_per_pixel * i + i_key];
clr_data = (wxXPMColourMapData*) clr_tbl.Get(key); clr_data = (wxXPMColourMapData*) clr_tbl.Get(key);
if ( clr_data == NULL ) if ( clr_data == NULL )
{ {