55 lines
1.5 KiB
C
55 lines
1.5 KiB
C
/**
|
|
* 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);
|
|
} |