diff options
Diffstat (limited to 'src/format')
| -rw-r--r-- | src/format/image/png.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/format/image/png.c b/src/format/image/png.c new file mode 100644 index 0000000..b29e271 --- /dev/null +++ b/src/format/image/png.c @@ -0,0 +1,37 @@ +#include "tinyff/image/png.h" +#include "png.h" + +ff_result ff_png_isvalid(FILE *file) +{ + char raw_sig[8]; + if (fread(raw_sig, sizeof(char), 8, file) != 8) { + // Inable to read first 8 bytes + fclose(file); + return FF_RESULT_ERROR_INVALID_FILE; + } + + if (memcmp(raw_sig, PNG_SIGNATURE, 8) != 0) { + // Signiture did not match + fclose(file); + return FF_RESULT_ERROR_INVALID_FILE_SIGNITURE; + } + + return FF_RESULT_OK; +} + +ff_png_ctx *ff_open_png(const char *filepath) { + // Validate + + ff_png_ctx ctx; + ctx.raw = fopen(filepath, "rb"); + + if (!ctx.raw) { + return NULL; + } + + if (ff_png_isvalid(ctx.raw) != FF_RESULT_OK) { + return NULL; + } + + // TODO: Parse +}
\ No newline at end of file |
