diff --git a/src/commands.c b/src/commands.c index 20293c896ca4d203a2461c69f88ac24c0a4bca07..3748285057305e22bee2bea5eb2474077fefc1d8 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; }