57 if (base->
seek(base, -4, SEEK_END) < 13) {
66 if (base->
seek(base, -5, SEEK_END) < 0 || base->
read(base, &flags, 1) != 1) {
70 bool has_checksums = (flags & 0x80);
82 uint32_t expected_frame_length = frames_num * (has_checksums ? 12 : 8) + 9;
85 off64_t frame_start_ofs = 8 + expected_frame_length;
88 off64_t seek_frame_start = base->
seek(base, -frame_start_ofs, SEEK_END);
89 if (seek_frame_start < frames_num * 8) {
98 if (!
zstd_read_u32(base, &frame_length) || frame_length != expected_frame_length) {
106 size_t compressed_ofs = 0;
107 size_t uncompressed_ofs = 0;
108 for (
int i = 0; i < frames_num; i++) {
109 uint32_t compressed_size, uncompressed_size;
113 if (has_checksums && base->
seek(base, 4, SEEK_CUR) < 0) {
118 compressed_ofs += compressed_size;
119 uncompressed_ofs += uncompressed_size;
125 if (seek_frame_start != compressed_ofs || base->
seek(base, seek_frame_start, SEEK_SET) < 0) {
128 memset(&zstd->
seek, 0,
sizeof(zstd->
seek));
175 char *uncompressed_data =
MEM_mallocN(uncompressed_size, __func__);
176 char *compressed_data =
MEM_mallocN(compressed_size, __func__);
178 zstd->
base->
read(zstd->
base, compressed_data, compressed_size) < compressed_size)
185 size_t res = ZSTD_decompressDCtx(
186 zstd->
ctx, uncompressed_data, uncompressed_size, compressed_data, compressed_size);
188 if (ZSTD_isError(res) || res < uncompressed_size) {
195 return uncompressed_data;
static int magic(const Tex *tex, const float texvec[3], TexResult *texres)