From fd1f83d85519936c2b527af5386b9e03c719cffa Mon Sep 17 00:00:00 2001 From: Caleb Gardner Date: Sat, 31 May 2025 21:57:18 -0500 Subject: [PATCH] Added uid & gid --- src/file.zig | 10 +++++++- src/zig_unsquashfs.zig | 56 +++++++++++++++++++++++++----------------- 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/file.zig b/src/file.zig index ab9001b..a685797 100644 --- a/src/file.zig +++ b/src/file.zig @@ -59,7 +59,7 @@ pub const File = struct { return out; } - fn file_path(self: File, alloc: std.mem.Allocator) ![]u8 { + pub fn file_path(self: File, alloc: std.mem.Allocator) ![]u8 { if (self.parent_path.len == 0) { const out = try alloc.alloc(u8, self.name.len); @memcpy(out, self.name); @@ -68,6 +68,14 @@ pub const File = struct { return std.mem.concat(alloc, u8, &[3][]const u8{ self.parent_path, "/", self.name }); } + pub fn uid(self: File, rdr: *Reader) !u32 { + return rdr.id_table.getValue(rdr, self.inode.header.uid_idx); + } + + pub fn gid(self: File, rdr: *Reader) !u32 { + return rdr.id_table.getValue(rdr, self.inode.header.gid_idx); + } + pub fn deinit(self: *File, alloc: std.mem.Allocator) void { self.inode.deinit(); alloc.free(self.name); diff --git a/src/zig_unsquashfs.zig b/src/zig_unsquashfs.zig index f2a6416..d468caf 100644 --- a/src/zig_unsquashfs.zig +++ b/src/zig_unsquashfs.zig @@ -1,6 +1,7 @@ const std = @import("std"); const config = @import("config"); +const File = @import("file.zig").File; const Reader = @import("reader.zig").Reader; const ExtractConfig = @import("file.zig").File.ExtractConfig; @@ -131,33 +132,42 @@ pub fn main() !void { try std.fmt.format(stdout.writer(), "Error opening {s} as squashfs: {any}\n", .{ filename, err }); return; }; - if (list == .None) { - var conf = ExtractConfig.init() catch |err| { - try std.fmt.format(stdout.writer(), "Error getting system info: {any}\n", .{err}); - return; - }; - conf.deref_sym = deref; - conf.unbreak_sym = unbreak; - conf.verbose = verbose; - if (extr_files.items.len == 0) { - rdr.root.extract(&rdr, conf, extr_location) catch |err| { - try std.fmt.format(stdout.writer(), "Error extracting archive: {any}\n", .{err}); + switch (list) { + .None => { + var conf = ExtractConfig.init() catch |err| { + try std.fmt.format(stdout.writer(), "Error getting system info: {any}\n", .{err}); return; }; - } else { - for (extr_files.items) |path| { - var fil = rdr.root.open(&rdr, path) catch |err| { - try std.fmt.format(stdout.writer(), "Error extracting {s}: {any}\n", .{ path, err }); - return; - }; - defer fil.deinit(alloc.allocator()); - fil.extract(&rdr, conf, extr_location) catch |err| { - try std.fmt.format(stdout.writer(), "Error extracting {s}: {any}\n", .{ path, err }); + conf.deref_sym = deref; + conf.unbreak_sym = unbreak; + conf.verbose = verbose; + if (extr_files.items.len == 0) { + rdr.root.extract(&rdr, conf, extr_location) catch |err| { + try std.fmt.format(stdout.writer(), "Error extracting archive: {any}\n", .{err}); return; }; + } else { + for (extr_files.items) |path| { + var fil = rdr.root.open(&rdr, path) catch |err| { + try std.fmt.format(stdout.writer(), "Error extracting {s}: {any}\n", .{ path, err }); + return; + }; + defer fil.deinit(alloc.allocator()); + fil.extract(&rdr, conf, extr_location) catch |err| { + try std.fmt.format(stdout.writer(), "Error extracting {s}: {any}\n", .{ path, err }); + return; + }; + } } - } - return; + }, + else => {}, } - //TODO: listing } + +fn printFile(rdr: *Reader, f: *File) !void { + if (f.name.len == 0) { + + } +} + +fn printDir(rdr: *Reader, f: *File) !void {}