53 if (base->
seek(base, -4, SEEK_END) < 13) {
62 if (base->
seek(base, -5, SEEK_END) < 0 || base->
read(base, &flags, 1) != 1) {
66 bool has_checksums = (flags & 0x80);
78 uint32_t expected_frame_length = frames_num * (has_checksums ? 12 : 8) + 9;
81 off64_t frame_start_ofs = 8 + expected_frame_length;
84 off64_t seek_frame_start = base->
seek(base, -frame_start_ofs, SEEK_END);
85 if (seek_frame_start < frames_num * 8) {
93 uint32_t frame_length;
94 if (!
zstd_read_u32(base, &frame_length) || frame_length != expected_frame_length) {
102 size_t compressed_ofs = 0;
103 size_t uncompressed_ofs = 0;
104 for (
int i = 0;
i < frames_num;
i++) {
105 uint32_t compressed_size, uncompressed_size;
109 if (has_checksums && base->
seek(base, 4, SEEK_CUR) < 0) {
114 compressed_ofs += compressed_size;
115 uncompressed_ofs += uncompressed_size;
121 if (seek_frame_start != compressed_ofs || base->
seek(base, seek_frame_start, SEEK_SET) < 0) {
124 memset(&zstd->
seek, 0,
sizeof(zstd->
seek));
174 zstd->
base->
read(zstd->
base, compressed_data, compressed_size) < compressed_size)
181 size_t res = ZSTD_decompressDCtx(
182 zstd->
ctx, uncompressed_data, uncompressed_size, compressed_data, compressed_size);
184 if (ZSTD_isError(res) || res < uncompressed_size) {
191 return uncompressed_data;
static int magic(const Tex *tex, const float texvec[3], TexResult *texres)