More work on OAR packing utility
This commit is contained in:
parent
a2abd9d42d
commit
90f503f7c0
|
@ -187,6 +187,23 @@ test "Spliterating text" {
|
||||||
///
|
///
|
||||||
pub const Writer = meta.Function(@sizeOf(usize), []const u8, usize);
|
pub const Writer = meta.Function(@sizeOf(usize), []const u8, usize);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns `true` if `elements` starts with the characters in `with`, otherwise `false`.
|
||||||
|
///
|
||||||
|
pub fn begins(comptime Element: type, elements: []const Element, with: []const Element) bool {
|
||||||
|
if (elements.len < with.len) return false;
|
||||||
|
|
||||||
|
return equals(Element, elements[0 .. with.len], with);
|
||||||
|
}
|
||||||
|
|
||||||
|
test "Check memory begins with" {
|
||||||
|
const bytes_sequence = &.{69, 42};
|
||||||
|
const testing = std.testing;
|
||||||
|
|
||||||
|
try testing.expect(begins(u8, &.{69, 42, 0, 89}, bytes_sequence));
|
||||||
|
try testing.expect(!begins(u8, &.{69, 89, 42, 0}, bytes_sequence));
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Returns `true` if `this` is the same length and contains the same data as `that`, otherwise
|
/// Returns `true` if `this` is the same length and contains the same data as `that`, otherwise
|
||||||
/// `false`.
|
/// `false`.
|
||||||
|
@ -203,7 +220,7 @@ pub fn equals(comptime Element: type, this: []const Element, that: []const Eleme
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
test "Memory buffers equal" {
|
test "Check memory is equals" {
|
||||||
const bytes_sequence = &.{69, 42, 0};
|
const bytes_sequence = &.{69, 42, 0};
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ pub const Path = extern struct {
|
||||||
/// Returns `true` if `this_path` is equal to `that_path, otherwise `false`.
|
/// Returns `true` if `this_path` is equal to `that_path, otherwise `false`.
|
||||||
///
|
///
|
||||||
pub fn equals(this_path: Path, that_path: Path) bool {
|
pub fn equals(this_path: Path, that_path: Path) bool {
|
||||||
return core.io.equalsBytes(this_path.buffer[0 ..this_path.
|
return core.io.equals(u8, this_path.buffer[0 ..this_path.
|
||||||
length], that_path.buffer[0 .. that_path.length]);
|
length], that_path.buffer[0 .. that_path.length]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,44 +145,54 @@ pub const Path = extern struct {
|
||||||
pub const seperator = '/';
|
pub const seperator = '/';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
test "Path" {
|
||||||
|
const testing = std.testing;
|
||||||
|
const empty_path = Path.empty;
|
||||||
|
|
||||||
|
try testing.expectEqual(empty_path.length, 0);
|
||||||
|
try testing.expect(empty_path.equals(Path.empty));
|
||||||
|
|
||||||
|
const joined_component_path = try Path.joined(&.{"path", "to/my", "/file"});
|
||||||
|
const joined_normalized_path = try Path.joined(&.{"path/to/my/file"});
|
||||||
|
|
||||||
|
try testing.expectEqual(empty_path.length, joined_normalized_path.length);
|
||||||
|
try testing.expect(joined_component_path.equals(joined_normalized_path));
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Starts the **O**na **Ar**chive packer utility.
|
/// Starts the **O**na **Ar**chive packer utility.
|
||||||
///
|
///
|
||||||
pub fn main() !u8 {
|
pub fn main() u8 {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
||||||
defer _ = gpa.deinit();
|
defer std.debug.assert(!gpa.deinit());
|
||||||
|
|
||||||
const process = std.process;
|
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
const args = try process.argsAlloc(allocator);
|
const out_writer = std.io.getStdOut().writer();
|
||||||
|
const process = std.process;
|
||||||
|
|
||||||
|
const args = process.argsAlloc(allocator) catch {
|
||||||
|
try out_writer.print("Failed to allocate args memory", .{});
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
|
||||||
defer process.argsFree(allocator, args);
|
defer process.argsFree(allocator, args);
|
||||||
|
|
||||||
const outWriter = std.io.getStdOut().writer();
|
if (args.len < 2) {
|
||||||
|
try out_writer.print("Usage: oar [OPTION]... [FILE]...", .{});
|
||||||
if (args.len > 1) {
|
try out_writer.print("Options and arguments", .{});
|
||||||
const command = args[1];
|
|
||||||
const io = core.io;
|
|
||||||
|
|
||||||
if (io.equalsBytes(command, "pack")) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (io.equalsBytes(command, "unpack")) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
try outWriter.print("Unknown command: {s}", .{command});
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
try outWriter.print("{s}", .{args[0]});
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
const arg = std.mem.sliceTo(args[1], 0);
|
||||||
|
|
||||||
|
if (core.io.begins(arg, "--create")) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
try out_writer.print("Unrecognized command-line option `{s}`", .{arg});
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue