sokoban-v2/scripts/create-zip.zig

43 lines
1.4 KiB
Zig

const std = @import("std");
const Io = std.Io;
const miniz = @import("miniz");
pub fn main(init: std.process.Init) !void {
const io = init.io;
const arena = init.arena.allocator();
const args = try init.minimal.args.toSlice(arena);
if (args.len != 3) {
std.debug.print("Usage: ./create-zip <directory> <output>", .{});
std.process.exit(1);
}
const input_directory_path = args[1];
const output_zip_path = args[2];
const cwd = Io.Dir.cwd();
var archive: miniz.Archive = undefined;
try archive.initFile(output_zip_path);
defer archive.end();
var input_dir = try cwd.openDir(io, input_directory_path, .{ .iterate = true });
defer input_dir.close(io);
var input_dir_iter = input_dir.iterate();
while (try input_dir_iter.next(io)) |entry| {
if (entry.kind == .file) {
var path_buff: [std.fs.max_path_bytes+1]u8 = undefined;
const path_len = try input_dir.realPathFile(io, entry.name, path_buff[0..(path_buff.len-1)]);
path_buff[path_len] = 0;
var namez_buff: [std.fs.max_name_bytes+1]u8 = undefined;
@memcpy(namez_buff[0..entry.name.len], entry.name);
namez_buff[entry.name.len] = 0;
try archive.addFile(namez_buff[0..entry.name.len :0], path_buff[0..path_len :0]);
}
}
try archive.finalize();
}