static int romfs_open(void * opaque, const char * path, int flags, int mode) { uint32_t h = hash_djb2((const uint8_t *) path, -1); const uint8_t * romfs = (const uint8_t *) opaque; const uint8_t * file; int r = -1; file = romfs_get_file_by_hash(romfs, h, NULL); if (file) { r = fio_open(romfs_read, NULL, romfs_seek, NULL, NULL); if (r > 0) { romfs_fds[r].file = file; romfs_fds[r].cursor = 0; fio_set_opaque(r, romfs_fds + r); } } return r; }
static int romfs_open(void * opaque, const char * path, int flags, int mode) { uint32_t h = hash_djb2((const uint8_t *) path, -1); const uint8_t * romfs = (const uint8_t *) opaque; const uint8_t * file; int r = -1; file = romfs_get_file_by_hash(romfs, h, NULL); if (file) { r = fio_open(romfs_read, NULL, romfs_seek, NULL, NULL); if (r > 0) { uint32_t size = get_unaligned(file - 8); const uint8_t *filestart = file; while(*filestart) ++filestart; ++filestart; size -= filestart - file; romfs_fds[r].file = filestart; romfs_fds[r].cursor = 0; romfs_fds[r].size = size; fio_set_opaque(r, romfs_fds + r); } } return r; }