master
1//! Checks that the basename of the given path matches a string.
2//!
3//! Usage:
4//!
5//! ```
6//! has_basename <path> <basename>
7//! ```
8//!
9//! <path> must be absolute.
10//!
11//! Returns a non-zero exit code if basename
12//! does not match the given string.
13
14const std = @import("std");
15
16pub fn main() !void {
17 var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator);
18 const arena = arena_state.allocator();
19 defer arena_state.deinit();
20
21 try run(arena);
22}
23
24fn run(allocator: std.mem.Allocator) !void {
25 var args = try std.process.argsWithAllocator(allocator);
26 defer args.deinit();
27 _ = args.next() orelse unreachable; // skip binary name
28
29 const path = args.next() orelse {
30 std.log.err("missing <path> argument", .{});
31 return error.BadUsage;
32 };
33
34 const basename = args.next() orelse {
35 std.log.err("missing <basename> argument", .{});
36 return error.BadUsage;
37 };
38
39 const actual_basename = std.fs.path.basename(path);
40 if (std.mem.eql(u8, actual_basename, basename)) {
41 return;
42 }
43
44 return error.NotEqual;
45}