mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
File arguments added to `std.Build.Step.Run` with e.g. `addFileArg` are not necessarily passed as absolute paths. It used to be the case that they were as a consequence of an unnecessary path conversion done by the frontend, but this no longer happens, at least not always, so these tests were sometimes failing when run locally. Therefore, the standalone tests must handle cwd-relative CLI paths correctly.
45 lines
1.1 KiB
Zig
45 lines
1.1 KiB
Zig
//! Checks that the basename of the given path matches a string.
|
|
//!
|
|
//! Usage:
|
|
//!
|
|
//! ```
|
|
//! has_basename <path> <basename>
|
|
//! ```
|
|
//!
|
|
//! <path> must be absolute.
|
|
//!
|
|
//! Returns a non-zero exit code if basename
|
|
//! does not match the given string.
|
|
|
|
const std = @import("std");
|
|
|
|
pub fn main() !void {
|
|
var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
|
const arena = arena_state.allocator();
|
|
defer arena_state.deinit();
|
|
|
|
try run(arena);
|
|
}
|
|
|
|
fn run(allocator: std.mem.Allocator) !void {
|
|
var args = try std.process.argsWithAllocator(allocator);
|
|
defer args.deinit();
|
|
_ = args.next() orelse unreachable; // skip binary name
|
|
|
|
const path = args.next() orelse {
|
|
std.log.err("missing <path> argument", .{});
|
|
return error.BadUsage;
|
|
};
|
|
|
|
const basename = args.next() orelse {
|
|
std.log.err("missing <basename> argument", .{});
|
|
return error.BadUsage;
|
|
};
|
|
|
|
const actual_basename = std.fs.path.basename(path);
|
|
if (std.mem.eql(u8, actual_basename, basename)) {
|
|
return;
|
|
}
|
|
|
|
return error.NotEqual;
|
|
}
|