+static grub_ssize_t zstd_decompress_wrap(char *inbuf, grub_size_t insize, grub_off_t off,
+ char *outbuf, grub_size_t len, struct grub_squash_data *data)
+{
+ char *udata = NULL;
+ int usize = data->blksz;
+
+ if (off == 0)
+ {
+ ZSTD_decompress(outbuf, len, inbuf, insize);
+ }
+ else
+ {
+ if (usize < 8192)
+ usize = 8192;
+
+ udata = grub_malloc (usize);
+ if (!udata)
+ return -1;
+
+ ZSTD_decompress(udata, usize, inbuf, insize);
+ grub_memcpy(outbuf, udata + off, len);
+ grub_free(udata);
+ }
+
+ return len;
+}
+