/** * Copyright (c) 2023 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "asset/assetarchive.h" #include "assert/assert.h" #include "util/math.h" FILE *ASSET_FILE; struct archive *ASSET_ARCHIVE; struct archive_entry *ASSET_ENTRY; uint8_t ASSET_ARCHIVE_BUFFER[ASSET_BUFFER_SIZE]; char_t ASSET_PATH_CURRENT[ASSET_PATH_MAX]; ssize_t assetArchiveRead( struct archive *archive, void *data, const void **buffer ) { assertNotNull(archive, "assetArchiveRead: Archive is NULL!"); assertNotNull(data, "assetArchiveRead: Data is NULL!"); assertNotNull(buffer, "assetArchiveRead: Buffer is NULL!"); *buffer = data; size_t read = fread(data, 1, ASSET_BUFFER_SIZE, ASSET_FILE); if(ferror(ASSET_FILE)) return ARCHIVE_FATAL; return read; } int64_t assetArchiveSeek( struct archive *archive, void *data, int64_t offset, int32_t whence ) { assertNotNull(archive, "assetArchiveSeek: Archive is NULL!"); assertNotNull(data, "assetArchiveSeek: Data is NULL!"); assertTrue(offset > 0, "assetArchiveSeek: Offset must be greater than 0!"); int32_t ret = fseek(ASSET_FILE, offset, whence); assertTrue(ret == 0, "assetArchiveSeek: Failed to seek!"); return ftell(ASSET_FILE); } int32_t assetArchiveOpen(struct archive *a, void *data) { int32_t ret = fseek(ASSET_FILE, 0, SEEK_SET); assertTrue(ret == 0, "assetArchiveOpen: Failed to seek to start of file!"); return ARCHIVE_OK; } int32_t assetArchiveClose(struct archive *a, void *data) { return assetArchiveOpen(a, data); }