From 1584eaee8e1b7473e4f6498ec2ecbdca579ffc6e Mon Sep 17 00:00:00 2001 From: Robby Zambito Date: Sun, 30 Mar 2025 12:53:07 -0400 Subject: [PATCH] --- src/main.zig | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main.zig b/src/main.zig index 2ae4128..00eb80f 100644 --- a/src/main.zig +++ b/src/main.zig @@ -14,7 +14,13 @@ fn getPrompt(allocator: Allocator) ![]const u8 { return result.stdout; } -fn runCommand(command: []const u8, allocator: Allocator) !u8 { +fn runCommand(command: [][]const u8, allocator: Allocator) !u8 { + var child = std.process.Child.init(command, allocator); + const result = try child.spawnAndWait(); + return result.Exited; +} + +fn tokenizeCommand(command: []const u8, allocator: Allocator) ![][]const u8 { var argv_array_list = ArrayList([]const u8).init(allocator); defer argv_array_list.deinit(); @@ -22,13 +28,7 @@ fn runCommand(command: []const u8, allocator: Allocator) !u8 { while (tokens.next()) |token| { try argv_array_list.append(token); } - - var child = std.process.Child.init(argv_array_list.items, allocator); - const result = child.spawnAndWait() catch |err| { - std.log.debug("Error forking", .{}); - return err; - }; - return result.Exited; + return argv_array_list.toOwnedSlice(); } pub fn main() !void { @@ -36,7 +36,6 @@ pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}).init; defer _ = gpa.deinit(); - defer _ = gpa.detectLeaks(); const allocator = gpa.allocator(); @@ -48,9 +47,13 @@ pub fn main() !void { while (try ln.linenoise(p)) |input| { defer allocator.free(input); - std.debug.print("input: {s}\n", .{input}); try ln.history.add(input); - _ = try runCommand(input, allocator); + const command = try tokenizeCommand(input, allocator); + defer allocator.free(command); + _ = runCommand(command, allocator) catch |err| switch (err) { + error.FileNotFound => stdout.print("mash: {s}: command not found", .{command[0]}) catch unreachable, + else => std.log.debug("Unkown error: {}", .{err}), + }; } }