diff options
author | hobbs <hobbs> | 2004-09-13 22:54:37 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2004-09-13 22:54:37 (GMT) |
commit | 5fd6d4b4dd95ccdc961074ad3a481669631db77a (patch) | |
tree | 0267c3b78710b450243d3170153b928c4c66d529 /win/tkWinWm.c | |
parent | 7122cfafb388b7bbc3fa6d8f4d27ff51328d9fca (diff) | |
download | tk-5fd6d4b4dd95ccdc961074ad3a481669631db77a.zip tk-5fd6d4b4dd95ccdc961074ad3a481669631db77a.tar.gz tk-5fd6d4b4dd95ccdc961074ad3a481669631db77a.tar.bz2 |
* win/tkWinWm.c (ReadIconFromFile): fix mem alloc to get the right
size for both icons ('?:' order of precedence mistake).
Diffstat (limited to 'win/tkWinWm.c')
-rw-r--r-- | win/tkWinWm.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/win/tkWinWm.c b/win/tkWinWm.c index e7499c1..cb1e45d 100644 --- a/win/tkWinWm.c +++ b/win/tkWinWm.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWinWm.c,v 1.67 2004/09/10 20:49:42 hobbs Exp $ + * RCS: @(#) $Id: tkWinWm.c,v 1.68 2004/09/13 22:54:37 hobbs Exp $ */ #include "tkWinInt.h" @@ -1190,7 +1190,6 @@ ReadIconFromFile(interp, fileName) */ if (lpIR == NULL && shgetfileinfoProc != NULL) { SHFILEINFO sfiSM; - SHFILEINFO sfi; Tcl_DString ds, ds2; DWORD *res; CONST char *file; @@ -1203,13 +1202,17 @@ ReadIconFromFile(interp, fileName) sizeof(SHFILEINFO), SHGFI_SMALLICON|SHGFI_ICON); if (res != 0) { + SHFILEINFO sfi; + int size; + Tcl_ResetResult(interp); res = (*shgetfileinfoProc)(Tcl_DStringValue(&ds2), 0, &sfi, sizeof(SHFILEINFO), SHGFI_ICON); /* Account for extra icon, if necessary */ - lpIR = (BlockOfIconImagesPtr) ckalloc(sizeof(BlockOfIconImages) - + (res != 0) ? sizeof(ICONIMAGE) : 0); + size = sizeof(BlockOfIconImages) + + ((res != 0) ? sizeof(ICONIMAGE) : 0); + lpIR = (BlockOfIconImagesPtr) ckalloc(size); if (lpIR == NULL) { if (res != 0) { DestroyIcon(sfi.hIcon); @@ -1218,28 +1221,20 @@ ReadIconFromFile(interp, fileName) Tcl_DStringFree(&ds2); return NULL; } + ZeroMemory(lpIR, size); - lpIR->nNumImages = (res != 0) ? 2 : 1; + lpIR->nNumImages = ((res != 0) ? 2 : 1); lpIR->IconImages[0].Width = 16; lpIR->IconImages[0].Height = 16; lpIR->IconImages[0].Colors = 4; lpIR->IconImages[0].hIcon = sfiSM.hIcon; - /* These fields are ignored */ - lpIR->IconImages[0].lpBits = 0; - lpIR->IconImages[0].dwNumBytes = 0; - lpIR->IconImages[0].lpXOR = 0; - lpIR->IconImages[0].lpAND = 0; + /* All other IconImages fields are ignored */ if (res != 0) { lpIR->IconImages[1].Width = 32; lpIR->IconImages[1].Height = 32; lpIR->IconImages[1].Colors = 4; lpIR->IconImages[1].hIcon = sfi.hIcon; - /* These fields are ignored */ - lpIR->IconImages[1].lpBits = 0; - lpIR->IconImages[1].dwNumBytes = 0; - lpIR->IconImages[1].lpXOR = 0; - lpIR->IconImages[1].lpAND = 0; } } Tcl_DStringFree(&ds2); |