Skip to content

Commit

Permalink
image.c: Parse header of image to determine supported format.
Browse files Browse the repository at this point in the history
  • Loading branch information
Damien-Chen committed Aug 22, 2024
1 parent b9400d6 commit aeab1e2
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions src/image.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,28 +40,35 @@ static twin_image_format_t image_type_from_name(const char *path)
FILE *file = fopen(path, "rb");

if (!file) {
perror("File opening failed");
perror("Failed to open %s");
return IMAGE_TYPE_unknown;
}

unsigned char header[8];
size_t bytesRead = fread(header, 1, sizeof(header), file);
uint8_t header[8];
size_t bytes_read = fread(header, 1, sizeof(header), file);
fclose(file);

if (bytesRead < 8) {
if (bytes_read < 8) {
return IMAGE_TYPE_unknown;
}

#if LOADER_HAS(PNG)
if (header[0] == 0x89 && header[1] == 0x50 && header[2] == 0x4E &&
header[3] == 0x47 && header[4] == 0x0D && header[5] == 0x0A &&
header[6] == 0x1A && header[7] == 0x0A) {
#if __BYTE_ORDER == __BIG_ENDIAN
uint8_t png_header[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};
if (memcmp(header, png_header, sizeof(png_header)) == 0) {
type = IMAGE_TYPE_png;
}
#else
uint8_t png_header[8] = {0x0A, 0x1A, 0x0A, 0x0D, 0x47, 0x4E, 0x50, 0x89};
if (memcmp(header, png_header, sizeof(png_header)) == 0) {
type = IMAGE_TYPE_png;
}
#endif
#endif

#if LOADER_HAS(JPEG)
else if (header[0] == 0xFF && header[1] == 0xD8 && header[2] == 0xFF) {
uint8_t jpg_header[3] = {0xFF, 0xD8, 0xFF};
if (memcmp(header, jpg_header, sizeof(jpg_header)) == 0) {
type = IMAGE_TYPE_jpeg;
}
#endif
Expand Down

0 comments on commit aeab1e2

Please sign in to comment.