~ruther/CTU-FEE-B0B35APO-Semestral-project

59b2217e048aac7744b0745395563f6265b97043 — František Boháček 3 years ago 4e232e3
refactor: use libmagic instead of custom handling magic numbers
1 files changed, 21 insertions(+), 12 deletions(-)

M image-viewer/src/image_loader.c
M image-viewer/src/image_loader.c => image-viewer/src/image_loader.c +21 -12
@@ 8,6 8,7 @@
#include <png.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFER_LENGTH 4



@@ 231,24 232,32 @@ image_error_t image_deduce_type(image_t *image) {
    return image_error_from_errno();
  }

  uint8_t data[BUFFER_LENGTH];
  if (fread(data, 1, BUFFER_LENGTH, file) != BUFFER_LENGTH) {
    fclose(file);
    return IMERR_UNKNOWN;
  }
  magic_t magic = magic_open(MAGIC_MIME_TYPE);
  magic_load(magic, NULL);

  fclose(file);
  const char *mime = magic_file(magic, image->path);

  if (data[0] == 0xFF && data[1] == 0xD8 && data[2] == 0xFF) {
  if (strstr(mime, "jpeg") != NULL || strstr(mime, "jpg") != NULL) {
    image->type = IMG_JPG;
  } else if (data[0] == 0x89 && data[1] == 0x50 && data[2] == 0x4E &&
             data[3] == 0x47) {
  } else if (strstr(mime, "image/png") != NULL) {
    image->type = IMG_PNG;
  } else if (data[0] == 'P' && data[1] == '6') {
    image->type = IMG_PPM;
  } else {
    return IMERR_UNKNOWN_FORMAT;
    uint8_t data[BUFFER_LENGTH];
    if (fread(data, 1, BUFFER_LENGTH, file) != BUFFER_LENGTH) {
      fclose(file);
      return IMERR_UNKNOWN;
    }

    fclose(file);

    if (data[0] == 'P' && data[1] == '6') {
      image->type = IMG_PPM;
    } else {
      magic_close(magic);
      return IMERR_UNKNOWN_FORMAT;
    }
  }

  magic_close(magic);
  return IMERR_SUCCESS;
}

Do not follow this link