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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user