master
 1//! Creates a file at the given path, if it doesn't already exist.
 2//!
 3//! ```
 4//! touch <path>
 5//! ```
 6//!
 7//! Path must be absolute.
 8
 9const std = @import("std");
10
11pub fn main() !void {
12    var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator);
13    const arena = arena_state.allocator();
14    defer arena_state.deinit();
15
16    try run(arena);
17}
18
19fn run(allocator: std.mem.Allocator) !void {
20    var args = try std.process.argsWithAllocator(allocator);
21    defer args.deinit();
22    _ = args.next() orelse unreachable; // skip binary name
23
24    const path = args.next() orelse {
25        std.log.err("missing <path> argument", .{});
26        return error.BadUsage;
27    };
28
29    const dir_path = std.fs.path.dirname(path) orelse unreachable;
30    const basename = std.fs.path.basename(path);
31
32    var dir = try std.fs.cwd().openDir(dir_path, .{});
33    defer dir.close();
34
35    _ = dir.statFile(basename) catch {
36        var file = try dir.createFile(basename, .{});
37        file.close();
38    };
39}