From d82ac2c4bb24815e313ee0c01700a85617933f66 Mon Sep 17 00:00:00 2001 From: Jaewon Choi <jaewon.james.choi@gmail.com> Date: Sun, 1 Oct 2017 21:21:11 +0900 Subject: [PATCH] Implements cd and pwd --- src/commands.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/commands.c b/src/commands.c index 20293c8..3748285 100644 --- a/src/commands.c +++ b/src/commands.c @@ -1,12 +1,20 @@ +#include <stdio.h> #include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <linux/limits.h> + #include "commands.h" int do_cd(int argc, char** argv) { if (!validate_cd_argv(argc, argv)) return -1; - // TODO: Fill it! + if (chdir(argv[1]) == -1) + return -1; + return 0; } @@ -14,17 +22,31 @@ int do_pwd(int argc, char** argv) { if (!validate_pwd_argv(argc, argv)) return -1; - // TODO: Fill it! + char curdir[PATH_MAX]; + + if (getcwd(curdir, PATH_MAX) == NULL) + return -1; + + printf("%s\n", curdir); return 0; } int validate_cd_argv(int argc, char** argv) { - // TODO: Fill it! + if (argc != 2) return 0; + if (strcmp(argv[0], "cd") != 0) return 0; + + struct stat buf; + stat(argv[1], &buf); + + if (!S_ISDIR(buf.st_mode)) return 0; + return 1; } int validate_pwd_argv(int argc, char** argv) { - // TODO: Fill it! + if (argc != 1) return 0; + if (strcmp(argv[0], "pwd") != 0) return 0; + return 1; } -- GitLab