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}