I64 @shell_cmd_cd(@shell* sh, I64 argc, U8** argv) { I64 res = 0; if (argc < 2) { StrPrint(&sh->cwd, &Compositor.session.home); return res; } U8* full_expanded_path = @shell_expand_relative_path(sh, argv[1]); if (!FileSystem.PathExists(full_expanded_path)) { Stdio.WriteLine(sh, "cd: %s: No such file or directory\n", argv[1]); res = 1; } else { U8* new_path = @shell_expand_relative_path_to_root_path(sh, argv[1]); U8* resolved_path = @filesystem_resolve_path(new_path); StrPrint(&sh->cwd, resolved_path); Free(resolved_path); Free(new_path); } Free(full_expanded_path); return res; }