write little-endian values in replace_icon
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4612 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
c48a248f80
commit
c680fbbc04
1 changed files with 11 additions and 7 deletions
|
@ -160,7 +160,7 @@ static FILE * open_icon(const char* filename, IconGroupHeader *igh)
|
||||||
// replace_icon, must get an initialized resource editor
|
// replace_icon, must get an initialized resource editor
|
||||||
void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename)
|
void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename)
|
||||||
{
|
{
|
||||||
IconGroupHeader igh;
|
IconGroupHeader igh, *new_igh;
|
||||||
FILE *f = open_icon(filename, &igh);
|
FILE *f = open_icon(filename, &igh);
|
||||||
|
|
||||||
BYTE* rsrcIconGroup = (BYTE*)malloc(sizeof(IconGroupHeader) + igh.wCount*SIZEOF_RSRC_ICON_GROUP_ENTRY);
|
BYTE* rsrcIconGroup = (BYTE*)malloc(sizeof(IconGroupHeader) + igh.wCount*SIZEOF_RSRC_ICON_GROUP_ENTRY);
|
||||||
|
@ -168,6 +168,11 @@ void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename)
|
||||||
|
|
||||||
CopyMemory(rsrcIconGroup, &igh, sizeof(IconGroupHeader));
|
CopyMemory(rsrcIconGroup, &igh, sizeof(IconGroupHeader));
|
||||||
|
|
||||||
|
new_igh = (IconGroupHeader *) rsrcIconGroup;
|
||||||
|
FIX_ENDIAN_INT16_INPLACE(new_igh->wIsIcon);
|
||||||
|
FIX_ENDIAN_INT16_INPLACE(new_igh->wReserved);
|
||||||
|
FIX_ENDIAN_INT16_INPLACE(new_igh->wCount);
|
||||||
|
|
||||||
RsrcIconGroupEntry* ige = (RsrcIconGroupEntry*)(rsrcIconGroup + sizeof(IconGroupHeader));
|
RsrcIconGroupEntry* ige = (RsrcIconGroupEntry*)(rsrcIconGroup + sizeof(IconGroupHeader));
|
||||||
|
|
||||||
int i = 1;
|
int i = 1;
|
||||||
|
@ -178,10 +183,9 @@ void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename)
|
||||||
for (i = 0; i < igh.wCount; i++) {
|
for (i = 0; i < igh.wCount; i++) {
|
||||||
fread(ige, sizeof(FileIconGroupEntry)-sizeof(DWORD), 1, f);
|
fread(ige, sizeof(FileIconGroupEntry)-sizeof(DWORD), 1, f);
|
||||||
|
|
||||||
FIX_ENDIAN_INT16_INPLACE(ige->wRsrcId);
|
DWORD dwRawSize = FIX_ENDIAN_INT32(ige->dwRawSize);
|
||||||
FIX_ENDIAN_INT32_INPLACE(ige->dwRawSize);
|
|
||||||
|
|
||||||
ige->wRsrcId = i+1;
|
ige->wRsrcId = FIX_ENDIAN_INT16(i + 1);
|
||||||
|
|
||||||
DWORD dwOffset;
|
DWORD dwOffset;
|
||||||
fread(&dwOffset, sizeof(DWORD), 1, f);
|
fread(&dwOffset, sizeof(DWORD), 1, f);
|
||||||
|
@ -195,13 +199,13 @@ void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename)
|
||||||
free(rsrcIconGroup);
|
free(rsrcIconGroup);
|
||||||
throw runtime_error("corrupted icon file, too small");
|
throw runtime_error("corrupted icon file, too small");
|
||||||
}
|
}
|
||||||
BYTE* iconData = (BYTE*)malloc(ige->dwRawSize);
|
BYTE* iconData = (BYTE*)malloc(dwRawSize);
|
||||||
if (!iconData) {
|
if (!iconData) {
|
||||||
free(rsrcIconGroup);
|
free(rsrcIconGroup);
|
||||||
throw bad_alloc();
|
throw bad_alloc();
|
||||||
}
|
}
|
||||||
fread(iconData, sizeof(BYTE), ige->dwRawSize, f);
|
fread(iconData, sizeof(BYTE), dwRawSize, f);
|
||||||
re->UpdateResource(RT_ICON, MAKEINTRESOURCE(i+1), NSIS_DEFAULT_LANG, iconData, ige->dwRawSize);
|
re->UpdateResource(RT_ICON, MAKEINTRESOURCE(i+1), NSIS_DEFAULT_LANG, iconData, dwRawSize);
|
||||||
free(iconData);
|
free(iconData);
|
||||||
|
|
||||||
fsetpos(f, &pos);
|
fsetpos(f, &pos);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue