REVIEWED: GuiLoadIconsFromMemory()

This commit is contained in:
Ray
2025-01-31 12:28:12 +01:00
parent 49aaa0a801
commit eea93facea

View File

@ -4462,22 +4462,21 @@ char **GuiLoadIcons(const char *fileName, bool loadIconsName)
// WARNING: Binary files only // WARNING: Binary files only
char **GuiLoadIconsFromMemory(const unsigned char *fileData, size_t dataSize, bool loadIconsName) char **GuiLoadIconsFromMemory(const unsigned char *fileData, size_t dataSize, bool loadIconsName)
{ {
const unsigned char *ptr = fileData; unsigned char *fileDataPtr = (unsigned char *)fileData;
char **guiIconsName = NULL;
char signature[5] = { 0 }; char signature[5] = { 0 };
memcpy(signature, ptr, 4); short version = 0;
ptr += 4; short reserved = 0;
short iconCount = 0;
short iconSize = 0;
short version = *(short *)ptr; memcpy(signature, fileDataPtr, 4);
ptr += sizeof(short); memcpy(&version, fileDataPtr + 4, sizeof(short));
short reserved = *(short *)ptr; memcpy(&reserved, fileDataPtr + 4 + 2, sizeof(short));
ptr += sizeof(short); memcpy(&iconCount, fileDataPtr + 4 + 2 + 2, sizeof(short));
short iconCount = *(short *)ptr; memcpy(&iconSize, fileDataPtr + 4 + 2 + 2 + 2, sizeof(short));
ptr += sizeof(short); fileDataPtr += 12;
short iconSize = *(short *)ptr;
ptr += sizeof(short);
char **guiIconsName = NULL;
if ((signature[0] == 'r') && if ((signature[0] == 'r') &&
(signature[1] == 'G') && (signature[1] == 'G') &&
@ -4490,20 +4489,20 @@ char **GuiLoadIconsFromMemory(const unsigned char *fileData, size_t dataSize, bo
for (int i = 0; i < iconCount; i++) for (int i = 0; i < iconCount; i++)
{ {
guiIconsName[i] = (char *)RAYGUI_MALLOC(RAYGUI_ICON_MAX_NAME_LENGTH); guiIconsName[i] = (char *)RAYGUI_MALLOC(RAYGUI_ICON_MAX_NAME_LENGTH);
memcpy(guiIconsName[i], ptr, RAYGUI_ICON_MAX_NAME_LENGTH); memcpy(guiIconsName[i], fileDataPtr, RAYGUI_ICON_MAX_NAME_LENGTH);
ptr += RAYGUI_ICON_MAX_NAME_LENGTH; fileDataPtr += RAYGUI_ICON_MAX_NAME_LENGTH;
} }
} }
else else
{ {
// Skip icon name data if not required // Skip icon name data if not required
ptr += iconCount*RAYGUI_ICON_MAX_NAME_LENGTH; fileDataPtr += iconCount*RAYGUI_ICON_MAX_NAME_LENGTH;
} }
int iconDataSize = iconCount*(iconSize*iconSize/32)*sizeof(unsigned int); int iconDataSize = iconCount*(iconSize*iconSize/32)*sizeof(unsigned int);
guiIconsPtr = (unsigned int *)RAYGUI_MALLOC(iconDataSize); guiIconsPtr = (unsigned int *)RAYGUI_MALLOC(iconDataSize);
memcpy(guiIconsPtr, ptr, iconDataSize); memcpy(guiIconsPtr, fileDataPtr, iconDataSize);
} }
return guiIconsName; return guiIconsName;