Re-added all C decompressors
Some cleanup Remove inode arena Added deinit to Archive to destroy the File.MemoryMap
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
const std = @import("std");
|
||||
const Io = std.Io;
|
||||
const Reader = std.Io.Reader;
|
||||
const zstd = std.compress.zstd;
|
||||
const Node = std.SinglyLinkedList.Node;
|
||||
|
||||
const c = @import("c");
|
||||
|
||||
const Decompressor = @import("../util/decompressor.zig");
|
||||
const Error = Decompressor.Error;
|
||||
|
||||
const Queue = std.Io.Queue(c.lzma_stream);
|
||||
|
||||
const Self = @This();
|
||||
|
||||
pub const stateless_decompressor: Decompressor = .{ .decomp_fn = statelessDecomp };
|
||||
|
||||
fn statelessDecomp(_: ?*const Decompressor, _: std.mem.Allocator, in: []u8, out: []u8) Error!usize {
|
||||
_ = c.lzo_init();
|
||||
var out_len = out.len;
|
||||
const res = c.lzo1x_decompress_safe(in.ptr, in.len, out.ptr, &out_len, null);
|
||||
if (res != c.LZO_E_OK) return Error.ReadFailed;
|
||||
return out_len;
|
||||
}
|
||||
|
||||
// lzma_allocator
|
||||
|
||||
fn lzmaAlloc(ptr: ?*anyopaque, size: usize, _: usize) callconv(.c) ?*anyopaque {
|
||||
var alloc: *std.mem.Allocator = @ptrCast(@alignCast(@constCast(ptr)));
|
||||
return alloc.rawAlloc(size, .@"1", 0);
|
||||
}
|
||||
fn lzmaFree(ptr: ?*anyopaque, mem_ptr: ?*anyopaque) callconv(.c) void {
|
||||
var alloc: *std.mem.Allocator = @ptrCast(@alignCast(@constCast(ptr)));
|
||||
alloc.rawFree(@ptrCast(mem_ptr), .@"1", 0);
|
||||
}
|
||||
Reference in New Issue
Block a user