summaryrefslogtreecommitdiff
path: root/src/builtins.zig
diff options
context:
space:
mode:
authorLucas Faria Mendes <lucas.oliveira1676@etec.sp.gov.br>2025-12-05 05:59:38 +0000
committerLucas Faria Mendes <lucas.oliveira1676@etec.sp.gov.br>2025-12-05 05:59:38 +0000
commit083c82e259ad508a04617cdfccc40ce728a43195 (patch)
tree895aea6dfdc1b825f9991b8f1071816bde3d64d6 /src/builtins.zig
parent350625683c066a4790f41cb91c8c05ac4fb5dd4f (diff)
downloadshell-zig-083c82e259ad508a04617cdfccc40ce728a43195.tar.gz
shell-zig-083c82e259ad508a04617cdfccc40ce728a43195.zip
codecrafters submit [skip ci]
Diffstat (limited to 'src/builtins.zig')
-rw-r--r--src/builtins.zig14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/builtins.zig b/src/builtins.zig
index ea34f19..07c278b 100644
--- a/src/builtins.zig
+++ b/src/builtins.zig
@@ -1,7 +1,7 @@
const std = @import("std");
const path = @import("path.zig");
-const BUILTINS = [_][]const u8{ "exit", "echo", "type", "pwd" };
+const BUILTINS = [_][]const u8{ "exit", "echo", "type", "pwd", "cd" };
pub const CommandResult = enum {
continue_loop,
@@ -33,6 +33,18 @@ pub fn executePwd(allocator: std.mem.Allocator, stdout: anytype) !void {
try stdout.print("{s}\n", .{cwd});
}
+pub fn executeCd(stdout: anytype, args: ?[]const u8) !void {
+ if (args == null or args.?.len == 0) {
+ try stdout.print("cd: missing argument\n", .{});
+ return;
+ }
+
+ const dir = std.mem.trim(u8, args.?, " ");
+ std.posix.chdir(dir) catch {
+ try stdout.print("cd: {s}: No such file or directory\n", .{dir});
+ };
+}
+
pub fn executeType(allocator: std.mem.Allocator, stdout: anytype, args: ?[]const u8) !void {
if (args) |a| {
if (isBuiltin(a)) {